/make-video — 步驟 2–4:從選題到合併釋出
輸入:使用者從此 worktree 的 ideas 檔案中選擇一個題目(「/make-video N」加上修改)或使用者指定的物件。
輸出 = DoD(AGENTS.md,「聊天管線」):out/<ep>/release/ 中的主檔案 <ep>_en_1080x1920p60.mp4 和 publish_en.md,兩個檔案都傳送給使用者;視覺 QA 通過;所有內容已提交;分支已合併到 main(video_wt.py finish);worktree 已移除。
品質標準 — docs/quality.md:電影級,而非資訊圖表;事實藏在文字中,視覺震撼在畫面中;最終渲染時長 ≤ 6 小時 GPU。僅限英文,目標 29–29.5 秒,最長 30.0 秒(docs/shorts_format.md)。
參考文件:流程見 docs/pipeline.md;核准見 docs/approval.md;發佈套件見 docs/publish.md;工作流程見 docs/workflows.md;函式庫見 docs/spacekit.md;時間線見 docs/timings.md;佇列見 docs/render_queue.md;代理、提交、陷阱見 AGENTS.md。指令需在 Git Bash 中從 worktree 根目錄執行;<ep> 的格式為 epNNN_<slug>。
步驟 0 — worktree、佇列、提交
- 分支
video/epNNN…在/next-video之後繼續使用。若聊天在主分支中且未使用/next-video,則執行python tools/video_wt.py start→ Claude 使用path的EnterWorktree/ Codex 使用workdir。 - Blender、TTS、音樂、合成 — 僅能透過佇列執行:任務提交後,聊天繼續進行文字工作。
- 每個區塊後都需提交
type(<ep>): …並包含模型尾部。每個步驟結束時需保持工作樹乾淨。
第一部分 — 核准前
- 集數。 執行
python tools/video_wt.py claim <slug>(slug 為[a-z0-9_],最長 16 個字元,依目錄名稱而定)。 複製episodes/_template/→episodes/<ep>/,在episode.json中設定id= 資料夾名稱,languages: ["en"](frames_dir/audio_dir路徑不設定)。在 ideas 檔案末尾追加:已選:N, <日期>, 修改:…, 集數:<ep>。 提交feat(<ep>): 從第 N 版建立集數。 - 事實:研究員 + 事實查核員(
docs/workflows.md)→facts.md(每個數字需附參考連結,視覺參考)。提交。 - 視覺簡報
visual_brief.md(「導演」角色):參考圖、第一幀、money shot、調色盤、光線、鏡頭運動、每個分鏡的事件、慣例、預算。「電影/哇」評論者根據簡報進行審查 → 修改。提交。 - 腳本
script_9x16.json(EN):6–8 個段落,錨點at(秒),29–29.5 秒(嚴格 ≤ 30.0),約 55–70 字;第一句為事實鉤子;結尾需引導回開頭(迴圈)。en_cap為數字,|為手動換行(docs/pipeline.md,「標題與字幕」)。頻道人聲為 Kokoroaf_heart×0.98。提交。 - 場景與分鏡。
system.py(實際參數 → 畫面,慣例寫在 docstring 中);缺少的部分由spacekit/模組補足(單獨提交feat(spacekit): …,回歸測試使用tools/imgdiff.py)。shots_9x16.py依簡報建立:6–10 個分鏡,每個 2–5 秒,每個分鏡至少 3 個深度層,包含關鍵幀與對比、光暈/輝光、鏡頭運動、動態模糊,背景不為空(docs/quality.md)。episode.json(編輯、覆蓋en、安全區域內的字幕),music_cues.json(自訂調性/音階/速度)。剪輯需在事件邊緣對齊;最後一幀 = 第一幀。 剪輯總幀數 ≤ 1799(60 fps)。執行python tools/check_episode.py episodes/<ep>/episode.json。提交。 - 時間預覽:執行
python tools/render_queue.py submit preview episodes/<ep>/episode.json --with-tts, 狀態查詢使用status --json。輸出out/<ep>/9x16/sheet_prev.png;不可有 Traceback/OVERRUN,需有 FLASH/EVENT; cue 列表使用python tools/cues.py episodes/<ep>/episode.json --logs out/<ep>/9x16/logs。 - 英雄幀:依分鏡執行
submit preview … --hero --shots vN --frames F,F+1,F+2(F 為該分鏡的最佳瞬間;100 %,不使用--samples—使用分鏡程式碼中的樣本,與最終渲染相同)→out/<ep>/9x16/hero/,sheet_hero.png。 將幀 F 傳送給評論者和擁有者;依hero_vN.log查看秒/幀與 ETA(docs/timings.md)。在shots_9x16.py中調整樣本與重效果(提交,重新產生英雄幀),使最終渲染耗時 4–6 小時,而非 1 小時。 - 評論(
docs/workflows.md):「電影/哇」(分鏡評分 1–10,低於 8 需重做,最多 3 輪),構圖、 節奏/鉤子、事實(僅 4 個阻擋項docs/quality.md);可選:獨特性、音效。修改後重複步驟 6–7。 報告以檔案形式存放在集數資料夾中,每輪提交fix(<ep>): 依評論修改,第 K 輪。 - 粗剪影片完整版本(
docs/approval.md,1a):分鏡中使用draft函數,並透過submit task使用集數層級的preview_movie.py。若無法生成,則不附粗剪影片送出審核,訊息中註明「粗剪影片:無」。 - 核准:依
docs/approval.md範本送出訊息 + 檔案(英雄幀、粗剪影片)。提交當前狀態。 暫停並等待回覆。 修改則返回相應步驟。
第二部分 — 「OK」之後:直至 DoD(無需提問,除非 docs/approval.md 中有停止點)
- 歷史記錄中的核准。 準備好已確認的 cue 列表和依
docs/publish.md的publish_en.md(慣例以列表形式呈現)。提交chore(<ep>): 已核准渲染(使用者的修改寫在提交訊息正文中)。 - 最終渲染。 執行
python tools/render_queue.py submit final episodes/<ep>/episode.json --approved '使用者核准:日期,聊天上下文'。此旗標僅記錄已取得的同意,不取代它。 向使用者提供任務 ID、渲染電腦和 ETA。Worker 會自行選擇電腦,以每批 120 幀渲染,並執行 framecheck、TTS、音樂、混音、build_edit、合成、機器 QA 和釋出。聊天可以關閉。 - 狀態與故障。
status --json(進度顯示cursor/steps;任務結束前的幀存在於snapshot快照中,而非out/<ep>/)。failed表示快照中有步驟記錄;暫時性環境故障使用retry JOB;程式碼/腳本修改使用cancel JOB,在 worktree 中修改,必要時重新核准,再提交新任務。Framecheck FAIL — 分析後使用 RERENDER,刪除快照中的壞幀(以及遠端檔案),retry JOB --rerender-shots vN。pause/resume可在批次之間使用。不要殺死上層 bash 行程。 - 視覺 QA。
needs_review表示機器檢查和套件已準備就緒。PNGout/<ep>/9x16/qa_en/和主檔案: 品質不低於英雄幀(無噪點、模糊、過曝、閃爍),安全區域、字幕、同步、迴圈均正常。 通過則執行python tools/render_queue.py accept JOB;有缺陷則修改後提交新任務。 - 交付。 將
out/<ep>/release/中的兩個檔案傳送給使用者(Claude 使用 SendUserFile)。渲染期間原始檔案可能變更 — 提交前需比對快照中的 publish 和剪輯 JSON。 - 記錄。 更新
episodes/INDEX.md(分鏡、技巧、人聲、調性、鉤子),README.md中的集數表格,docs/channel.md中的 ✅ 主題,docs/timings.md中的秒/幀量測,將經驗教訓寫入相關文件。提交docs(<ep>): 記錄與教訓(包含集數程式碼、edit_9x16_en.json、publish_en.md;不包含out/)。 - 合併。 執行
python tools/video_wt.py finish— 乾淨 → release → accept →git merge main→ check_episode 和測試 → ff main → 將out/<ep>/移至主副本。如有衝突,在 worktree 中解決、提交、重複。 然後退出 worktree(Claude 使用ExitWorktreekeep),在主副本中執行python tools/video_wt.py remove epNNN;不要移除應用程式的 worktree(start --here)。至此才可回報「完成」。