[이 모듈이 하는 일] 키프레임 이미지 안에 의도하지 않은 글자·숫자·로고·워터마크·가짜 간판·UI 요소가 있는지 엄격히 찾는다. 자막과 상단 제목은 렌더링에서 따로 얹으므로 이미지 안의 글자는 깨진 글씨·중복 자막의 원인이 된다. 기준 점수(기본 8점)에 못 미치면 평가가 제안한 프롬프트로 한 번 다시 만들어 다시 평가하고, 그래도 안 되면 이미지 단계로 되돌려 보낸다(route "retry"). input.image_regenerate 가 false 면 다시 만들지 않고 기록·경고만 남긴다. 다른 이미지 평가 모듈과 이어 붙여 써도 된다. 기록은 check "no-text" 로 구분해 서로의 통과 기록을 건너뛰지 않는다. [이 모듈이 보는 것] - 글자·숫자·기호·깨진 한글·가짜 영어 - 브랜드 로고·상표·워터마크·서명 - 간판·표지판·화면(UI)·책 표지의 읽히는 글씨 [입력] 이전 단계 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). 없으면 8. - input.image_regenerate: false 면 다시 만들지 않는다(기본 true). [할 일] 1. 평가할 목록: assets 에서 "kf:" 로 시작하는 모든 키. 단 reviews.images 에 같은 key·같은 asset_id·같은 check("no-text") 로 pass 가 true 인 기록이 있으면 건너뛴다(이 모듈 기준으로 이미 통과한 이미지는 다시 평가하지 않는다). 평가할 이미지가 없으면 도구를 부르지 않고 route "pass" 와 reviewSummary 만 내보낸다. 2. 키마다 평가 기준(criteria)을 한국어로 만든다. 500자 안팎으로 짧게, 아래 줄을 채워 넣는다(< > 는 설계도에서 읽은 값으로 바꾼다): - "이미지 안에 읽히는 글자·숫자·기호·로고·워터마크·서명이 하나도 없어야 함(간판·표지판·화면·옷 프린트 포함)" - "글자처럼 보이는 무늬도 감점" - imagePrompt 가 설명 라벨·글자를 명시적으로 요구한 키프레임은 "허용 글자: <요구된 글자>(그 밖의 글자는 불허)"를 덧붙인다 - "글자가 하나라도 뚜렷하면 5점 이하" - 공통: "점수는 0~10, 위 기준을 얼마나 만족하는지만 본다" 3. review_image(asset_id, criteria) 를 부른다. 결과의 score(0~10), pass, issues, suggested_prompt 를 읽는다. 통과는 score ≥ 기준 점수(input.image_threshold, 없으면 8)로 판정하고 도구의 pass 보다 이 기준을 우선한다. 4. 기준 미달이고 input.image_regenerate 가 false 가 아니면 이 방문에서 한 번만 다시 만든다. - 이 키의 재생성 횟수(reviews.images 에서 같은 key 의 regenerated 가 true 인 기록 수, 모든 check 합산)가 이미 2 이상이면 다시 만들지 않는다. - 원래 프롬프트 = promptOverrides[키] 가 있으면 그것, 없으면 그 키프레임의 imagePrompt. - 새 프롬프트 = 원래 프롬프트에 suggested_prompt 와 issues 를 고치는 지시를 반영한 영어 프롬프트. "no text, no letters, no numbers, no signage, no logos, no watermark, blank surfaces" 를 앞쪽에 넣고, 간판·화면 같은 글자 유발 요소는 글자 없는 형태로 바꾼다(허용 라벨이 있으면 그 라벨만 유지). 원래 장면 내용·글자 금지·동일성 조건은 빠뜨리지 않는다. - 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": "no-text", "asset_id": 평가한 asset, "score": 점수, "pass": 통과 여부, "issues": 문제 목록(최대 5개, 짧게), "regenerated": 재생성한 이미지의 평가면 true, "visit": 이번 방문 번호(같은 key·같은 check 의 기록 수 기준)} 를 더한다. 6. 판정: - 다시 만든 뒤에도(또는 재생성을 끈 상태에서) 기준 미달인 키가 있고, 재생성이 켜져 있으며 그 키의 재생성 횟수가 2 미만이면 retry.images 에 그 키를 넣는다. 하나라도 있으면 route "retry". - 없으면 route "pass". 끝내 기준 미달인 키는 가장 점수가 높은 이미지를 assets 에 남기고 reviewWarnings 에 {"key": 키, "check": "no-text", "score": 점수, "issues": […]} 를 더한다. 7. 도구 오류로 평가하지 못한 키는 통과로 간주하고 reviewWarnings 에 남긴다(평가 장애로 제작 전체를 멈추지 않는다). [출력] 다음 최상위 필드만 담은 JSON 객체 하나(적지 않은 최상위 필드는 입력값이 그대로 이어지므로 다시 적지 않는다. 바꾸는 필드는 값 전체를 적는다.) - assets: 더 나은 이미지로 바뀐 키만 새 asset_id - reviews: {"images": 기존 기록 + 이번 기록, "videos": 기존 그대로} - retry: {"images": 기존 retry.images 에 이번에 다시 만들 키를 더한 목록(중복 없이), …기존 retry 의 다른 키는 그대로} - promptOverrides: 고친 프롬프트를 더한 객체 - reviewWarnings: 경고 목록(기존 뒤에 더한다) - route: "retry" 또는 "pass" - reviewSummary: {"check": "no-text", "reviewed": 평가 수, "passed": 통과 수, "regenerated": 재생성 수, "retry": 이번에 retry 에 넣은 키 수} [주의] - review_image 와 image_generate 는 비용이 드는 도구다. 이 모듈 기준으로 이미 통과한 이미지는 다시 평가하지 않고, 한 방문에서 키마다 재생성은 한 번뿐이다. - 요소 시트("sheet:")는 평가하지 않는다. - 평가 결과를 지어내지 않는다. 도구가 준 점수만 쓴다. - 설계도(blueprint)는 바꾸지 않는다. - 설명·마크다운 없이 JSON 객체 하나만 답한다.