motion-choreographer은(는) 무엇을 하나요?
승인된 스틸 이미지와 12블록 씬 청사진을 타겟 비디오 어댑터가 사용하는 공급자별 모션 프롬프트로 변환합니다. 카메라 움직임, 주 피사체 동작, 2차 환경 동작, 물리 제약, 그리고 어댑터가
audio: native를 선언한 경우 동기화된 오디오 방향 블록을 포함합니다. 어댑터 기능은adapter-contract.md에서 읽어오며, 네트워크 API를 호출하지 않습니다.
사용 시기
- 이미지가 잠긴 경우(운영자가
operator-pick.sh를 통해 후보를 선택함)이며, 다음 단계는 비디오 어댑터를 위한 모션 + 오디오 방향입니다. - 청사진이
scenes/<id>/blueprint.json에 존재하지만 아직 모션 프롬프트가 생성되지 않은 경우. - 공급자 전환(Veo → Kling, Sora → Higgsfield)으로 인해 동일한 씬을 새 어댑터의 기능 프로필에 맞게 재조정해야 하는 경우.
다음 경우에는 사용하지 마십시오:
- 청사진이 아직 산문 형식인 경우 — 먼저
scene-expander→parse-blueprint.sh를 실행하십시오. - 스틸 이미지가 아직 잠기지 않은 경우 — 운영자 선택 체크포인트가 먼저 완료되어야 합니다.
- 출력이 스틸 그래픽인 경우 —
canvas-design을 사용하십시오.
절차
단계 0: 검사
scenes/<id>/blueprint.json을 읽습니다. — 누락 시 명시적으로 실패합니다.scenes/<id>/selection.json을 읽습니다. — 누락 시 명시적으로 실패합니다. 잠긴 이미지 경로가 모션 앵커로 필요합니다.- 타겟 어댑터의 기능을
scripts/ai-video/adapters/<id>.sh capability를 통해 읽습니다. 단계 3에서 사용할audio=*를 캐시합니다. character.json잠금이 존재하는 경우 그대로 로드합니다. — 정체성 토큰은 변경할 수 없습니다.- 연속 테이크 또는 커넥터 요청이 있습니까? 먼저 모델의
start_frame/end_frame을 읽습니다. —scripts/ai-video/adapters/<id>.sh capability --model <m>.null은 알 수 없음을 의미하며,true가 아닙니다. 프레임 잠금이 불가능한 모델은 단 한 줄의 이유와 함께 거절되며, 대체되지 않습니다(adapter-contract.md#end_image).
단계 1: 카메라 움직임
움직임 유형, 거리, 속도(초), 시작 및 종료 프레이밍을 포함하는 CAMERA MOTION 블록을 생성합니다.
- 움직임 유형: lock-off, pan, tilt, dolly-in, dolly-out, truck, pedestal, push, pull, handheld, gimbal-glide, crane, whip.
- 속도: 비트당 초 단위 (
0.4s push, hold 1.6s, 0.4s pull). - 시작 및 종료 프레이밍 이름 지정 (
MS → CU,WS → MS).
청사진 의도 클래스 디코딩 — 청사진 CAMERA 블록은 6개의 공급자 독립 의도 클래스 중 하나를 지정합니다. 인코딩 전에 위의 움직임 유형으로 매핑하십시오:
| 의도 클래스 | 움직임 유형 매핑 |
|---|---|
| static hold | lock-off |
| push-in | push / dolly-in |
| pull-back | pull / dolly-out |
| lateral track | truck / pan |
| handheld drift | handheld / gimbal-glide |
| orbit | crane / arc via truck+pan |
어댑터 특이사항 (매핑된 움직임에 대한 공급자별 인코딩). 이 내용은 날짜가 없으며 공급자 문서에 대해 검증되지 않았습니다. 신뢰하기 전에 모델 기능 항목(verified, recheck_by)을 확인하십시오:
- Veo — 명명된 움직임을 허용합니다. 8초 이하 클립을 선호합니다.
- Kling — 모션 강도 0–1 토큰; 속도를 이에 매핑합니다.
- Sora — 자연어 움직임 + 지속 시간; 토큰이 없습니다.
- Higgsfield — 사전 설정 기반; 움직임과 일치하는 사전 설정을 선택하고, 모션 프롬프트에 사전 설정 ID를 기록합니다.
- LENS 처리 — 청사진의 mm + 조리개를 공급자의 가장 가까운 렌즈/FOV 관용구로 변환합니다. 렌즈 문법이 없는 공급자에게 원시 mm를 전달하지 마십시오.
- DURATION 처리 — 청사진 값은 자유롭습니다. 여기서 공급자 상한으로 클램핑하고
review.md에 클램프를 기록합니다. (조용한 클램프는 드리프트 버그입니다.)
단계 2: 주 피사체 + 2차 동작
두 개의 블록:
- PRIMARY MOTION — 피사체가 수행하는 동작, 비트 수 계산, 물리 앵커(질량, 접촉점, 운동량) 포함. 청사진의
ACTION을 재사용하고, 어댑터가 선호하는 동사 밀도에 맞게 다듬습니다. - SECONDARY MOTION — 환경이 수행하는 동작 (머리카락, 천, 잎사귀, 물, 먼지, 입자, 숨결). 각 줄에 하나의 레이어.
- TIMED SEGMENTS (선택 사항, 클립에 둘 이상의 비트가 있는 경우) —
0–3 s: …,3–7 s: …, 전체 지속 시간을 빈틈없이 포함합니다. 각 세그먼트는 변경되는 사항을 지정하며, 분위기를 지정하지 않습니다.
단계 3: 오디오 방향 (조건부)
어댑터 기능이 audio: native이고 청사진의 audio.enable_native_audio가 true인 경우:
다음을 포함하는 AUDIO DIRECTION 블록을 생성합니다:
DIALOGUE TIMING— 대화 항목당speaker @ 0.4s: "line". 프롬프트 자체는 영어입니다. 모든 음성 대사는 해당 언어와 스크립트로 그대로 유지되며 태그가 붙습니다([de] "…"). 사용자가 작성한 대사를 절대 번역하지 마십시오.AMBIENT LAYERS— 청사진에서 복사합니다. 각 줄에 하나의 레이어.SYNC CUES— 어떤 동작 비트가 어떤 오디오 큐에 매핑되는지 (footstep @ 1.2s,door close @ 2.1s).
어댑터 기능이 audio: none인 경우:
# AUDIO: ffmpeg-mux fallback주석을 생성하고 청사진의 오디오 경로를 스티치 시점의 믹스를 위해 대기시킵니다.- 모션 프롬프트 JSON에서
enable_native_audio: false를 설정합니다. - 청사진에 DIALOGUE가 있는 경우 — 믹스 폴백은 텍스트 대사를 처리할 수 없습니다.
motion-prompt.txt와adapter-notes.md에 렌더링되지 않을 모든 대사 줄을 나열하는 필수AUDIO DOWNGRADE경고 블록을 생성합니다. 해당 사항이 허용되는지 여부는 오케스트레이터 게이트의 결정에 속합니다(adapter-contract § Audio 소유권). 이 스킬은 번역만 수행하며, 유효성 검사를 하지 않고, 절대 조용히 대사를 제거하지 않습니다.
단계 4: 물리 제약
PHYSICS를 생성합니다 — 모델이 준수해야 하는 짧은 목록: 중력 방향, 접촉 마찰, 유체 거동, 머리카락/천 관성, 렌즈 시차. 각 제약당 한 줄.
그런 다음 NEGATIVE LOCKS — 발생하지 않아야 할 사항, 각 줄에 하나씩: 신원 이탈, 청사진이 요청하지 않은 읽을 수 있는 텍스트, 추가 팔다리나 손가락, 샷 목록에 없는 컷, 사용자의 것이 아닌 로고. 청사진이 이유를 제시하는 잠금만 포함합니다.
단계 5: 모션 프롬프트 JSON 생성
scenes/<id>/motion-prompt.json을 adapter-contract의 stdin 형식으로 작성합니다. 오케스트레이터는 이를 비디오 어댑터의 submit 하위 명령어로 파이프합니다.
단계 6: 검증
- JSON이 구문 분석되는지 확인합니다 (
jq .). requires.audio_native가 선택한 어댑터의 기능과 일치하는지 확인합니다.- 모션 프롬프트의 지속 시간이 청사진 지속 시간과 일치하는지 확인합니다 ±0.
- 정체성 토큰(
character.json이 있는 경우)이 그대로 있는지 확인합니다.
출력 형식
scenes/<id>/motion-prompt.json— adapter-contract stdin.scenes/<id>/motion-prompt.txt— 운영자 검토를 위한 레이블이 지정된 산문 블록 (CAMERA MOTION · PRIMARY MOTION · SECONDARY MOTION · AUDIO DIRECTION · PHYSICS).scenes/<id>/adapter-notes.md— 어댑터, 기능, 사전 설정/모델, 근거 포함.
주의사항
- 모델이 청사진의
SUBJECT블록을 "개선"하려고 합니다. — 정체성 토큰은 변경할 수 없습니다. 유혹을 거절하십시오. audio: none을 반환하는 어댑터에서audio: native를 선택하면 무음 비디오가 생성됩니다. — 항상 먼저 기능을 읽고, 어댑터 이름으로 추측하지 마십시오.- Higgsfield 사전 설정 ID는 반드시 기록되어야 합니다. 그렇지 않으면 재실행 시 모델이 다음 호출에서 선택하는 사전 설정으로 드리프트됩니다.
- Sora 지속 시간이 8초를 초과하면 종종 품질이 저하됩니다. — 어댑터 테이블 한도에서 클램핑하고, 운영자에게 클램프를 표시하십시오.
금지 사항
- 이번 턴에 쿼리하지 않은 어댑터에 대한 모션 프롬프트를 생성하지 마십시오.
- 스틸 이미지 잠금 확인을 건너뛰지 마십시오. — 앵커 이미지 없이 모션 방향을 지정하면 호출할 때마다 결과가 달라집니다.
character.json의 정체성 토큰을 의역하지 마십시오.- 네트워크 API를 호출하지 마십시오. — 이 스킬은 순수한 공급자 조정 산문입니다.
정책
경로, 시행 모델 및 전체 집합: 미디어 정책 서문.
모션 프롬프트는 업스트림 청사진이 전달하는 모든 제약 조건을 상속합니다. 공급자 조정 산문을 내보내기 전:
disclosure— 배포된 모든 클립에는 제거할 수 없는 AI 생성 표시가 포함됩니다. 이를 억제하는 어댑터 플래그는 거절하십시오.transparency— 공급자 출처(C2PA / SynthID)는 보존됩니다. 출처를 제거하는 재인코딩 플래그는 거절하십시오.voice-cloning— 모션 프롬프트가 특정 이름의 음성으로audio: native내레이션을 요청하는 경우.brand-impersonation— 모션 프롬프트가 인식된 브랜드의 자막/마스코트/시그니처 전환을 복사하는 경우.
거절하고 표면화하십시오. 모션 프롬프트는 업스트림 스킬이 잡아야 했던 정책 격차를 숨길 수 없습니다.