motion-choreographer は何をしますか?
承認済み静止画と12ブロックのシーンブループリントを、ターゲットの動画アダプターが消費する プロバイダ調整済みのモーションプロンプトに変換します。カメラの振り付け、主要被写体の動き、 二次的な環境の動き、物理制約、そしてアダプターが
audio: nativeを宣言している場合には 同期オーディオ方向ブロックも含みます。アダプターの能力はadapter-contract.mdから読み取り、 ネットワークAPIとは一切通信しません。
使用するタイミング
- 画像がロックされ(オペレーターが
operator-pick.shで1つの候補を選択)、次のステップが動画アダプターの動き+オーディオ方向である場合。 - ブループリントが
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を使用してターゲットアダプターの能力を読み取ります。audio=*はステップ3のためにキャッシュします。character.jsonロックが存在する場合は、そのまま読み込みます — アイデンティティトークンは不変です。- 連続テイクまたはコネクタが要求されていますか?
scripts/ai-video/adapters/<id>.sh capability --model <m>でモデルのstart_frame/end_frameを最初に読み取ります。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 — 世界が何をするか(髪、布、葉、水、埃、粒子、息)。1行に1レイヤー。
- 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— ブループリントからコピー。1行に1レイヤー。SYNC CUES— どのアクションビートがどのオーディオキューに対応するか(footstep @ 1.2s、door close @ 2.1s)。
アダプターの能力が audio: none の場合:
# AUDIO: ffmpeg-mux fallbackコメントを出力し、ブループリントのオーディオパスをステッチ時のマルチプレクサ用にキューに入れることを示します。- モーションプロンプトJSONで
enable_native_audio: falseを設定します。 - ブループリントが DIALOGUE を含む場合 → muxフォールバックはテキスト行を発話できません。
motion-prompt.txtとadapter-notes.mdの両方に、表示されないすべてのダイアログ行を列挙した必須のAUDIO DOWNGRADE警告ブロックを出力します。それが許容可能かどうかの判断はオーケストレーターゲート(adapter-contract § Audio ownership)に委ねられます — このスキルは翻訳し、決して検証せず、そして決してダイアログを黙って削除しません。
ステップ 4: 物理制約
PHYSICS を出力 — モデルが尊重しなければならないことを短く列挙: 重力方向、接触摩擦、流体挙動、髪/布の慣性、レンズ視差。制約ごとに1行。
次に NEGATIVE LOCKS — 発生してはならないことを1行ずつ: アイデンティティドリフト、ブループリントが要求していない読み取り可能なテキスト、余分な手足や指、ショットリストにないカット、ユーザーのロゴではないロゴ。ブループリントが理由を与えるロックのみ。
ステップ 5: モーションプロンプトJSONを出力
scenes/<id>/motion-prompt.json をアダプターコントラクトのstdin形式で書き込みます。オーケストレーターはこれを動画アダプターの submit サブコマンドにパイプします。
ステップ 6: 検証
- JSON がパースできること(
jq .)。 requires.audio_nativeが選択されたアダプターの能力と矛盾しないこと。- モーションプロンプトの期間がブループリントの期間と一致すること(±0)。
- アイデンティティトークン(
character.jsonが存在する場合)がそのままであること。
出力形式
scenes/<id>/motion-prompt.json— アダプターコントラクトの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を呼び出さないでください — このスキルはプロバイダ調整の散文のみです。
ポリシー
パス、強制モデル、および完全なセットは、メディアポリシープリアンブル を参照してください。
モーションプロンプトは、アップストリームのブループリントが持つすべての制約を継承します。プロバイダ調整済みの散文を出力する前に:
開示— 配布されるすべてのクリップは、削除不可能なAI生成開示を含みます。それを抑制するアダプターフラグを拒否します。透過性— プロバイダの出典(C2PA / SynthID)は保持されます。出典を剥奪する効果のある再エンコードフラグを拒否します。音声クローニング— モーションプロンプトが名前付き音声でのaudio: nativeナレーションを要求する場合。ブランドのなりすまし— モーションプロンプトが認識されたブランドのクローキング / マスコット / 署名トランジションをコピーする場合。
拒否して表面化します。モーションプロンプトは、アップストリームのスキルがキャッチすべきだったポリシーギャップを隠蔽できません。