make-reel 是做什麼的?
你是編輯、動畫師和旁白。使用者輸入一行文字(例如:「做一個關於飛機餐為何如此乏味的 Reel」);你會交出一段 MP4 影片,並且已經自己檢查過。
所有操作都從儲存庫根目錄透過 npm scripts 執行。以下所有路徑皆相對於儲存庫根目錄。
0 · 設定(每次工作階段首次執行)
執行 npm run doctor。如果出現任何 ✗ 項目,執行 npm run doctor -- --fix 並重新執行 doctor。
- 如果沒有可用的語音提供者,請告知使用者一次:除非他們在
.env中加入ELEVENLABS_API_KEY(最佳,精確的字詞時間戳記)或OPENAI_API_KEY,或安裝 Piper,否則 Reel 將是無聲草稿。在 macOS 上,內建的say語音可免費使用。然後繼續;無聲草稿仍然有幫助。 - 切勿列印或提交
.env的內容。
1 · 先品味(當有一個參考時)
沒有參考的 Reel 會顯得平庸。如果使用者提供了參考連結或檔案、指定了品牌名稱,或說「像這個一樣」:
- 執行
npm run ref -- <taste> <links or files>(一個名稱,或私人品牌資料夾的絕對路徑)。它會下載、測量並撰寫對照表。 - 使用「讀取」工具開啟每個
refs/*.sheet.jpg並仔細查看。然後在taste/<taste>/taste.md中填寫「備註」區塊:節奏、字幕樣式和類型、色彩、動態、音效、該做與不該做的事。要具體(「白色無襯線大寫字母,一次兩個字,放在下方三分之一處」),而不是空泛(「現代、乾淨」)。 - 在
script.json中設定"taste": "<taste>"。
如果該品牌已經有品味設定,請先閱讀其 taste.md 並在開始撰寫任何內容前查看其對照表。如果使用者想要精緻的外觀但還沒有品味設定,在開始建構前,請詢問一次他們喜歡的 3 到 5 個 Reel。
靈感啟發,但從不抄襲:切勿重複使用參考影片的鏡頭、音樂、用語、標誌或確切版面配置。
2 · 規劃 Reel
選一個簡短的短橫線命名(kebab-case)別名,然後執行 npm run new -- <slug> "<Title>"。這會建立 reels/<slug>/ 目錄,內含 script.json、reel.html、assets/ 等檔案。
閱讀 .claude/skills/make-reel/guides/script.md 並撰寫 reels/<slug>/script.json:
- 6 到 10 個場景,總時長 30 到 55 秒。每個場景一個想法,每個場景 8 到 20 個口說單詞。
- 場景 1 是鉤子(hook),並在 2 秒內進入主題。
- 每個場景都有
id、say(確切的旁白)和visual(觀眾看到的內容,以及每個視覺節拍所對應的單詞)。 - 如果主題是有事實依據的,請確保事實正確。查證任何你不確定的內容(如果可以的話進行搜尋),並在螢幕上的補充資訊或備註中標註來源。寧可使用保守估計的數字(「高達 30%」)也不要杜撰精確數字。
3 · 配音
執行 npm run voice -- <slug>
這會產生 voice.mp3 和 timeline.json(場景開始/結束時間 + 每個單詞的時間戳記)。閱讀列印出的表格:這就是你進行動畫所依據的時間點。每個場景的片段都會被快取,因此後續的編輯只會重新配音有變更的場景。
4 · 動畫製作
閱讀 .claude/skills/make-reel/guides/scenes.md(完整的元件參考)和 .claude/skills/make-reel/guides/style.md(視覺風格)。然後撰寫 reels/<slug>/reel.html:每個腳本場景對應一個 <section class="scene" data-scene="<id>">,使用相同的 id,相同的順序。
最重要的規則:
- **將動作與單詞同步。**使用
data-at="@word"讓事物在它們被說出時出現。每個場景應該在其關鍵詞上有一個節拍,而不僅僅是在 0 秒處的入場。 - **隨時都有東西在移動。**不要有超過約 2 秒的停滯時間。使用與單詞同步的節拍、
data-loop、計數器、繪製 SVG 線條。 - **版面配置:**文字位於 x 72–1008 範圍內。標題從 y≈230 開始。主要視覺效果位於 y≈450 到 1180 之間。字幕位於 y≈1240–1440;將內容保持在該區域之外,或在該場景上設定
data-captions="top"/"off"。重要的內容不要放在 y 1700 以下(應用程式 UI 會遮蓋它)。 - 位置是絕對的(
class="abs"+ 行內left/top)。永遠不要使用 CSS 動畫或過渡;所有動作都來自數據屬性或Reel.on()鉤子,並且所有動作都在彈簧上運行(spring、spring-snappy、spring-bouncy、spring:k,c,m)。否則檢查會失敗。 - 不要使用彩色漸層背景上的全大寫置中文字(檢查會因此失敗)。
- 視覺效果:表情符號、行內 SVG、CSS 形狀、工具包中的卡片/手機/視窗/郵戳/晶片,以及
reels/<slug>/assets/中的圖片。不要下載真實人物的圖片,或使用你不擁有版權的標誌/角色。
5 · 檢查你自己的作品(總是在渲染前進行)
執行 npm run check -- <slug>
- 修正每個 ✗ 錯誤。修正 ⚠ 警告,除非你有理由不這麼做。
- 使用「讀取」工具開啟它列出的每個對照表 PNG 並實際查看。 語法檢查無法判斷品味。檢查:元素重疊或擁擠、難以閱讀的文字、空泛或無聊的場景、與旁白不符的視覺效果、覆蓋內容的字幕、場景之間不一致的風格。
- 如果這個 Reel 有品味設定,檢查時會列印出其參考對照表。將它們與 Reel 的對照表並排查看,並指出三個最大的差異(節奏、字體、色彩、動態)。修正那些重要的差異,或說明為什麼不修正。
- 編輯、重新執行檢查、再次查看。重複直到乾淨為止。通常需要 1 到 3 輪。
6 · 渲染
執行 npm run render -- <slug>。輸出:out/<slug>.mp4。使用 --draft 進行快速的半解析度預覽,使用 --from 10 --to 18 只渲染一個段落。
渲染後,從 MP4 中擷取 3 到 4 幀(ffmpeg -ss <t> -i out/<slug>.mp4 -frames:v 1 f.jpg),選在轉場和與單詞同步的關鍵點,然後檢視它們,以確保 MP4 與檢查結果相符。
交付內容:MP4 路徑、長度、使用的語音,以及一行關於你仍想改進之處的說明。如果使用者是在自己的機器上,請提及 npm run preview -- <slug> 可以在瀏覽器中搭配音訊觀看。
7 · 回饋循環
閱讀 .claude/skills/make-reel/guides/feedback.md。使用者會說出像是「感覺不對」、「鉤子太弱」、「場景 4 太拖」、「把郵戳放大」之類的話。將每個意見對應到最小的變更:
- 措詞、節奏、場景太長/太短 → 編輯
script.json,然後執行npm run voice(只有變更的場景會重新配音)。單詞時間戳記會移動,但@word參考會自動跟隨。 - 外觀、版面配置、動態、節拍時間點 → 只編輯
reel.html。無需重新配音。 - 然後檢查 → 查看對照表 → 渲染。用一到兩行說明你更改了什麼。