Communitygithub.com

TellMotion

將一個點子轉化為精美的 2D 解說動畫 (1920x1080) — 挑選現成的主題或設計自訂主題,然後使用 Motion Canvas (TypeScript) 製作動畫。當使用者要求動畫解說、圖表/流程/架構動畫、「製作關於 X 的影片」,或想為現有 TellMotion 專案加入場景時使用。

TellMotion 是什麼?

TellMotion 是一個專為 2D 解說動畫設計的 AI 助手技能,支援 Motion Canvas (TypeScript) 平台。它能將使用者的點子轉化為完整的動畫專案,涵蓋從主題選擇、分鏡腳本、場景生成到最終渲染的完整流程。此技能支援 Claude Code、Cursor 等開發者工具,透過結構化的步驟減少 token 消耗:先進行簡短的討論以確定內容與設計方向,然後自動建立 Motion Canvas 專案,產生場景程式碼,最後進行驗證與渲染。它內建豐富的主題目錄、可複用的元件包(如雲端架構、演算法、圖表等),並提供嚴格的色彩與字體管理機制,確保主題可隨時切換。TellMotion 特別適合製作流程圖、架構圖、時間軸、演算法視覺化等 2D 解說影片,但無法處理 3D 或實拍影片。其核心優勢在於透過分鏡腳本先行審核,避免昂貴的動畫重寫,並提供批次預覽與輕量化驗證工具,大幅提升開發效率。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/YoelRuso/TellMotion/tree/main/skills/tellmotion

在你喜歡的 AI 中提問

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

說明文件

TellMotion — 點子 → 主題 → 動畫

一個可重複的流程,token 花費低廉。適用於任何適合 2D 的主題:圖表、流程、架構、演算法、時間軸、概念。(不適用於 3D 或實拍影片。)

此技能的結構:themes/(主題目錄) · tools/(Node,無依賴) · assets/base(Motion Canvas 範本,含場景配方) · assets/packs/(可選元件包) · scripts/new-project.sh · references/。

1. 簡要討論(一輪,只問缺少的資訊)

如果使用者已經提供了內容/結構,請不要再問。使用 AskUserQuestion(最多 4 個問題)來詢問缺少的資訊:

  1. 主題和內容(如果沒有:提出一個虛構的主題並告知使用者)。
  2. 長度/節奏(預設:平穩節奏,每個場景 20-60 秒)和 fps(預設預覽 30 / 渲染 60)。
  3. 設計 — 總是提供以下三個選項:
    • 範本:使用目錄中的一個主題。執行 node tools/list-themes.mjs(精簡列表)並要求 ID;若要視覺化瀏覽,執行 node tools/build-catalog.mjs <tmpdir> 然後開啟 gallery.html(使用 node tools/serve.mjs <tmpdir> 提供服務)。
    • 自訂設計:撰寫 3 個對比鮮明的 theme.json 提案(參見 references/theme-format.md),渲染預覽圖並讓使用者選擇(步驟 2)。
    • 自備設計:使用者提供品牌色彩/字型或 Figma 檔案 → 從中推導出一個 theme.json。
  4. 元件包:從主題推斷,除非不清楚否則不要問,只加入自訂場景會用到的:cloud(架構)、algorithms(排序、樹狀結構)、charts(資料)、flowchart(流程)、timeline(歷史/路線圖)、code(程式設計、CLI)、typography(開場、引言、A vs B)、science(循環、圖層、波)、math(方程式、函數)、ui(產品展示、使用者流程)、maps(地點、旅程)。可自由組合;references/packs.md 列出了所有元件。

2. 自訂設計(選擇範本時跳過)

  1. 在一個暫存資料夾中撰寫 3 個 theme.json 提案(複製最接近的目錄主題並修改 token;使用不同風格,例如技術/活潑/編輯)。
  2. 對每個提案執行 node tools/validate.mjs <file>,然後執行 node tools/build-catalog.mjs <out> --themes <folder>。
  3. 顯示預覽:在瀏覽器面板中開啟 <out>/gallery.html(serve.mjs)或發送 SVG。等待使用者選擇。
  4. 可選的高傳真路線(使用 Figma,僅在使用者想要且 Figma 連接器存在時):references/figma.md。
  5. 將選擇的主題儲存為 <project>/theme.custom.json(並提供將其貢獻到目錄的選項)。

3. 分鏡腳本(在製作任何動畫前需經使用者核准)

重寫動畫很昂貴;重寫場景列表則不然。僅在單一場景或使用者要求時跳過此步驟。

  1. 閱讀 references/storyboard.md 和 references/recipes.md,然後撰寫 storyboard.json:每個場景一條記錄,包含其配方(或 custom)、顯示內容、秒數和實際文字。
  2. 執行 node tools/storyboard.mjs validate <file>,然後執行 node tools/storyboard.mjs preview <file> --theme <id|file> --out <tmpdir>。在瀏覽器面板中顯示頁面(serve.mjs),並在聊天中列出場景。
  3. 等待使用者核准。修改分鏡腳本,而不是程式碼,直到他們同意。之後停止預覽伺服器。

核准後,自動運作直到交付。

4. 專案

bash <skill>/scripts/new-project.sh <name> --theme <id|path.json> [--pack a,b|all] [--demos]

(--demos 會複製每個元件的示範場景:便於學習 API,之後可刪除示範。) 從應包含專案的資料夾執行此命令。每個主題一個專案;為新影片將場景加入該專案。它會複製範本、套用主題(src/theme.ts、src/fonts.ts)、安裝依賴項並在 .claude/launch.json 中註冊專案。稍後變更主題:執行 node <skill>/tools/apply-theme.mjs <theme> <project> 然後 npm install。

5. 場景

node tools/storyboard.mjs generate <file> <project> 會寫入每個場景和 src/project.ts。配方案例場景即為完成狀態。每個 custom 場景是一個帶有標題、字幕和長度的運行佔位符:撰寫其動畫,保留這些元素。對於自訂場景,請閱讀 references/motion-guide.md(核心 API、佈局配方、陷阱)和 references/packs.md(套件元件)。重新執行 generate 會保留您編輯過的場景。固定規則:

  • 每個區塊一個場景,位於 src/scenes/,在 src/project.ts 中註冊(每個場景另有一個 .meta 檔案)。
  • 使用 prepareScene(view, title);先呼叫 enter() 最後呼叫 leave();透過 sub.say(text) 顯示字幕。
  • 在 1920x1080 解析度下,文字 ≥ 28 px;字幕 ≤ 85 個字元;每種元素類型使用一個類別顏色 + 在 src/config.ts 中的圖例(LEGEND)。
  • 每個場景僅顯示必要的內容;使用 glow() 標記活動元素並使用 dim() 淡化其餘部分。
  • 可編輯的文字、時間和顏色作為每個場景頂部的常數(EDITABLE TEXT 註解);全域速度在 PACE 中。
  • 使用 connect(root, a, b) 連接元件。請求和事件使用 send(root, arrow.points, {shape: 'dot' | 'diamond', to: piece}) 傳送,因此形狀可用於區分它們,並且元件在到達時會做出反應。
  • 絕不在場景中硬編碼顏色或字型:使用 config.ts 中的 C、S、FONT、fs(),以便主題可以互換。

6. 驗證(便宜)

  1. 在專案中執行 npm run typecheck,然後執行 node tools/storyboard.mjs duration <project>:如果場景與核准的計畫相差太遠,修正它或告知使用者。
  2. 使用 preview_start(從 .claude/launch.json 取得專案名稱)、resize_window 1700x950,然後點擊時間軸並在 [215,0,800,330] 上 zoom;在一次 browser_batch 中批次處理多次點擊+縮放。在時間軸上 scroll right 以到達後續場景。
  3. 完成後:resize_window 預設為 desktop,preview_stop。除非使用者要求,否則不要渲染 mp4。

7. 渲染(當使用者要求時)

在專案中執行 npm run render 會寫入 output/<name>/<name>.mp4 和 render.json(每個場景的持續時間、檔案大小),不會開啟編輯器。選項(在 npm run render -- 之後):

  • --format mp4,webm,gif · --thumb 或 --thumb-at <seconds> · --fps <n> · --scale <n>。WebM 編碼速度慢(數分鐘):僅在需要時才請求。
  • --aspect 9:16,1:1:將影片置於主題背景的長條內(--pad-color 可覆蓋);它不會重新佈局場景,因此文字會縮小到約 56%。請告知使用者。
  • --draft:30 fps,一半大小,輸出至 output/<name>-draft/。用於審查。
  • --info:每個場景的持續時間,不渲染任何內容。便宜:在檢查節奏時優先於渲染。
  • --dry-run:根據渲染樣本估算每個檔案的尺寸範圍,不儲存任何內容。在大型渲染前或使用者擔心尺寸時使用。

需要 Chrome、Edge 或 Chromium(CHROME 可覆蓋路徑)。在此腳本存在之前建立的專案:執行 node <skill>/tools/render.mjs <project>。原始碼位於 tools/render.mjs。

8. 交付

列出場景(名稱 → 顯示內容)、如何執行(npm start)、如何渲染(npm run render)、如何變更節奏(PACE)、文字(每個場景的常數)、主題(apply-theme.mjs)。說明哪些部分未經驗證。如果工作區中有 CLAUDE.md,將新專案加入其中。

Token 節省技巧

  • 不要重新讀取剛剛寫入的檔案;使用 Edit。
  • 使用 list-themes.mjs 而不是讀取主題 JSON 檔案;僅在自訂時讀取單一主題。
  • 批次處理螢幕截圖/縮放;避免全頁截圖。
  • 重複使用 assets/ 而不是重新生成元件。

相關技能