Communitygithub.com

kasfulk/effectcraft-motion

用於製作直式 9:16 動態圖形或資訊圖表(數字、圖表、清單、動態文字),使用 effectcraft-cli / EffectCraft,或使用非 pitch-kajian 風格的 satsetmotion 主題 — 若要製作來自 opus-video-prompts 的 pitch 風格 kajian 影片,請改用 clipper-motion。

effectcraft-motion 是什麼?

這個技能專門用來產生 1080×1920、30 fps 的 MP4 垂直影片,適用於資訊圖表、動態文字與運動圖形。它強制要求使用者必須以 JSON 規格檔驅動輸出,絕對不能手寫 effectcraft-cli JSX,因為手動編寫會導致線性關鍵影格、預設字型與標籤錯位等問題。支援的主題涵蓋 reel、news、finance、pitch、calm、infopop、kinetik、tenang、edukasi 等 70 種,並內建嚴謹的製作流程:先以 `check` 驗證規格語法,再透過 `preview` 產生分鏡表,確認每一格面板都正確無誤後,最後才執行 `render`。此外,技能包含完整的錯誤修正表、常見陷阱提醒與紅旗思維清單,確保開發者只產出高品質、資料正確的動畫影片。支援平台為 effectcraft-cli / EffectCraft,適用於 Claude Code、Cursor、Codex 等 AI 代理工具的終端機模式。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/kasfulk/effectcraft-motion-skills/tree/HEAD

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

effectcraft-motion 是做什麼的?

一個 JSON 規格就變成 1080×1920 30 fps 的 MP4。絕對不要手寫 effectcraft-cli JSX 給這些場景類型 — 手動編寫會產生線性關鍵影格、預設字型、錯置的標籤。永遠都要寫一個規格。

嚴格規則

  1. 一次只能執行一個引擎程序。 絕對不要同時或在另一個算圖期間,在背景執行預覽/算圖。當被要求「一次算多個」時,請序列執行並說明原因:引擎會因為兩個任務而當機。
  2. 每個引擎指令都要加上 taskpolicy -b nice -n 19 — 預覽、算圖、幻燈片,全部都要。
  3. 只能使用使用者給的數字或來自引用來源的數字。 不得自創統計數字。沒有數字怎麼辦?如果使用者時間緊迫或說了「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}。
  4. 只有在看過最新的分鏡表之後才能算圖。 check 通過只表示形狀合法,不代表內容正確。
  5. 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
  1. 使用讀取工具讀取分鏡表。 每個面板都要看。每個場景一張確定的影格。
  2. 修正規格,重新預覽,重新讀取。 不斷循環直到分鏡表乾淨為止。這個循環是強制性的 — 錯誤的分鏡表被算圖出來,正是這個技能要防止的失敗。
  3. 算圖閘門 — 在算圖前所有條件都必須為真:每個面板在手機尺寸下都清晰可讀;沒有空白/傾斜的面板;沒有兩個面板說同一件事;每個數字都符合使用者的資料;把手/品牌標示是使用者要求的那個。
  4. taskpolicy -b nice -n 19 node $E render video.json — 先確認 out 路徑(預設 = 規格基本名稱 + .mp4)。
  5. 回報 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 / outrotext(+emphasis、source、cta)開場、引用、結尾
kineticlines 1–6逐條顯示的短語 — 不是資料
statvalue(+prefix、suffix、label)一個大數字
barsitems 2–6 {label,value}(+highlight)跨類別/時間的比較;數值是相對的 — 如果你的資料超過 100,請按比例縮放(例如以千為單位),並將確切數字保留在每個 label 中(「Makanan · 2,1 jt」)
donutvalue 0–100一個佔比/百分比
stepsitems 1–5編號的步驟說明
compareleft、right {title,points≤4}之前/之後、A 與 B 比較
customjsx任何其他情況,透過核心輔助函式

每個場景: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
幻燈片顯示 @yourpageDeck 規格:設定 "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)

相關技能