motion-choreographer 是做什麼的?
將已批准的靜止圖像 + 12 區塊場景藍圖轉換為 針對特定影片生成器調校的動態提示,供目標影片適配器使用。 涵蓋鏡頭編排、主要主體動作、次要環境動作、物理約束, 以及當適配器宣告
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讀取目標適配器的能力。快取audio=*以供步驟 3 使用。 - 若
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 區塊,包含移動類型、距離、以秒為單位的速度,以及開始與結束的取景。
- 移動類型:鎖定靜止、平移、傾斜、推軌前進、推軌後退、橫移、升降、推鏡、拉鏡、手持、雲台滑動、吊臂、甩鏡。
- 以每拍秒數表示速度(
0.4s 推入,暫停 1.6s,0.4s 拉回)。 - 命名開始與結束的取景(
MS → CU,WS → MS)。
藍圖意圖類別解碼——藍圖 CAMERA 區塊命名六種生成器無關的意圖類別之一;在編碼之前先對應到上述移動類型:
| 意圖類別 | 移動類型對應 |
|---|---|
| 靜態保持 | 鎖定靜止 |
| 推入 | 推鏡 / 推軌前進 |
| 拉回 | 拉鏡 / 推軌後退 |
| 橫向跟隨 | 橫移 / 平移 |
| 手持晃動 | 手持 / 雲台滑動 |
| 環繞 | 吊臂 / 弧形(透過橫移+平移) |
適配器特殊處理(針對對應移動類型的各生成器編碼)。這些未標註日期且未經生成器文件驗證——請先檢查模型能力條目(verified, recheck_by)再信任:
- Veo——接受命名移動;偏好 ≤ 8 秒片段。
- Kling——動態強度 0–1 標記;將我們的速度對應到該值。
- Sora——自然語言描述移動 + 持續時間;無標記。
- Higgsfield——預設驅動;選擇與移動匹配的預設;在動態提示中記錄預設 ID。
- 鏡頭處理——藍圖中的毫米數 + 光圈值轉換為該生成器最接近的鏡頭 / 視角慣用語;切勿將原始毫米數傳遞給不具備鏡頭語法的生成器。
- 持續時間處理——藍圖值可自由設定;在此處限制在生成器上限內,並在
review.md中記錄限制(未記錄的限制是漂移錯誤)。
步驟 2:主要 + 次要動作
兩個區塊:
- PRIMARY MOTION——主體的行為,以拍數計量,附帶物理錨點(質量、接觸點、動量)。重複使用藍圖中的
ACTION;根據生成器偏好的動詞密度進行精煉。 - SECONDARY MOTION——環境中的動態(頭髮、布料、樹葉、水、灰塵、粒子、呼吸)。每行一個圖層。
- TIMED SEGMENTS(可選,當片段包含多個節拍時)——
0–3 秒:…,3–7 秒:…,覆蓋整個持續時間且無空隙;每個片段說明變化的內容,絕非情緒。
步驟 3:音訊方向(條件性)
若適配器能力為 audio: native 且藍圖中的 audio.enable_native_audio 為 true:
輸出一個 AUDIO DIRECTION 區塊,包含:
DIALOGUE TIMING——每條對話條目的說話者 @ 0.4s: "台詞"。提示本身為英文;每句口說台詞保留其原始語言與文字,並加上標籤([de] "…")。絕不翻譯使用者寫的台詞。AMBIENT LAYERS——從藍圖複製;每行一個圖層。SYNC CUES——哪個動作拍對應哪個音訊提示(腳步聲 @ 1.2s,關門聲 @ 2.1s)。
若適配器能力為 audio: none:
- 輸出一個
# AUDIO: ffmpeg-mux 備援註解,包含藍圖中排隊等候拼貼時混音的音訊路徑。 - 在動態提示 JSON 中設定
enable_native_audio: false。 - 藍圖包含對話 → 混音備援無法朗讀文字台詞。在
motion-prompt.txt及adapter-notes.md中輸出強制的AUDIO DOWNGRADE警告區塊,列出所有無法呈現的對話台詞。此決策是否可接受由協調器閘門決定(adapter-contract § 音訊所有權)——本技能僅負責轉譯,不進行驗證,且絕不靜默地移除對話。
步驟 4:物理約束
輸出 PHYSICS——模型必須遵守的簡短清單:重力方向、接觸摩擦力、流體行為、頭髮 / 布料慣性、鏡頭視差。每行一個約束。
然後是 NEGATIVE LOCKS——必須避免的事項,每行一個:身份飄移、藍圖未要求的可讀文字、多餘的肢體或手指、鏡頭清單中不存在的切換、非使用者的標誌。僅鎖定藍圖提供理由的項目。
步驟 5:輸出動態提示 JSON
將 scenes/<id>/motion-prompt.json 寫入符合 adapter-contract 標準輸入格式的內容。協調器會將此內容輸送到影片適配器的 submit 子命令。
步驟 6:驗證
- JSON 可解析(
jq .)。 requires.audio_native與所選適配器的能力一致。- 動態提示中的持續時間與藍圖持續時間完全一致(±0)。
- 身份標記(若
character.json存在)為逐字內容。
輸出格式
scenes/<id>/motion-prompt.json——adapter-contract 標準輸入。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旁白時。品牌冒用——當動態提示複製知名品牌的標題 / 吉祥物 / 招牌轉場時。
拒絕並呈現;動態提示不能洗白上游技能應已捕捉到的政策漏洞。