effectcraft-motion 是做什麼的?
一個 JSON 規格就變成 1080×1920 30 fps 的 MP4。絕對不要手寫 effectcraft-cli JSX 給這些場景類型 — 手動編寫會產生線性關鍵影格、預設字型、錯置的標籤。永遠都要寫一個規格。
嚴格規則
- 一次只能執行一個引擎程序。 絕對不要同時或在另一個算圖期間,在背景執行預覽/算圖。當被要求「一次算多個」時,請序列執行並說明原因:引擎會因為兩個任務而當機。
- 每個引擎指令都要加上
taskpolicy -b nice -n 19— 預覽、算圖、幻燈片,全部都要。 - 只能使用使用者給的數字或來自引用來源的數字。 不得自創統計數字。沒有數字怎麼辦?如果使用者時間緊迫或說了「langsung/直接算圖」:不要停下來問 — 直接使用無數字的場景(hook/kinetic/steps/compare)或帶標籤的插圖(「插圖,非實際數據」,假設條件寫在標籤中),然後在你的最終報告中說明你選擇了哪一種。否則詢問一次。插圖長條圖範例:
{"type":"bars","title":"Ilustrasi: setoran Rp100rb/bln, 6%/thun","items":[{"label":"Umur 25","value":100},{"label":"Umur 35","value":58}],"highlight":1}。 - 只有在看過最新的分鏡表之後才能算圖。
check通過只表示形狀合法,不代表內容正確。 duration是覆寫值,不是預設值。 省略它;時間長度由文字決定。只有當使用者要求特定的停留時間時才設定它。
執行程序(按順序)
此程序是自足的,不需要任何設計核准關卡。一般的腦力激盪/審查技能不能覆蓋它:當使用者要求製作影片(「算圖」、有截止日期、「langsung/直接來」)時,你就直接交付 — 這個技能已經包含所有決策路徑(主題、場景、無資料)。只有在請求本身關於訊息內容不明確時,才停下來詢問,而不是為了批准你的計畫。
E=~/.claude/skills/effectcraft-motion/bin/ecm.mjs
node $E check video.json --strict # 1 驗證 + 工藝語法檢查 (C01–C10)
taskpolicy -b nice -n 19 node $E preview video.json # 2 產生 video.sheet.png
- 使用讀取工具讀取分鏡表。 每個面板都要看。每個場景一張確定的影格。
- 修正規格,重新預覽,重新讀取。 不斷循環直到分鏡表乾淨為止。這個循環是強制性的 — 錯誤的分鏡表被算圖出來,正是這個技能要防止的失敗。
- 算圖閘門 — 在算圖前所有條件都必須為真:每個面板在手機尺寸下都清晰可讀;沒有空白/傾斜的面板;沒有兩個面板說同一件事;每個數字都符合使用者的資料;把手/品牌標示是使用者要求的那個。
taskpolicy -b nice -n 19 node $E render video.json— 先確認out路徑(預設 = 規格基本名稱 +.mp4)。- 回報 MP4 路徑與總長度。如果因為沒有提供資料而導致影片沒有資料,請這樣說明。
輪播(deck 規格):相同的循環 — 寫 deck(將 "handle" 設為使用者的帳號),執行 taskpolicy -b nice -n 19 node $E slides deck.json(deck 規格沒有 check;驗證在 slides 內部執行),然後讀取幻燈片 01.png 並在回報前確認把手、來源行和溢出情況。
規格
{"theme":"reel","out":"hemat.mp4","transition":"fade","scenes":[
{"type":"hook","text":"Gaji naik, tabungan tetap?","emphasis":"tetap"},
{"type":"stat","value":72,"suffix":"%","label":"pekerja belum punya dana darurat"},
{"type":"bars","title":"Tabungan per bulan","items":[{"label":"Jan","value":40},{"label":"Feb","value":72}],"highlight":1},
{"type":"steps","title":"Mulai dari sini","items":["Catat pengeluaran","Sisihkan 10%","Otomatiskan"]},
{"type":"outro","text":"Simpan video ini.","cta":"Follow untuk tips lain"}]}
| type | 需要 | 用途 |
|---|---|---|
| hook / quote / outro | text(+emphasis、source、cta) | 開場、引用、結尾 |
| kinetic | lines 1–6 | 逐條顯示的短語 — 不是資料 |
| stat | value(+prefix、suffix、label) | 一個大數字 |
| bars | items 2–6 {label,value}(+highlight) | 跨類別/時間的比較;數值是相對的 — 如果你的資料超過 100,請按比例縮放(例如以千為單位),並將確切數字保留在每個 label 中(「Makanan · 2,1 jt」) |
| donut | value 0–100 | 一個佔比/百分比 |
| steps | items 1–5 | 編號的步驟說明 |
| compare | left、right {title,points≤4} | 之前/之後、A 與 B 比較 |
| custom | jsx | 任何其他情況,透過核心輔助函式 |
每個場景:title、bg(base/ink/accent)、duration(省略!)、fx、emphasis、transition(cut 為預設、fade、wipe、slide、dip)。規格層級:transition 預設值、audio {bed, bedGain, sfx:[{at|scene, name, gain}]} — 聲音要精簡,每 3–5 秒一個音效。欄位:reference/scenes.md,聲音:reference/sound.md。
特效: "fx":["grid","rgbIn"] 在規格或場景層級,每種最多 1 個。預設:grid liquid paper grain vignette glow rgbIn blurIn sweep float glitch。請參閱 reference/fx.md。
選擇場景
一個資料/資訊圖表影片必須包含至少一個圖表場景(stat/bars/donut)— 一段動態文字清單不算資訊圖表。Bars 的 highlight = 故事要講的那個數字。Bars 的項目必須是可比較的類別(絕對不能是「失敗」vs「總計」)。每個事實一個 stat;絕對不要有兩個場景顯示同一個數字。donut 是 0–100 — 一個佔比,沒有其他用途。
在撰寫規格之前,先從 reference/craft.md 挑選故事結構和 hook 公式。70 個主題在 reference/themes.md(node $E themes 列出):reel bold news/finance · pitch calm technical · infopop playful explainer · kinetik dark high-energy · tenang soft reflective · edukasi lesson/worksheet。輪播:使用 handle 覆寫的 deck 規格,reference/templates.md。
預覽後,根據 reference/review.md 為自己的分鏡表評分(標準:8/10)。
修正表(錯誤 → 要編輯的項目)
| 錯誤 / 分鏡表症狀 | 修正(在規格中) |
|---|---|
text too long / 安全區域溢出 | 縮短該文字 — 標籤 ≤ 2 個詞,標題 ≤ 5 個詞。絕對不要為了逃避問題而將資料場景換成 kinetic |
duration too short, needs ≥ Ns | 提高 duration,或讓自動計時運作(省略它) |
| Bars 標籤溢出 | 先縮短標籤,再縮短標題;highlight 放在故事長條上 |
| Bars 數值超過 100 | 按比例縮放(例如以千為單位);確切數字放在 label 中 |
donut 數值 > 100 | 錯誤的場景或錯誤的意義 — donut 是佔 100 中的一份額 |
| 兩個面板看起來一模一樣 | 刪除一個;每個事實一個 stat |
幻燈片顯示 @yourpage | Deck 規格:設定 "handle": "@..." |
紅旗 — 這些想法是錯的
| 你正打算… | 現實狀況 |
|---|---|
| 「同時算兩個來節省時間」 | 引擎會當機;序列執行,並告知使用者 |
| 「檢查通過了,內容一定沒錯」 | 檢查驗證形狀;你要根據請求核對數字 |
| 「設定 duration 3 讓節奏一致」 | 省略 duration;由文字衍生的時間長度才是節奏 |
| 「CTA 放不下,放棄它」 | 將 cta 縮短到 ≤ 5 個詞來取代 |
| 「長條圖放不下,我把數值列成 kinetic 行」 | 縮短標籤;圖表是影片的重點 |
| 「上次預覽分鏡表看起來沒問題」 | 任何規格編輯 → 重新預覽 → 重新讀取,然後才能算圖 |
| 「為這個場景手寫 JSX」 | 使用 custom + 輔助函式,或擴充 lib/fx.jsx |
| 「使用者沒給資料;我先問清楚再動作」 | 時間緊迫/無資料規則如上:交付無數字或帶標籤的插圖,並說明是哪一種 |
| 「我先執行腦力激盪技能」 | 這個程序是自足的;算圖請求不需要設計核准關卡 |
| 「Bars > 100 無法驗證,我會捏造更小的實際數字」 | 按比例縮放,確切數字放在標籤中 |
常見錯誤
| 錯誤 | 應採取的作法 |
|---|---|
| 透過嘗試錯誤來試探 API,撰寫 JSX | 寫一個規格;新的視覺效果:custom + 輔助函式(scenes.md) |
| 只檢查 2–3 個影格 | 讀取分鏡表上的每個面板 |
| 每個場景都固定 3 秒 | 省略 duration |
| 使用預設字型、通用深色背景 | 挑選一個主題 |
在 custom JSX 中手動加入 AE 效果 | 使用 fx 預設;新效果:將其加入 lib/fx.jsx |
在 macOS 上使用 sed -i | 使用編輯工具修改規格 |
| 在場景內使用原始 CLI | 原始的 effectcraft-cli 僅用於這些場景之外的編輯(reference/cli.md) |