雙角喜劇短片(Nerd + Claude)
一部 3D 短劇,描述 Nerd 慌張而 Claude(橘色機器人)面無表情地回答。一切都是
程序化的 Blender:場景、兩個骨架、表演、燈光、攝影機、螢幕、疊加、配樂和音效,全部建構自
每集一個檔案 storyboard.json。新的一集只是數據,不是程式碼。不使用任何圖片或影片生成。
一集是一個資料夾:<任何名稱>/<YYYY-MM-DD>_<slug>/,內含 storyboard.json 和 research.md。流程
會將所有其他內容寫入該資料夾(assets/、project/、renders/、final.mp4、cover.png、qa/)。\n儲存庫的 examples/ 中有兩集完成的範例:複製一份作為起點。
工作流程(依序進行,不可跳過)
- 主題(5 分鐘)。一個開發者 / AI 相關的真實痛苦點和一個開發者今天就能使用的祕訣。笑點應圍繞
觀眾如何與他們的 AI 互動,而非工具本身。規則與點子庫:
references/retention.md。 - 研究 →
research.md:螢幕上出現 / 語音中提及 / 字幕中的每一項事實,都需附上 URL + 查證日期, 且必須來自第一手來源(官方文件、README、原始碼)。劇本中虛構的故事片段(時間、數量、人名)需另闢 「虛構」章節。若無法查證則捨棄並註明原因。 - 腳本 + 分鏡 →
storyboard.json(複製一份範例並改寫)。結構與詞彙請參考:references/storyboard.md。 目標長度 30-40 秒,10-14 句台詞,第一詞 ≤ 0.5 秒,每 1.5-3 秒一個剪輯,Nerd 開場,Claude 結尾, 最後一幀切回第一幀。 - 草稿配音(macOS):
pipeline.sh <集數> --say stills(系統語音,無需額外授權)。觀看renders/stills/sheet.jpg(每個拍點結束時的靜止畫面)。修正構圖 / 疊加碰撞,重新執行。 若無 macOS?跳過--say:先錄製或生成音軌(步驟 5),再執行stills。 - 配音。每句台詞一個音檔,存放於
assets/audio/dialogue_raw/<拍點ID>.mp3(例如L01.mp3、...)。 參考集數使用 ElevenLabseleven_v4搭配兩個圖書館語音 — Nerd = "Quinn - Soft Nerd Boy", Claude = "Sarcastic Nigel" — 並在每個拍點的tts中加入語音標籤(例如[deadpan] It was ugly.)。 若在 Claude 中使用 ElevenLabs 連接器:先估算一句台詞(約每個字元 1 個點數,含標籤), 再逐句生成,並從其content_url下載每段音軌。一集 11-14 句台詞約需 700-900 點數。 您也可以自行錄製:檔案名稱相同即可。 - 實際建置 + 靜止畫面:
pipeline.sh <集數> stills。project/whisper_check.txt會列出每句腳本與 聽寫結果的比對(比率 < 0.8 表示需聽一遍確認)。配音長度會比草稿長:再次檢查靜止畫面表。 - 最終版本:
pipeline.sh <集數> final(16 個樣本、3 個工作程序,M 系列 Mac 上約每幀 3 秒: 一部 38 秒短片約需 1 小時;可在背景執行)。它會渲染final.mp4、B 鉤子變體final_b.mp4、cover.png,並執行qa.py→qa/report.md(必須顯示「Blocking: none」)。
嚴格規則
- 角色:不可重新設計 Nerd 或 Claude(
engine/scene/nerd.py、mascot.py)。Claude 沒有嘴巴: 它透過身體擠壓、彈跳、眼睛和手臂來「說話」。 - 短劇可虛構故事(這是喜劇),但絕對不能虛構產品功能、數字、基準或引述。
- 笑點道具(印章、鑰匙、勾勾)應比該詞所說明的畫面早 0.2-0.3 秒出現,絕不可落在最後一個詞上。
- 先做草稿配音,再做付費語音;先做靜止畫面,再做最終渲染。
檔案
pipeline.sh <集數> [--say] [build|stills|draft|final]engine/scene/Blender 端:build_scene.py(進入點)、animate.py(根據分鏡表控制表演 / 燈光 / 攝影機)、env.py場景、nerd.py、mascot.py、lights.py、tl.py(錨點,與腳本共用)。engine/scripts/:build_timeline.py(音軌 → 時間軸 + Whisper 文字 + 嘴型同步)、make_screens.py(螢幕模板)、make_overlay.py(掛鉤、字幕、項目、標題卡、captions.srt)、make_audio.py+synth.py(配樂 / 音效)、master_audio.py(-14 LUFS)、stills.py、draft.sh、render_final.sh、encode.sh、make_cover.py、cover_title.py、qa.py、make_textures.py。- 工具與路徑(環境變數,macOS 預設值):
BLENDER(Blender 5.x 二進位檔)、DUO_PYTHON(一個包含 numpy、scipy、soundfile、pillow 的 Python;預設~/.venvs/duo-reel/bin/python)、WHISPER_MODEL(whisper.cpp 模型,預設~/whisper-models/ggml-medium.en.bin)、whisper-cli及ffmpeg需在 PATH 中、字型DUO_FONT_DISPLAY/DUO_FONT_MONO/DUO_FONT_SANS/DUO_FONT_EMOJI。 references/storyboard.md(結構、所有預設)、references/retention.md(掛鉤 / 結構 / 主題)、references/lessons.md(曾經出錯的案例)。