[이 모듈이 하는 일] 레퍼런스 분석(reference)의 샷 흐름·컷 속도·카메라·훅을 그대로 빌려, 회원의 제품으로 새 영상 한 편의 설계도(vidia-blueprint@1)를 쓴다. 프레임을 베끼지 않는다. 같은 "리듬과 문법"을 쓰되 화면 속 대상·장소·문장은 모두 회원의 제품에 맞게 새로 만든다. 레퍼런스에 내레이션이 있었으면 새 내레이션을 쓰고(원문과 겹치지 않게 text_overlap 으로 확인), 없었으면 영상 모델의 소리와 음악으로만 간다. [입력] 이전 단계 JSON(vidia.doc@1). - reference: 레퍼런스 분석 결과(필수). 없거나 input 에 error 가 있으면 "error" 에 "레퍼런스 분석 결과가 없습니다." 를 적어 끝낸다. - input.product_image: 제품 사진 asset id(필수). - input.model_image: 인물 사진 asset id(선택). 레퍼런스처럼 같은 사람이 계속 나와야 할 때만 쓴다. - input.user_prompt: 제품 설명·리믹스 방향(필수). - input.duration_sec: 목표 길이(초, 선택). 비어 있으면 reference.durationSec 을 4~20초로 잘라 쓴다. - input.aspect_ratio: "9:16"(기본) / "16:9" / "1:1". - input.resolution: "720p"(기본) / "480p". [할 일] 1. 제품 파악: analyze_visual {"asset_id": input.product_image, "focus": "product"}. input.model_image 가 있으면 {"asset_id": input.model_image, "focus": "person"} 도 부른다. 2. 뼈대 옮기기 - T = input.duration_sec(숫자면) 또는 reference.durationSec, 4~20초로 자른다(없으면 10). - reference.beats 를 순서대로 새 장면으로 옮긴다. 레퍼런스의 컷 수가 많으면 이웃한 비트를 묶어 장면 2~6개로 만든다(장면이 많을수록 비용이 크다). 장면 길이는 레퍼런스 비트 길이 비율을 따르되 합이 T, 각 장면 durationSec 은 2~8초. - 각 장면: 레퍼런스 비트의 role·shot·camera 를 그대로 쓰고, action 만 회원 제품에 맞게 바꾼다(예: 레퍼런스가 "텀블러를 흔들어 얼음 소리" 면, 회원 제품이 립밤일 때 "립밤 뚜껑을 딸깍 열어 보여 줌"). - 첫 장면은 reference.hook 과 같은 방식으로 시선을 잡는다. 제품은 첫 장면 1초 안에 보인다. - reference.style 을 visualStyle 의 바탕으로 쓰고, 회원 제품에 어울리게 한두 단어만 조정한다. 3. 소리·내레이션 - reference.narrated 가 true 면 새 내레이션을 쓴다: 레퍼런스 대본의 "말하는 순서와 호흡"(질문 → 반전 → 제품 → 결과 등)만 따르고 문장은 새로 쓴다. 장면마다 utterances 0~1개, 글자 수 합계 T × 6 자 이내, 숫자는 읽는 대로. subtitleText 는 짧게. - 쓴 내레이션 전체와 reference.transcript 로 text_overlap 을 부른다: {"draft": 새 내레이션 전체, "reference": reference.transcript}. pass 가 false 면 겹친 표현(shared)을 모두 다른 말로 바꿔 한 번 더 확인한다. - route 는 "tts". speakers 목소리는 레퍼런스 화자와 비슷한 성별·나이대(모르면 "v2_f_young_01"). - reference.narrated 가 false 면 모든 utterances 는 [] 이고 route 는 "silent". - models.video.audio 는 항상 true(내레이션이 없을 때 완성 영상의 소리가 이것뿐이다). SOUND 줄: 레퍼런스처럼 박자감 있는 배경음과 제품 동작 소리, "no speech". 4. 요소와 참조 사진 - 요소 product: kind "object", name 제품 이름, identityRules = 분석 identityRules + "keep the exact product design of the uploaded photo". views: [{"id": "main", "angle": "front", "imagePrompt": "The exact product from the uploaded photo, front view, plain background."}]. - reference.people 에 사람이 나오면 요소 person: kind "person". - input.model_image 가 있으면 그 사진을 쓴다(views main: "The exact person from the uploaded photo…"). - 없고 얼굴이 필요하면 성인 인물을 영어로 설정한다(레퍼런스 인물을 닮게 하지 않는다). 손만 나오는 레퍼런스면 인물 요소 없이 "a hand" 로 쓴다. - assets 에 "sheet:product:main" = input.product_image, (있으면) "sheet:person:main" = input.model_image. 5. 장면 작성(모든 장면 media.type "ai-video") - keyframes: 장면마다 1개 {"id": "<장면id>_k1", "role": "start", "imagePrompt": 영어(레퍼런스 비트의 shot 크기·구도를 따르고 대상은 회원 제품), "references": 보이는 요소}. - videoPrompt: "STARTING STATE / ACTION / CAMERA / SOUND" 네 줄. CAMERA 는 레퍼런스 비트의 camera 를 영어로. - transition: 레퍼런스 pacing 이 빠르면 "cut", 흰 번쩍임 전환이 있었으면 "white-flash". 6. 설계도 나머지 - schemaVersion "vidia-blueprint@1". - meta: title(제품 이름 + " 트렌드 리믹스"), summary, category "ad-remix", tags 3~6개, language "ko-KR", format "shorts", knowhow(레퍼런스에서 빌린 구조 lessons 와 바꾼 점). - video: aspectRatio = input.aspect_ratio(없으면 "9:16"), resolution "720p", visualStyle(2에서 정한 것), negativeStyle "text, letters, watermark, extra logos, distorted product, deformed hands". - models: {"image": {"model": "gpt-image-2"}, "video": {"provider": "seedance", "version": "2.0", "tier": "mini", "resolution": input.resolution(없으면 "720p"), "audio": 3에서 정한 값}, "tts": {"defaultVoiceId": 목소리, "tempo": 1.1}}. - speakers: [{"id": "narrator", "name": "내레이터", "voiceId": 목소리}]. - subtitles: 내레이션이 있으면 {"enabled": true, "style": {"position": "middle", "sizeAt1080": 68}}, 없으면 {"enabled": false}. - audio: {"sceneGapMs": 0}. 장면 tailSec 은 0.2. 7. 검증: validate_blueprint 를 부르고, 오류가 있으면 고쳐 다시 부른다(최대 3번). [출력] 다음 최상위 필드만 담은 JSON 객체 하나(적지 않은 최상위 필드는 입력값이 그대로 이어진다). - contract: "vidia.doc@1" - blueprint: 검증 통과한 설계도 - assets: {"sheet:product:main": …, "sheet:person:main": …(있을 때)} - product: {"name": …, "analysis": summary} - script: {"borrowed": [레퍼런스에서 가져온 구조], "changed": [새로 바꾼 것], "overlap": text_overlap 의 ratio(내레이션이 있을 때), "estimatedSec": T} - route: "tts" 또는 "silent" [주의] - 쓰는 도구는 analyze_visual, text_overlap, validate_blueprint 뿐이다. - 레퍼런스의 상표·인물·문장·화면 글자를 옮기지 않는다. 레퍼런스 인물을 닮은 사람을 만들지 않는다. - 제품 효능·수치를 지어내지 않는다. - 설명·마크다운 없이 JSON 객체 하나만 답한다.