animation-studio:想法 → 劇本 → 語音 → 安全渲染 → MP4
此檔案為一個路由器。請先提出四個主要問題、檢查硬體,然後僅載入作業所需的檔案:
content/<pack>.md(寫作與準確性規則)+ styles/<style>.md(外觀;其 JSON 區塊為引擎讀取的預設設定)+ engines/<engine>/README.md(如何渲染)。共用工具位於 shared/ 中。
找到技能資料夾(SKILL_DIR) = 包含此檔案的資料夾。Claude Code 會將其顯示為技能的基底目錄;其他代理則顯示為你被要求讀取的 SKILL.md 所在的資料夾。始終使用 "$SKILL_DIR/shared/..." 這樣的格式來呼叫工具(路徑通常包含空格)。找到 Python 3.10+(python3、python 或 py -3)並稱之為 PY。在執行 setup_check.py --install 後,使用它印出的 venv Python 路徑。
使用任務清單讓使用者隨時了解進度。將所有產出物寫入使用者工作資料夾中的 videos/<slug>/(slug 為簡短的小寫連字號名稱)。使用平實的語言解釋。
此版本支援的項目
| 部分 | 狀態 |
|---|---|
| 內容套件 | ✅ 聖經(content/bible.md)· ✅ 科技(content/tech.md)· ✅ 一般故事/廣告(content/general-story.md)· ✅ 數學/教育(content/education-math.md) |
| 風格 | 引擎 A:✅ 火柴人 · ✅ 平面 2D · ✅ 故事書 · ✅ 白板 · ✅ 現代向量 — 引擎 B:✅ Manim(+ 白板 / 現代向量顏色)— 引擎 C:✅ 卡通 3D — 引擎 D:✅ 電影 3D |
| 引擎 | ✅ A py2d(Python 2D)· ✅ B Manim(可選 LaTeX)· ✅ C 卡通 3D(較慢:有層級限制)· ✅ D Blender(快速預覽使用 Eevee,最終成品使用 Cycles,適用於 POWER 層級) |
| 格式 | ✅ 9:16 · ✅ 16:9 · ✅ 1:1 · ✅ 4:5 |
| 字幕 | ✅ 永遠提供 .srt 檔案 + 帶有單字高亮的風格化內嵌字幕(shared/captions.py) |
| 語音 | ✅ 使用者的錄音 · ✅ Piper TTS(shared/voice.py,免費,離線) |
| 音樂/音效 | ✅ 合成音樂(shared/sound.py)· ✅ 使用者自己的授權音樂檔案 |
| 編輯器專案 | ✅ Kdenlive · ✅ Shotcut · ✅ DaVinci Resolve(FCPXML)· ✅ Blender VSE · 🧪 OpenShot(實驗性)· ✅ 編輯器套件(CapCut、任何編輯器) |
| 品牌套件 | ✅ 已儲存的品牌(使用者資料夾)、浮水印、下三分之一處標題、品牌片尾卡、任何風格上的品牌顏色(shared/brand.py,docs/branding.md) |
| 軟體安裝 | ✅ 一個經過驗證的註冊表(shared/tools.yaml),包含 Windows、macOS 和各 Linux 系列的命令;未經同意絕不安裝 |
如果使用者選擇了 🚧 項目,請直接說明,提供最接近的 ✅ 選項,但仍需交付腳本套件。
階段 1:需求蒐集(AskUserQuestion,每次呼叫最多 4 個問題;跳過已回答的項目)
呼叫 1
- 內容: 聖經故事 · 科技/程式設計 · 數學/教育 · 一般故事/廣告
- 風格: 先提供該內容的預設風格(聖經 → 故事書 · 科技 → 現代向量 · 數學 → Manim · 一般 → 平面 2D),然後提供 2–3 種其他風格。對於快速、輕量的作品,可提及火柴人。
- 格式(可複選):9:16 1080x1920(TikTok/Reels/Shorts)· 16:9 1920x1080(YouTube/投影機)· 1:1 1080x1080 · 4:5 1080x1350。執行
PY shared/formats.py table可列印平台對照表。 - 品質: 預覽(快速,720p)· 最終(1080p)。始終建議先製作 5 秒的預覽。
呼叫 2(僅適用項目)
0. 品牌化? 無 · 使用已儲存的品牌(從 PY "$SKILL_DIR/shared/brand.py" list 列表中選取)· 建立新品牌。建立新品牌: 一次只詢問一個欄位,全部可選(名稱、標語、網站、標誌檔案、電話、WhatsApp、電子郵件、社群媒體、顏色、OFL 字型、行動呼籲按鈕),並使用 brand.py set 逐一儲存(它會驗證電話/電子郵件/URL/顏色格式);標誌透過 brand.py logo,字型透過 brand.py font。絕對不要虛構聯絡資訊:僅使用使用者提供的內容(或從他們自己的網站確認的資訊)。然後是選項,預設值來自 docs/branding.md:浮水印(廣告/宣傳類開啟;聖經、科技和數學類關閉)、角落/大小/透明度/標誌或標誌+名稱 · 下三分之一處標題(何時出現、持續多久)· 片尾卡,包含行動呼籲按鈕 + 聯絡資訊(廣告/宣傳類開啟)及其長度 · 將風格重新著色為品牌顏色(是/否)。
5. 主題/故事及長度(30 秒 · 60 秒 · 90 秒 · 2–3 分鐘;其他長度選擇「其他」)。內容套件會添加自己的規則(聖經:目標觀眾)。
6. 語音: 我自己的錄音(預設)· Piper TTS(免費、離線;預設語音 en_US-ljspeech-medium,使用公共領域數據)。Piper 需要一次性安裝(setup_check.py --tts --install)和下載語音模型(voice.py --download,約 60 MB):請先詢問。
7. 內嵌字幕? 建議 9:16 和 1:1 選擇「是」(大多數人靜音觀看),16:9 選擇「否」。.srt 檔案一定會產生。
8. 「使用 animation-studio 製作」片尾卡? 預設關閉;僅限選擇加入。絕對不要添加浮水印。
9. 輸出: 完成的 MP4 · 供編輯器使用的專案檔案 · 兩者都要。
編輯器選擇(僅當輸出包含專案檔案時):執行 PY "$SKILL_DIR/shared/tools.py" status --kind editor 並顯示完整的編號列表(✅ 已安裝 + 版本 · ❌ 未安裝 · ⚠️ 此處不支援,例如在無頭伺服器上的桌面編輯器)。使用者選擇一個(AskUserQuestion:最多 4 個選項,已安裝的編輯器優先;其餘可在「其他」下輸入)。如果選擇的是 ❌,則逐字顯示 PY "$SKILL_DIR/shared/tools.py" flow <editor>(它是什麼、針對此作業系統/發行版/終端機的安裝命令、官方連結),並詢問:立即安裝(我將執行它)· 我自己安裝,然後說「完成」· 選擇其他編輯器 · 跳過,給我 MP4 和編輯器套件。「立即安裝」→ tools.py install <editor> --yes(如果 Windows 會顯示權限提示,或某步驟需要 sudo,請先說明;sudo 步驟以 ! sudo ... 形式交給使用者)。任何安裝或「完成」後:再次執行 status,確認 ✅,然後從中斷處繼續。CapCut 和不支援的編輯器將獲得編輯器套件。詳細資訊:docs/editors.md。
將答案記錄在 videos/<slug>/brief.md。
階段 2:硬體檢查(在任何渲染之前;絕不跳過)
執行 PY "$SKILL_DIR/shared/hwcheck.py" 並在一條簡短訊息中顯示其表格和層級。它還會儲存後續每個步驟都會讀取的系統設定檔(作業系統 + 版本、WSL、Apple Silicon、Linux 發行版和系列、套件管理器、終端機、顯示器)。你顯示或執行的每個安裝命令都來自 PY "$SKILL_DIR/shared/tools.py" cmd <tool>(與此作業系統、發行版和終端機匹配);絕不要憑記憶輸入。無顯示器(無頭模式)→ 僅渲染:不支援編輯器應用程式。
| 層級 | 規則 | 引擎 | 限制 |
|---|---|---|---|
| LITE | < 12 GB RAM 或 < 4 個 CPU 執行緒 | A, B | 僅限 720p;封鎖卡通 3D 和 Blender(提供靜態圖片) |
| STANDARD | 介於之間 | A, B 完整;C 僅限 ≤ 5 秒預覽(更長需確認 + 恢復);D Eevee 僅限 ≤ 5 秒 720p,低取樣 | 1 個渲染任務;工作者數量 = 執行緒數 − 2 |
| POWER | ≥ 32 GB RAM + 專用 GPU ≥ 6 GB VRAM | 全部,在 GPU 上使用 Cycles | 工作者數量 = 執行緒數 − 1 |
| 如果筆記型電腦使用電池供電,在渲染超過一分鐘前發出警告。如果可用 RAM 低於 25%,請要求使用者關閉大型應用程式。 |
階段 3:選擇引擎(風格 → 引擎),然後載入檔案
| 風格 | 引擎 | 載入 |
|---|---|---|
| 火柴人、平面 2D、故事書、白板、現代向量 | A engines/py2d | styles/<style>.md,engines/py2d/README.md |
| Manim(數學、演算法、圖表);白板/現代向量顏色也可用於此 | B engines/manim | styles/manim.md(或選擇的風格),engines/manim/README.md |
| 卡通 3D | C engines/toon3d(一個包含 story.js + world.js 的專案資料夾) | styles/toon-3d.md,engines/toon3d/README.md |
| 電影 3D | D engines/blender(scene.json,Z 軸向上) | styles/cinematic-3d.md,engines/blender/README.md |
| 如果硬體層級封鎖了引擎,請解釋原因並提供:使用引擎 A 風格講述相同故事,或僅提供少量靜態圖片。使用者只能在收到明確警告後才能覆蓋限制(「這可能導致電腦當機或過熱;請先儲存您的工作」)。 |
然後載入 content/<pack>.md 並遵循其研究和寫作階段。
階段 4:腳本套件(內容套件規則),然後停止
每個套件提供:一個可複製的旁白區塊(除非套件另有說明,否則約 3.7 字/秒),包含字數和長度 → script.txt;一個鏡頭列表 → shotlist.md;套件附加內容(聖經:忠實度對照表、研讀筆記、描述);以及最後的參考資料。絕對不要虛構經文、引用、API、旗標、版本或事實:請取得或執行它們,否則標記為 未驗證。
然後移交配音(使用者的錄音:mp3/wav,無音樂)並等待音訊。如果使用者只想要腳本,則在此停止。
階段 5:生產
- 設定:
PY "$SKILL_DIR/shared/setup_check.py" --engine <engine>→ ✅/❌ 表格。缺少的工具(Blender、Manim、Node、LaTeX、Inkscape...)使用與編輯器相同的流程:顯示tools.py flow <tool> --for engine,然後立即安裝 · 我自己安裝,然後說「完成」· 選擇其他風格 · 跳過(僅提供腳本、鏡頭列表和參考資料);之後重新檢查。Python 套件僅安裝在技能自己的.venv中(--install,需先獲得同意)。 - 語音 + 時間安排。 Piper:
PY "$SKILL_DIR/shared/voice.py" script.txt voice.wav --timing work --speed 0.85(精確的詞組時間,無需猜測)。使用者的錄音:PY "$SKILL_DIR/shared/timing.py" voice.mp3 script.txt --out work。兩者都會寫入work/words.json+work/phrases.json。 - 場景: 引擎 A:
videos/<slug>/scene.json;引擎 B:一個以from studio import *開頭的 Manim.py場景;引擎 C:videos/<slug>/story.js+world.js;引擎 D:一個 Blenderscene.json(格式請參閱引擎 README)。每個詞組一個鏡頭;確保臉部、文字和關鍵道具保持在每個所選格式的安全區域內(shared/formats.md)。 - 外觀檢查: 為每個格式渲染 3–6 張靜態圖片(
--frames 0,60,...),製作一個聯絡表(PY "$SKILL_DIR/shared/sheet.py" sheet.jpg <dirs> --safe <fmt>),顯示它,並根據內容套件的規則進行檢查(聖經:尊重 + 暴力)。在渲染前修正。 - 估算:
PY "$SKILL_DIR/shared/estimate.py" --engine <engine> scene.json --fmt <fmts> --quality <q>(Manim:--engine manim scene.py --name SceneName --timing work/phrases.json;卡通 3D:--engine toon3d <project folder>;Blender:--engine blender scene.json)→DECISION: OK可渲染 ·ASK告知使用者「約 X 分鐘,Y GB」並詢問(提供 5 秒預覽)·REFUSE磁碟空間不足(需要估算值的 2 倍):要求使用者釋放空間。 - 渲染一次一個格式(絕不同時執行兩個任務)。長時間渲染在背景執行;引擎以低優先級運行,如果重新執行,則從最後儲存的幀繼續,如果可用 RAM 低於 15%,則自動暫停(退出碼 4)。告知使用者他們可以繼續工作。
- 音訊: 音樂
PY "$SKILL_DIR/shared/sound.py" music music.wav --seconds <video length> --mood warm|calm|tense|tech|playful,音效... sfx sfx.wav --seconds <len> --cues cues.json(pop、whoosh、type、chime、success、swell、rain、soft thunder),然後PY "$SKILL_DIR/shared/mix.py" voice.wav music.wav sfx.wav --music-db -12 --sfx-db -10 --seconds <len>(音樂音量絕不超過語音下方 −6 dB;語音重或莊重的影片為 −9 至 −12 dB)。使用者提供的音樂檔案將取代 music.wav:提醒使用者一次,他們必須擁有使用權。 7b. 品牌(如果選擇):在渲染前重新著色(brand.py recolor <brand> --style <style> --out style_<brand>.md,將其用作場景的風格);渲染後,brand.py apply <brand> frames_<fmt> branded_<fmt> --fmt <fmt> [--watermark tr,9,90,logo] [--lower-third a,b] [--end-card 2.5 --cta "..."] [--captions]並從這裡開始使用branded_<fmt>。如果包含片尾卡,則使用--seconds <new length>混合音訊。 - 字幕 + 完成 + 品質檢查:
PY "$SKILL_DIR/shared/captions.py" work out/<Title> --style <style> --fmt <fmt> --quality <q>(→.srt+_<fmt>.ass),然後PY "$SKILL_DIR/shared/finish.py" frames_<fmt> out/<Title>_<fmt>.mp4 --audio mix.wav --quality <q> [--ass out/<Title>_<fmt>.ass] --srt out/<Title>.srt [--end-card only if opted in]。檢查品質檢查行(黑色/靜止片段,約 −14 LUFS)並查看_qa.jpg聯絡表。 - 編輯器專案(如果選擇):
PY "$SKILL_DIR/shared/editors.py" prepare --frames frames_<fmt> --shots "<f0>-<f1>:<name>,..." --final out/<Title>_<fmt>.mp4 --voice voice.wav --music music.wav --sfx sfx.wav --srt out/<Title>.srt --out videos/<slug>/editor然後... export videos/<slug>/editor/timeline.json --editor <kdenlive|shotcut|openshot|resolve|blender-vse|pack>。顯示其檢查表(時間必須與 MP4 匹配;Kdenlive/Shotcut 還會獲得一個 2 秒的 melt 渲染)。告訴使用者如何打開它(docs/tools/.md)。 - 交付 MP4 檔案、.srt 檔案、編輯器專案(如有),以及每個鏡頭的一行描述。可選的片尾卡僅在使用者選擇加入時提供。
安全規則(始終遵守)
- 未經階段 2 和步驟 5(估算)絕不開始渲染。始終提供「先預覽 5 秒」。
- 遵守硬體層級限制;僅在明確警告並獲得同意後才能覆蓋。
- 一次只執行一個繁重任務。未經詢問,絕不刪除或覆蓋使用者的檔案(重新渲染到現有影格資料夾會繼續;
--force會覆蓋,因此需要詢問)。 - 如果缺少工具或使用者拒絕安裝,仍應交付腳本、鏡頭列表和參考資料。
致謝與授權
程式碼:MIT(請參閱 LICENSE)。捆綁的第三方程式碼列於 THIRD_PARTY_NOTICES.md。此技能不捆綁任何字型、音樂或圖像:它使用系統字型和合成聲音。使用者的影片歸他們所有:無強制浮水印;片尾卡為選擇加入。