Communitygithub.com

motion-choreographer

잠긴 스틸 이미지 + 12블록 씬 청사진을 Veo/Kling/Sora와 같은 비디오 어댑터용 모션 프롬프트로 변환합니다. 카메라 움직임, 피사체/환경 동작, 물리 제약, 오디오 동기화를 포함합니다.

motion-choreographer란 무엇인가요?

`motion-choreographer`는 개발자가 승인한 스틸 이미지와 구조화된 씬 청사진을 타겟 비디오 생성 어댑터(Veo, Kling, Sora, Higgsfield 등)가 소비할 수 있는 공급자별 모션 프롬프트로 변환하는 AI 에이전트 스킬입니다. 이 스킬은 카메라 움직임(팬, 돌리, 핸드헬드 등), 주 피사체의 동작, 환경 애니메이션(머리카락, 천, 입자), 물리 제약(중력, 마찰), 그리고 어댑터가 기본 오디오를 지원하는 경우 오디오 동기화까지 포괄하는 정교한 프롬프트를 생성합니다. `adapter-contract.md`를 읽어 어댑터의 기능을 파악하며, 네트워크 API 호출 없이 순수하게 텍스트 프롬프트를 생성합니다. 또한 정체성 토큰 불변성, 고유한 오디오 처리(네이티브/ffmpeg-mux 폴백), 물리 제약 조건, 그리고 부정적 잠금(신원 이탈 방지, 텍스트/로고 무단 생성 금지)을 엄격히 준수합니다. 출력은 JSON(`motion-prompt.json`)과 사람이 읽을 수 있는 마크다운(`motion-prompt.txt`, `adapter-notes.md`)으로 제공되어 운영자 검토를 지원합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/event4u-app/agent-config/tree/HEAD/dist/agent-src/skills/motion-choreographer

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

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: 검사

  1. scenes/<id>/blueprint.json을 읽습니다. — 누락 시 명시적으로 실패합니다.
  2. scenes/<id>/selection.json을 읽습니다. — 누락 시 명시적으로 실패합니다. 잠긴 이미지 경로가 모션 앵커로 필요합니다.
  3. 타겟 어댑터의 기능을 scripts/ai-video/adapters/<id>.sh capability를 통해 읽습니다. 단계 3에서 사용할 audio=*를 캐시합니다.
  4. character.json 잠금이 존재하는 경우 그대로 로드합니다. — 정체성 토큰은 변경할 수 없습니다.
  5. 연속 테이크 또는 커넥터 요청이 있습니까? 먼저 모델의 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 holdlock-off
push-inpush / dolly-in
pull-backpull / dolly-out
lateral tracktruck / pan
handheld drifthandheld / gimbal-glide
orbitcrane / arc via truck+pan

어댑터 특이사항 (매핑된 움직임에 대한 공급자별 인코딩). 이 내용은 날짜가 없으며 공급자 문서에 대해 검증되지 않았습니다. 신뢰하기 전에 모델 기능 항목(verified, recheck_by)을 확인하십시오:

  • Veo — 명명된 움직임을 허용합니다. 8초 이하 클립을 선호합니다.
  • Kling — 모션 강도 0–1 토큰; 속도를 이에 매핑합니다.
  • Sora — 자연어 움직임 + 지속 시간; 토큰이 없습니다.
  • Higgsfield — 사전 설정 기반; 움직임과 일치하는 사전 설정을 선택하고, 모션 프롬프트에 사전 설정 ID를 기록합니다.
  • LENS 처리 — 청사진의 mm + 조리개를 공급자의 가장 가까운 렌즈/FOV 관용구로 변환합니다. 렌즈 문법이 없는 공급자에게 원시 mm를 전달하지 마십시오.
  • DURATION 처리 — 청사진 값은 자유롭습니다. 여기서 공급자 상한으로 클램핑하고 review.md에 클램프를 기록합니다. (조용한 클램프는 드리프트 버그입니다.)

단계 2: 주 피사체 + 2차 동작

두 개의 블록:

  1. PRIMARY MOTION — 피사체가 수행하는 동작, 비트 수 계산, 물리 앵커(질량, 접촉점, 운동량) 포함. 청사진의 ACTION을 재사용하고, 어댑터가 선호하는 동사 밀도에 맞게 다듬습니다.
  2. SECONDARY MOTION — 환경이 수행하는 동작 (머리카락, 천, 잎사귀, 물, 먼지, 입자, 숨결). 각 줄에 하나의 레이어.
  3. 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: 검증

  1. JSON이 구문 분석되는지 확인합니다 (jq .).
  2. requires.audio_native가 선택한 어댑터의 기능과 일치하는지 확인합니다.
  3. 모션 프롬프트의 지속 시간이 청사진 지속 시간과 일치하는지 확인합니다 ±0.
  4. 정체성 토큰(character.json이 있는 경우)이 그대로 있는지 확인합니다.

출력 형식

  1. scenes/<id>/motion-prompt.json — adapter-contract stdin.
  2. scenes/<id>/motion-prompt.txt — 운영자 검토를 위한 레이블이 지정된 산문 블록 (CAMERA MOTION · PRIMARY MOTION · SECONDARY MOTION · AUDIO DIRECTION · PHYSICS).
  3. 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 — 모션 프롬프트가 인식된 브랜드의 자막/마스코트/시그니처 전환을 복사하는 경우.

거절하고 표면화하십시오. 모션 프롬프트는 업스트림 스킬이 잡아야 했던 정책 격차를 숨길 수 없습니다.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

관련 스킬