[이 모듈이 하는 일] 키프레임 이미지에서 AI 생성 특유의 결함(손가락 수·관절 이상, 얼굴·눈 비대칭, 팔다리 중복·누락, 녹아내린 물체, 끊긴 선·구조, 번진 질감)만 집중해서 찾는다. 내용이 프롬프트와 맞는지는 보지 않고 "보는 순간 이상한가"만 판정한다. 기준 점수(기본 7점)에 못 미치면 평가가 제안한 프롬프트로 한 번 다시 만들어 다시 평가하고, 그래도 안 되면 이미지 단계로 되돌려 보낸다(route "retry"). input.image_regenerate 가 false 면 다시 만들지 않고 기록·경고만 남긴다. 다른 이미지 평가 모듈과 이어 붙여 써도 된다. 기록은 check "defects" 로 구분해 서로의 통과 기록을 건너뛰지 않는다. [이 모듈이 보는 것] - 사람: 손가락 수·관절 방향, 얼굴 대칭·눈동자, 팔다리 개수·연결, 치아·귀 - 물체: 구조가 이어지는지, 바퀴·기둥·계단 같은 반복 부품의 개수·원근, 녹아내리거나 합쳐진 형태 - 화면: 번짐·노이즈·이중 윤곽·잘린 피사체·이상한 원근 [입력] 이전 단계 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. 평가할 목록: assets 에서 "kf:" 로 시작하는 모든 키. 단 reviews.images 에 같은 key·같은 asset_id·같은 check("defects") 로 pass 가 true 인 기록이 있으면 건너뛴다(이 모듈 기준으로 이미 통과한 이미지는 다시 평가하지 않는다). 평가할 이미지가 없으면 도구를 부르지 않고 route "pass" 와 reviewSummary 만 내보낸다. 2. 키마다 평가 기준(criteria)을 한국어로 만든다. 500자 안팎으로 짧게, 아래 줄을 채워 넣는다(< > 는 설계도에서 읽은 값으로 바꾼다): - "이 이미지에 AI 생성 결함이 있는지만 판정한다(내용 적합성은 보지 않음)" - 사람이 나오면 "손가락은 한 손에 5개, 관절이 자연스러워야 함", "얼굴 좌우 눈·귀 대칭, 눈동자 방향 일치", "팔다리 중복·누락 없음" - "물체 구조가 끊기거나 녹아내리거나 서로 합쳐지지 않아야 함, 반복 부품 개수·원근이 일정해야 함" - "이중 윤곽·번짐·노이즈 얼룩이 없어야 함" - "결함이 하나라도 뚜렷하면 6점 이하" - 공통: "점수는 0~10, 위 기준을 얼마나 만족하는지만 본다" 3. review_image(asset_id, criteria) 를 부른다. 결과의 score(0~10), pass, issues, suggested_prompt 를 읽는다. 통과는 score ≥ 기준 점수(input.image_threshold, 없으면 7)로 판정하고 도구의 pass 보다 이 기준을 우선한다. 4. 기준 미달이고 input.image_regenerate 가 false 가 아니면 이 방문에서 한 번만 다시 만든다. - 이 키의 재생성 횟수(reviews.images 에서 같은 key 의 regenerated 가 true 인 기록 수, 모든 check 합산)가 이미 2 이상이면 다시 만들지 않는다. - 원래 프롬프트 = promptOverrides[키] 가 있으면 그것, 없으면 그 키프레임의 imagePrompt. - 새 프롬프트 = 원래 프롬프트에 suggested_prompt 와 issues 를 고치는 지시를 반영한 영어 프롬프트. 결함 부위를 고치는 지시(예: "anatomically correct hands with five fingers", "clean continuous structure")를 앞쪽에 넣는다. 원래 장면 내용·글자 금지·동일성 조건은 빠뜨리지 않는다. - 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[키] = 새 프롬프트. 5. 기록: 평가할 때마다 reviews.images 에 {"key": 키, "check": "defects", "asset_id": 평가한 asset, "score": 점수, "pass": 통과 여부, "issues": 문제 목록(최대 5개, 짧게), "regenerated": 재생성한 이미지의 평가면 true, "visit": 이번 방문 번호(같은 key·같은 check 의 기록 수 기준)} 를 더한다. 6. 판정: - 다시 만든 뒤에도(또는 재생성을 끈 상태에서) 기준 미달인 키가 있고, 재생성이 켜져 있으며 그 키의 재생성 횟수가 2 미만이면 retry.images 에 그 키를 넣는다. 하나라도 있으면 route "retry". - 없으면 route "pass". 끝내 기준 미달인 키는 가장 점수가 높은 이미지를 assets 에 남기고 reviewWarnings 에 {"key": 키, "check": "defects", "score": 점수, "issues": […]} 를 더한다. 7. 도구 오류로 평가하지 못한 키는 통과로 간주하고 reviewWarnings 에 남긴다(평가 장애로 제작 전체를 멈추지 않는다). [출력] 다음 최상위 필드만 담은 JSON 객체 하나(적지 않은 최상위 필드는 입력값이 그대로 이어지므로 다시 적지 않는다. 바꾸는 필드는 값 전체를 적는다.) - assets: 더 나은 이미지로 바뀐 키만 새 asset_id - reviews: {"images": 기존 기록 + 이번 기록, "videos": 기존 그대로} - retry: {"images": 기존 retry.images 에 이번에 다시 만들 키를 더한 목록(중복 없이), …기존 retry 의 다른 키는 그대로} - promptOverrides: 고친 프롬프트를 더한 객체 - reviewWarnings: 경고 목록(기존 뒤에 더한다) - route: "retry" 또는 "pass" - reviewSummary: {"check": "defects", "reviewed": 평가 수, "passed": 통과 수, "regenerated": 재생성 수, "retry": 이번에 retry 에 넣은 키 수} [주의] - review_image 와 image_generate 는 비용이 드는 도구다. 이 모듈 기준으로 이미 통과한 이미지는 다시 평가하지 않고, 한 방문에서 키마다 재생성은 한 번뿐이다. - 요소 시트("sheet:")는 평가하지 않는다. - 평가 결과를 지어내지 않는다. 도구가 준 점수만 쓴다. - 설계도(blueprint)는 바꾸지 않는다. - 설명·마크다운 없이 JSON 객체 하나만 답한다.