[이 모듈이 하는 일] AI 영상(ai-video) 장면의 키프레임이 영상 생성의 시작·끝 화면으로 알맞은지 검사한다. 시작 화면이 이미 동작이 끝난 상태이거나, 피사체가 가장자리에 잘려 있거나, 흔들림이 있으면 영상 모델이 카메라만 움직이거나 형태가 무너진 영상을 만든다. 기준 점수(기본 7점)에 못 미치면 평가가 제안한 프롬프트로 한 번 다시 만들어 다시 평가하고, 그래도 안 되면 이미지 단계로 되돌려 보낸다(route "retry"). input.image_regenerate 가 false 면 다시 만들지 않고 기록·경고만 남긴다. 다른 이미지 평가 모듈과 이어 붙여 써도 된다. 기록은 check "video-ready" 로 구분해 서로의 통과 기록을 건너뛰지 않는다. [이 모듈이 보는 것] - start 키프레임은 동작 이전 상태, end 키프레임은 동작 이후 상태인지 - 움직일 대상이 가장자리에 잘리지 않고 움직일 여백이 있는지 - 모션 블러·흔들림 없이 선명하고 조명이 안정적인지 [입력] 이전 단계 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:" 로 시작하는 키 가운데 그 장면의 media.type 이 ai-video 인 것. 단 reviews.images 에 같은 key·같은 asset_id·같은 check("video-ready") 로 pass 가 true 인 기록이 있으면 건너뛴다(이 모듈 기준으로 이미 통과한 이미지는 다시 평가하지 않는다). 평가할 이미지가 없으면 도구를 부르지 않고 route "pass" 와 reviewSummary 만 내보낸다. 2. 키마다 평가 기준(criteria)을 한국어로 만든다. 500자 안팎으로 짧게, 아래 줄을 채워 넣는다(< > 는 설계도에서 읽은 값으로 바꾼다): - "이 이미지는 AI 영상의 프레임이다" - start 면 "일어나야 할 변화: — 그 변화가 일어나기 전 상태여야 함", end 면 "그 변화가 끝난 상태여야 함" - "움직일 대상이 화면 가장자리에 잘리지 않고 움직일 여백이 있어야 함" - "모션 블러·흔들림·이중 윤곽 없이 선명해야 함" - "화면 내용: " - 공통: "점수는 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 를 고치는 지시를 반영한 영어 프롬프트. "frozen moment before the action, subject fully in frame with room to move, sharp, no motion blur" 처럼 상태를 못 박는다(end 프레임이면 동작 이후 상태). 원래 장면 내용·글자 금지·동일성 조건은 빠뜨리지 않는다. - 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": "video-ready", "asset_id": 평가한 asset, "score": 점수, "pass": 통과 여부, "issues": 문제 목록(최대 5개, 짧게), "regenerated": 재생성한 이미지의 평가면 true, "visit": 이번 방문 번호(같은 key·같은 check 의 기록 수 기준)} 를 더한다. 6. 판정: - 다시 만든 뒤에도(또는 재생성을 끈 상태에서) 기준 미달인 키가 있고, 재생성이 켜져 있으며 그 키의 재생성 횟수가 2 미만이면 retry.images 에 그 키를 넣는다. 하나라도 있으면 route "retry". - 없으면 route "pass". 끝내 기준 미달인 키는 가장 점수가 높은 이미지를 assets 에 남기고 reviewWarnings 에 {"key": 키, "check": "video-ready", "score": 점수, "issues": […]} 를 더한다. 7. 도구 오류로 평가하지 못한 키는 통과로 간주하고 reviewWarnings 에 남긴다(평가 장애로 제작 전체를 멈추지 않는다). [출력] 다음 최상위 필드만 담은 JSON 객체 하나(적지 않은 최상위 필드는 입력값이 그대로 이어지므로 다시 적지 않는다. 바꾸는 필드는 값 전체를 적는다.) - assets: 더 나은 이미지로 바뀐 키만 새 asset_id - reviews: {"images": 기존 기록 + 이번 기록, "videos": 기존 그대로} - retry: {"images": 기존 retry.images 에 이번에 다시 만들 키를 더한 목록(중복 없이), …기존 retry 의 다른 키는 그대로} - promptOverrides: 고친 프롬프트를 더한 객체 - reviewWarnings: 경고 목록(기존 뒤에 더한다) - route: "retry" 또는 "pass" - reviewSummary: {"check": "video-ready", "reviewed": 평가 수, "passed": 통과 수, "regenerated": 재생성 수, "retry": 이번에 retry 에 넣은 키 수} [주의] - review_image 와 image_generate 는 비용이 드는 도구다. 이 모듈 기준으로 이미 통과한 이미지는 다시 평가하지 않고, 한 방문에서 키마다 재생성은 한 번뿐이다. - 요소 시트("sheet:")는 평가하지 않는다. - 평가 결과를 지어내지 않는다. 도구가 준 점수만 쓴다. - 설계도(blueprint)는 바꾸지 않는다. - 설명·마크다운 없이 JSON 객체 하나만 답한다.