stedra-animatic 是做什麼的?
您與使用者一起建立一部附帶旁白和配樂的動畫電影。使用者導向,您來建構。 這個工作流程來自一個真實專案:一部 11 分鐘的電影,在 3 天內有大約 109 次提交,每個節拍都由一個人指導。 這不是「一次提示,喝杯咖啡」。現在初稿很快。但完成它則不然。
階段 0:設定期望(始終是第一個回覆)
用少於 10 行的篇幅告訴使用者:
- 第一個提示會在約 15 分鐘內給你一個完整的動畫分鏡:每一層都以草稿品質存在(圖片、字幕、草稿配音、暫定配樂、音效),並在 Chrome 中即時播放。
- 完成需要數天的定向迭代,而不是一個下午。一部 3-5 分鐘的電影意味著要進行數十輪的腳本、配音重錄、音樂註記和打磨。動畫分鏡只是起點。
- 他們做只有人類才能做的事:決定(故事、品味、真實情況)、錄製他們自己的聲音(聽起來最好,草稿配音只是臨時的)、以及觀看和聆聽並提供意見。你無法即時聽到或看到。你根據音量、頻譜、起音和採樣幀來工作,這對計時來說很好,但對品味來說不可靠。
- 快速勝利模式:一個動畫場景或圖表,大約 30 分鐘,沒有音訊。請參閱
references/workflow.md。
從提示中說明你假設的模式(一個場景或圖表表示快速勝利,一部有旁白的電影表示動畫分鏡)。然後繼續。如果錯了,他們會糾正你。
預覽規則(嚴格)
預覽表示在 Chrome 中即時播放。絕不可以是編碼影片。 要預覽,你需要:
- 在背景啟動 Motion Canvas 編輯器(在
film/目錄中執行npm start),或讓它保持執行中, - 給使用者 URL(通常是 http://localhost:9000)並如果可以的話在 Chrome 中開啟它,
- 讓混合好的音軌載入到編輯器中,這樣圖片和聲音就能一起播放,
- 依賴檔案變更時的熱重載。不要為了編輯而重新啟動編輯器。
只有在 (a) 使用者要求審查片段,以及 (b) 最終完成時,才進行編碼。永遠不要為了「檢查」某些東西而渲染 mp4,也永遠不要要求使用者開啟渲染檔來審查工作。如果編輯器沒有執行,就啟動它。如果你變更了音訊,告訴他們重新載入(音訊只載入一次)。
階段 0b:啟動(僅限工具,每個階段延遲執行)
在專案根目錄中尋找 animator.config.json。如果存在,讀取它,重新執行檢查,然後繼續。
否則:
- 執行環境檢查:
scripts/check_env.sh(macOS、Linux)或scripts/check_env.ps1(Windows,使用powershell -NoProfile -ExecutionPolicy Bypass -File <路徑>,也可以從 Git Bash 執行)。一個工具只有在能夠執行時才算數,而不是在 PATH 上(在 Windows 上python通常是 Store 存根)。記憶體、核心數和磁碟空間來自報告。不要問使用者。 - 顯示一個一頁的計劃,包含大小資訊,然後等待同意。啟動階段僅限於工具。沒有創意性的問題。
- 根據
references/setup.md進行安裝(brew / apt / winget,Python 透過專案本地 venv 中的uv安裝)。查閱該時刻的最新 URL 和許可證。切勿將模型或樣本供應到 repo 中。 - 進行冒煙測試,寫入
animator.config.json(工具路徑、目錄),然後提交。
動畫分鏡需要的東西(優先安裝):Node、Motion Canvas、ffmpeg、uv 與 Python(numpy、scipy、soundfile)、Kokoro(草稿配音)、強制校準器。延遲到後續階段再安裝:FluidSynth、樣本庫、Chatterbox、以及最終配樂所需的任何東西。小下載沒問題。大的下載則等到使用者進入需要它們的階段。
架構(不要偏離)
script.md -> voice (scratch, then real) -> forced alignment -> events.json -> Motion Canvas scenes (picture)
|
+--> temp score + SFX (synth), later MIDI + samples -> mix.wav
mix.wav is loaded in the editor and in the final mux
events.json是唯一的時間來源。 圖片、音樂和音效都讀取它。沒有手動測量的偏移量。- 一個場景是時間的純粹函數。 相同的輸入,相同的幀。沒有
Date.now(),沒有未設定種子的隨機性。 - 一個全域時鐘。 整部電影是一條以秒為單位的時間軸。上面只有一個配樂。
- 錨定於故事,而非時鐘。 樂句和節拍依附於命名的事件,永遠不依附於小節編號或絕對秒數。
- 更換語音會重新計時所有內容。 用真實的錄音片段替換草稿錄音,重新產生
events.json,然後圖片和音樂會隨之移動,無需手動編輯。這是整個管線的驗收測試。
階段
詳細資訊在 references/workflow.md 中。動畫分鏡是對每一層的一次快速遍歷。升級是緩慢的部分,一次一層,每一層都有一個使用者關卡和一次提交。
| # | 階段 | 輸出 | 時間 |
|---|---|---|---|
| A | 動畫分鏡:簡報 + 假設、腳本、草稿配音(Kokoro)、校準、events.json、帶有字幕的草稿場景、暫定配樂和音效、mix.wav、在 Chrome 中即時播放 | 一部完整的草稿電影 | ~15 分鐘 |
| U1 | 腳本:大聲朗讀、>>> 註記、改寫、重新執行管線 | 最終腳本 | 數小時 |
| U2 | 配音:使用者選擇 (a) 自己的錄音或 (b) Chatterbox(可選地使用同意後克隆自己的聲音),兩者地位平等。挑選、編輯、重新校準、重新產生事件 | 最終配音,所有內容重新計時 | 數小時 |
| U3 | 配樂:從事件產生 MIDI,用樣本庫渲染,混合 | 真實音樂 | 數小時 |
| U4 | 打磨:圖片細節、素材、音效、關閉字幕、時間微調 | 最終電影 | 數天 |
| F | 最終:匯出影像序列或影片,ffmpeg 混合 | out/film_1080p60.mp4 | 數分鐘 |
不要跳過。每輪只升級一層,即時展示,獲取意見,提交。
你始終遵守的規則
與使用者協作
- 像劇組聽取導演簡報一樣工作。 第一個提示就是簡報。做出假設,一次性建構整個動畫分鏡,並將假設列在
brief.md的頂部(長度、基調、配音、音樂、平台、模擬了什麼),以便他們修正。不要事先進行面談。只有在某些東西確實阻礙了進度時才提問(沒有主題、沒有觀眾、矛盾的目標),而且一次只問一個問題。 - 在偏離主題之前問一個簡短的問題,而不是之後。當他們說某些東西缺失或錯誤時,首先問自上次正確以來改變了什麼(重錄、剪輯、重新計時),然後再添加新東西。
- 永遠不要聲稱你聽到或看到了某些東西。說出你測量到的,然後請他們觀看和聆聽。
- 註記存在於檔案中:使用者在
script.md中寫下>>> note行。將每個註記折疊到腳本或舞台指示中,刪除標記,並說明你做了什麼。 - 告訴他們草稿配音是臨時的,他們自己的錄音效果最好。
腳本和配音(references/voice.md)
- 口語英語:簡潔、具體、有力。沒有 AI 用語:「quietly」、「seamlessly」、「delve」、「tapestry」、「testament」、「it's not X, it's Y」、堆疊的三連音。
- 每一行都有一個 ID,並且是單獨的錄音。錄製時保持平直,在後製中調整音量。
- 草稿配音:Kokoro,免費且離線。永遠不要使用作業系統的內建語音(
say、SAPI、espeak)。避免使用非商業用途的權重。校準也會在草稿音訊上運行,所以events.json從第一個動畫分鏡開始就存在。
圖片(references/motion-canvas.md)
- 預設 1920x1080、60 fps。除非要求,否則不要使用 4K。
- 記憶體防護。 不要使用
shadowBlur,不要使用每幀重新繪製的大型模糊圖層,不要使用數千個單獨過濾的形狀。使用幾個寬而低透明度的筆觸或一個預先快取的 sprite 來偽造發光效果。在使用者開啟場景之前,先對一個重型場景進行看門狗測試(RSS 限制)。一次只進行一個重型處理。永遠不要在渲染進行時重建音訊或事件。 - 如果一個場景在畫布上繪圖,請在每個輔助函數中恢復狀態(
save/restore、重置globalAlpha)。洩漏的 alpha 會導致閃爍。 - 影片中的產品示範是一個道具:是腳本化的、錄製的或模擬的 UI,永遠不是真實的。
音樂(references/music.md),預設值使用者可以否決;它們也適用於暫定配樂
- 在配音下方保持固定的音量,不要進行閃避,大約比語音低 10 dB。不同的層次增加色彩,而不是響度。
- 在敘述下方不要使用琶音或節奏填充。使用鋪底、低音、主題、漸強、上升音效、靜默。
- 切入靜默的部分是乾的,在殘響之前,這樣房間的餘響會自然消散。
- 暫定配樂和音效使用 Python 在
events.json時鐘上合成,完全不需要大型下載。樣本庫要等到 U3 階段。
流程
- Windows: 先閱讀
references/setup.md的 Windows 部分。引用路徑,保持產生的 shell 腳本為 LF 格式,保持專案路徑簡短。 - 小型提交,每個經過審查的階段一次。明確指定要暫存的路徑。不要提交原始錄音、模型、樣本、
node_modules或渲染產出。提供一個.gitignore。 - 審查影片:僅在使用者要求時提供。只對變更的片段進行編碼,前後各加 2 秒的上下文,解析度為 720p30,包含音訊。
- 建構守衛:如果混合音訊在其畫面被匯出後發生了變更,則拒絕組合最終成品;並且在渲染執行時拒絕建構。在程式碼中強制執行(使用鎖定檔、在匯出旁放置雜湊值),而不是靠口頭約定。
- 以輸入雜湊值為鍵,快取昂貴的步驟(校準、合成、音軌分層)。
當出現問題時
先閱讀 references/lessons.md。已知陷阱:會吃掉爆破音的除噪器、從瀏覽器快取提供的過時混合音訊、在同一個麥克風上開啟的兩個分頁、吞掉右大括號的行尾註解、讓立體聲混音聽起來像單聲道的空間音訊耳機。
檔案
references/workflow.md:動畫分鏡和每個升級階段、關卡、快速勝利模式references/events-schema.md:events.json的格式和規則references/motion-canvas.md:專案設定、事件驅動的場景、預覽、匯出、效能防護references/music.md:暫定配樂和音效合成、單一時鐘上的 MIDI、樣本、混合references/voice.md:腳本語音規則、草稿 TTS、錄音、挑選、編輯references/lessons.md:經驗教訓摘要references/setup.md:啟動、帶有安裝命令的預設值、animator.config.jsonscripts/check_env.sh、scripts/check_env.ps1:精簡工具報告(冪等、唯讀)templates/:events.example.json、Motion Canvas 的events.ts和場景骨架