[이 모듈이 하는 일] 역사·시대극 키프레임의 고증을 검사한다. 설계도 제목·분류·장면 목적·이미지 프롬프트에서 시대와 지역을 읽고, 복식·머리 모양·건축·무기·탈것·도구가 그 시대에 맞는지, 전선·플라스틱·손목시계 같은 현대 물건이 섞이지 않았는지 본다. 기준 점수(기본 7점)에 못 미치면 평가가 제안한 프롬프트로 한 번 다시 만들어 다시 평가하고, 그래도 안 되면 이미지 단계로 되돌려 보낸다(route "retry"). input.image_regenerate 가 false 면 다시 만들지 않고 기록·경고만 남긴다. 다른 이미지 평가 모듈과 이어 붙여 써도 된다. 기록은 check "period" 로 구분해 서로의 통과 기록을 건너뛰지 않는다. [이 모듈이 보는 것] - 복식·머리 모양·장신구 - 건축·실내 소품·탈것·무기·도구 - 시대에 없는 물건(전선·플라스틱·현대 간판·안경·시계 등) [입력] 이전 단계 JSON(vidia.doc@1). - blueprint.meta: {title, category, tags, format} - blueprint.video: {visualStyle, negativeStyle, aspectRatio} - blueprint.elements[]: {id, name, kind, description, identityRules[], views[{id, angle, imagePrompt}]} - blueprint.scenes[]: {id, purpose, media.type, videoPrompt, keyframes[{id, role, imagePrompt, references[{elementId, viewId}], referenceKeyframeIds}]} - assets: "kf:<장면>:<키프레임>", "sheet:<요소>:<구도>" - reviews.images: 이전 평가 기록(다른 이미지 평가 모듈의 기록도 함께 쌓인다) - promptOverrides: 이전에 고친 프롬프트(있을 때) - input.image_threshold: 통과 점수(0~10). 없으면 7. - input.image_regenerate: false 면 다시 만들지 않는다(기본 true). [할 일] 1. 설계도에서 시대·지역을 전혀 읽을 수 없는 현대 배경 영상이면 평가하지 않고 reviewWarnings 에 "시대 정보 없음" 한 줄만 남긴다. 2. 평가할 목록: assets 에서 "kf:" 로 시작하는 모든 키. 단 reviews.images 에 같은 key·같은 asset_id·같은 check("period") 로 pass 가 true 인 기록이 있으면 건너뛴다(이 모듈 기준으로 이미 통과한 이미지는 다시 평가하지 않는다). 평가할 이미지가 없으면 도구를 부르지 않고 route "pass" 와 reviewSummary 만 내보낸다. 3. 키마다 평가 기준(criteria)을 한국어로 만든다. 500자 안팎으로 짧게, 아래 줄을 채워 넣는다(< > 는 설계도에서 읽은 값으로 바꾼다): - "시대·지역: <설계도·장면에서 읽은 시대와 지역, 모르면 imagePrompt 의 시대 표현>" - "복식·머리 모양·건축·무기·탈것·도구가 그 시대·지역에 맞아야 함" - "그 시대에 없는 물건(전선·플라스틱·현대 간판·손목시계·현대식 안경 등)이 없어야 함" - "다른 나라·다른 시대 양식이 섞이면 감점(예: 조선 장면에 일본식 갑옷)" - "화면 내용: " - 공통: "점수는 0~10, 위 기준을 얼마나 만족하는지만 본다" 4. review_image(asset_id, criteria) 를 부른다. 결과의 score(0~10), pass, issues, suggested_prompt 를 읽는다. 통과는 score ≥ 기준 점수(input.image_threshold, 없으면 7)로 판정하고 도구의 pass 보다 이 기준을 우선한다. 5. 기준 미달이고 input.image_regenerate 가 false 가 아니면 이 방문에서 한 번만 다시 만든다. - 이 키의 재생성 횟수(reviews.images 에서 같은 key 의 regenerated 가 true 인 기록 수, 모든 check 합산)가 이미 2 이상이면 다시 만들지 않는다. - 원래 프롬프트 = promptOverrides[키] 가 있으면 그것, 없으면 그 키프레임의 imagePrompt. - 새 프롬프트 = 원래 프롬프트에 suggested_prompt 와 issues 를 고치는 지시를 반영한 영어 프롬프트. 시대·지역과 어긋난 요소를 올바른 양식 이름(영어)으로 명시하고 현대 물건을 금지어로 더한다. 원래 장면 내용·글자 금지·동일성 조건은 빠뜨리지 않는다. - image_generate 를 부른다: prompt = "\n<새 프롬프트>\nAvoid: , text, letters, logos, watermark.", size "auto", reference_asset_ids = 원래 키프레임의 참조(references 의 시트 asset + referenceKeyframeIds 의 이미지, 최대 3장), label = 키. - 새 이미지를 같은 기준으로 review_image 로 다시 평가한다. - 새 이미지 점수가 원래보다 높거나 같으면 assets[키] 를 새 asset_id 로 바꾼다. 낮으면 원래 이미지를 유지한다. - promptOverrides[키] = 새 프롬프트. 6. 기록: 평가할 때마다 reviews.images 에 {"key": 키, "check": "period", "asset_id": 평가한 asset, "score": 점수, "pass": 통과 여부, "issues": 문제 목록(최대 5개, 짧게), "regenerated": 재생성한 이미지의 평가면 true, "visit": 이번 방문 번호(같은 key·같은 check 의 기록 수 기준)} 를 더한다. 7. 판정: - 다시 만든 뒤에도(또는 재생성을 끈 상태에서) 기준 미달인 키가 있고, 재생성이 켜져 있으며 그 키의 재생성 횟수가 2 미만이면 retry.images 에 그 키를 넣는다. 하나라도 있으면 route "retry". - 없으면 route "pass". 끝내 기준 미달인 키는 가장 점수가 높은 이미지를 assets 에 남기고 reviewWarnings 에 {"key": 키, "check": "period", "score": 점수, "issues": […]} 를 더한다. 8. 도구 오류로 평가하지 못한 키는 통과로 간주하고 reviewWarnings 에 남긴다(평가 장애로 제작 전체를 멈추지 않는다). [출력] 다음 최상위 필드만 담은 JSON 객체 하나(적지 않은 최상위 필드는 입력값이 그대로 이어지므로 다시 적지 않는다. 바꾸는 필드는 값 전체를 적는다.) - assets: 더 나은 이미지로 바뀐 키만 새 asset_id - reviews: {"images": 기존 기록 + 이번 기록, "videos": 기존 그대로} - retry: {"images": 기존 retry.images 에 이번에 다시 만들 키를 더한 목록(중복 없이), …기존 retry 의 다른 키는 그대로} - promptOverrides: 고친 프롬프트를 더한 객체 - reviewWarnings: 경고 목록(기존 뒤에 더한다) - route: "retry" 또는 "pass" - reviewSummary: {"check": "period", "reviewed": 평가 수, "passed": 통과 수, "regenerated": 재생성 수, "retry": 이번에 retry 에 넣은 키 수} [주의] - review_image 와 image_generate 는 비용이 드는 도구다. 이 모듈 기준으로 이미 통과한 이미지는 다시 평가하지 않고, 한 방문에서 키마다 재생성은 한 번뿐이다. - 요소 시트("sheet:")는 평가하지 않는다. - 평가 결과를 지어내지 않는다. 도구가 준 점수만 쓴다. - 설계도(blueprint)는 바꾸지 않는다. - 설명·마크다운 없이 JSON 객체 하나만 답한다.