Communitygithub.com

event4u-app/motion-choreographer

承認済み静止画と12ブロックのシーンブループリントを、Veo/Kling/Sora向けのカメラ、動き、物理、オーディオ同期を含むプロバイダ調整済みモーションプロンプトに変換します。コードフィルムはコードフィルムへ。

motion-choreographer とは?

このスキル「motion-choreographer」は、承認された静止画と12ブロックのシーンブループリントを基に、ターゲットの動画アダプター(Veo、Kling、Sora、Higgsfieldなど)が消費できるプロバイダ調整済みのモーションプロンプトを生成します。具体的には、カメラの動き(パン、ティルト、ドリーなど)、主要被写体の動作、背景環境の動き、物理制約、そしてアダプターがネイティブオーディオをサポートする場合の同期オーディオ指示を体系的に組み立てます。このスキルは、アダプターの能力を `adapter-contract.md` から読み取り、ネットワークAPIを一切呼び出さずに動作します。主なユースケースは、静止画がロックされた後の次のステップ、またはプロバイダーを切り替える際に同じシーンを新しいアダプター用に再チューニングする場合です。出力は、アダプターが解釈可能なJSON形式のモーションプロンプトと、人間によるレビュー用のプレーンテキスト形式のラベル付きブロックです。

対応✓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ブロックのシーンブループリントを、ターゲットの動画アダプターが消費する プロバイダ調整済みのモーションプロンプトに変換します。カメラの振り付け、主要被写体の動き、 二次的な環境の動き、物理制約、そしてアダプターが 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: 調査

  1. scenes/<id>/blueprint.json を読み取ります — 存在しない場合はエラーで失敗します。
  2. scenes/<id>/selection.json を読み取ります — 存在しない場合はエラーで失敗します。ロックされた画像パスはモーションアンカーとして必要です。
  3. scripts/ai-video/adapters/<id>.sh capability を使用してターゲットアダプターの能力を読み取ります。audio=* はステップ3のためにキャッシュします。
  4. character.json ロックが存在する場合は、そのまま読み込みます — アイデンティティトークンは不変です。
  5. 連続テイクまたはコネクタが要求されていますか? 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 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 — 世界が何をするか(髪、布、葉、水、埃、粒子、息)。1行に1レイヤー。
  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 — ブループリントからコピー。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: 検証

  1. JSON がパースできること(jq .)。
  2. requires.audio_native が選択されたアダプターの能力と矛盾しないこと。
  3. モーションプロンプトの期間がブループリントの期間と一致すること(±0)。
  4. アイデンティティトークン(character.json が存在する場合)がそのままであること。

出力形式

  1. scenes/<id>/motion-prompt.json — アダプターコントラクトの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を呼び出さないでください — このスキルはプロバイダ調整の散文のみです。

ポリシー

パス、強制モデル、および完全なセットは、メディアポリシープリアンブル を参照してください。

モーションプロンプトは、アップストリームのブループリントが持つすべての制約を継承します。プロバイダ調整済みの散文を出力する前に:

  • 開示 — 配布されるすべてのクリップは、削除不可能なAI生成開示を含みます。それを抑制するアダプターフラグを拒否します。
  • 透過性 — プロバイダの出典(C2PA / SynthID)は保持されます。出典を剥奪する効果のある再エンコードフラグを拒否します。
  • 音声クローニング — モーションプロンプトが名前付き音声での audio: native ナレーションを要求する場合。
  • ブランドのなりすまし — モーションプロンプトが認識されたブランドのクローキング / マスコット / 署名トランジションをコピーする場合。

拒否して表面化します。モーションプロンプトは、アップストリームのスキルがキャッチすべきだったポリシーギャップを隠蔽できません。

Individual skills in this repo

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

関連スキル