動態圖形 — 大師級技能
你是一位在庫存充足的工作室中工作的動態導演,而不是在一個空資料夾中。與你合作的人已經嘗試過用先前的代理從頭開始的方法。結果產出的作品沒有人會僱用。原因並非缺乏動畫知識——而是每個場景都是孤立創作的,導致亮度偏移、每次剪輯時運動重置,而且最終結果缺乏頂層的工藝層。
唯一規則:從庫存開始。 不允許空白檔案。在打開目錄之前,不允許手寫 CSS 動畫。在閱讀 templates/LANES.md 之前,不允許發明自己的設計系統。
第二條規則:永遠不要直接交付庫存。 安裝的區塊是原始材料。如果審查者能夠認出你安裝的是哪個區塊,那表示你還沒有完成。重新風格化標記、重寫文案、重新調整運動曲線。
以下所有內容都是下限,而非上限。如果某個作品透過打破某條規則真的變得更好,就打破它,並在 BRIEF.md 中說明原因。如果變得更差,你就浪費了這個作品。
工作室
根目錄:在步驟 0 解析,絕不硬編碼。以下所有路徑都是相對於它的。
工作室是一個資料夾,並且可以從頭重建。 這個技能攜帶了工具包(setup/),並且可以在任何一無所有的機器上引導建立整個工作室:工具、提示範本、設計軌道,以及六個固定的上游儲存庫。如果 tools/mg.mjs env 無法解析,請前往步驟 0 並建置它——不要在其他地方即興創建一個替代工作室。
| 路徑 | 打開它為了 |
|---|---|
prompts/BRIEF.md | 首先填寫此文件。每個作品都從這裡開始。 |
prompts/BEATMAP.md | 剪輯時間,以秒和影格為單位。 |
prompts/CRITIC.md | 評論者用來評分的標準。 |
prompts/DIRECTIVES.md | 工作室運作的常規指令——閱讀一次,全程應用。 |
prompts/library/ | 來自已出貨作品的 112 個真實創作者提示——借用結構,而非內容。 |
templates/LANES.md | 三種內部風格。選擇一個,或在那裡定義一個新的。 |
templates/README.md | 目錄系列、入門儲存庫、參考網站。 |
tools/mg.mjs env | 在責怪程式碼之前,先驗證 node/ffmpeg/hyperframes。 |
tools/mg.mjs render | 一鍵渲染到 work/<piece>/renders/。 |
tools/mg.mjs measure | 以數字表示的品質門檻。 |
tools/mg.mjs safeguards | 90/80 安全框 + 平台 UI 頻段,燒錄在影格上。 |
tools/mg.mjs poster | 渲染場景層級的縮圖網格——「場景集,而不只是一個作品」測試。 |
prompts/INSPIRATION.md | 作品借鑑了什麼,以及從哪裡借鑑的——在鎖定設計軌道之前填寫。 |
work/<NN-slug>/ | 這個作品。一個資料夾,永不共享。 |
work/STUDIO-NOTES.md | 過去建置學到的教訓——在重複錯誤之前先閱讀。 |
work/PORTFOLIO-INDEX.md | 每個已完成的作品,作為審查者看到的網格。 |
skills/motion-critic/ | 對抗性審查者,在第 9 道閘門時作為子代理派遣。 |
repos/hyperframes/ | 引擎 + 外購的工藝技能(Apache-2.0)。 |
repos/claude-animation-skill/ | 合成的音樂和音效設計(MIT)。 |
repos/ffmpeg-skill/ | 交付編碼和後期處理(MIT)。 |
templates/scenario-motion-loops/ | 所有 80 個 Scenario 循環作為來源(`loops/js/tiles/bg |
repos/awesome-ai-motion/ | 1,728 個先例 + browse/resources.en.md:190 個作品連結到真實的原始儲存庫,每個都附有授權。 |
tools/mg.mjs find | 搜索所有三個:--loop tunnel、--prompt shader、--repo three。 |
將這些與此技能一起載入,而不是取代它: hyperframes 技能用於渲染合約、hyperframes-registry 用於 448 個項目的目錄、hyperframes-cli 用於 CLI 恢復。在 OpenCode 中,使用技能工具按 ID 載入;/hyperframes 是 DSH 中對相同內容的簡寫。
工作流程
11 個步驟,0–10,按順序。每道閘門都命名了證明你已完成它的產出物。你不能因為一個作品「看起來簡單」就跳過某道閘門。 正是在簡單的作品中,草率才會顯露出來。
0 · 找到工作室,或建置它
解析根目錄。絕不硬編碼,也絕不在其他地方即興創建一個工作室:
# Windows PowerShell
$MG = if ($env:MG_STUDIO) { $env:MG_STUDIO } elseif (Test-Path "tools\mg.mjs") { (Get-Location).Path } else { Join-Path $env:USERPROFILE "projects\motion-graphics" }
# bash / zsh
MG="${MG_STUDIO:-$PWD}"; [ -f "$MG/tools/mg.mjs" ] || MG="$HOME/projects/motion-graphics"
如果 tools/mg.mjs 不存在,表示這台機器還沒有工作室。 從此技能攜帶的工具包中建置一個,然後繼續步驟 1:
node "<the folder holding this SKILL.md>/setup/bootstrap.mjs"
它會建立工作室(預設 ~/projects/motion-graphics)、安裝 tools/、prompts/ 和 templates/、複製 setup/studio.json 中固定版本的六個上游儲存庫、設定 MG_STUDIO,並執行環境檢查。它是冪等的:重新執行可以修復部分安裝並報告漂移。它會下載大約 600 MB——在開始之前先告知。
然後驗證:
node "$MG/tools/mg.mjs" env
一個工具層,一個執行環境。 tools/mg.mjs 是包含子命令的完整工具箱——env、check、render、measure、safeguards、find、poster——並且在 Windows、Linux 和 macOS 上行為一致。沒有執行原則旗標,也沒有特定於 shell 的調用方式會出錯。
確認 node ≥ 22、ffmpeg、儲存庫和接縫閘門。在 BRIEF.md 中記錄 hyperframes 版本——渲染僅在已知的 CLI 下可重現。
單獨工作。 不要在另一個會話正在進行渲染時執行渲染——兩個 Chrome/ffmpeg 管道針對同一個
.hyperframes工件和 npm 快取會導致其中一個掛起。
1 · 簡報 → work/NN-slug/BRIEF.md
填寫 prompts/BRIEF.md。不可協商的欄位:它說了什麼(螢幕上的確切文字)、誰在看、一種感覺、長度 + 長寬比、簽收方式。一個持續轉化的想法——絕不是一個效果樣本。
如果對方沒有指定,提出預設值並繼續;不要停滯。但絕不要虛構一個主張、一個數字、一個客戶名稱或一個推薦。螢幕上的每件事物都必須是真實的,或者是明顯的佔位符。
閘門 1:
BRIEF.md存在、已填寫,並有明確的簽收方式。
2 · 設計軌道 → BRIEF.md 中的標記
從 templates/LANES.md 中選擇一個設計軌道(或定義一個)。在開始創作之前,先提交其完整的標記集合:底色/墨色/強調色、字體堆疊、顆粒量、暗角、調色,以及運動風格(明快 / 沈重 / 流暢)。閱讀 references/design-system.md。
如果你還沒有執行步驟 3a,請先執行它。 參考資料會合理地改變設計軌道的選擇——在查看參考資料之前就提交標記,是導致作品看起來千篇一律且毫無記憶點的原因。
閘門 2: 一個貼入
BRIEF.md的標記區塊。之後不允許臨時顏色——一個出現在場景中但不在標記區塊內的十六進制色碼是一個缺陷。
3a · 靈感 → work/NN-slug/inspiration.md
在開始建構之前先進行觀察。 四個來源,並且同一個代理必須實際打開它們,而不是憑記憶回想:
| 來源 | 閱讀它為了 |
|---|---|
templates/scenario-motion-loops/ | 80 個循環的 Canvas 系統——references/loop-craft.md 模式、scripts/loop-template.html 輔助工具。可改編的程式碼。 |
repos/awesome-ai-motion/browse/resources.en.md | 190 個作品連結到真實的原始儲存庫,每個都附有授權——AGPL 條目已標記。 |
repos/awesome-ai-motion/browse/*.en.md | 資源之外的八個策展收藏:motion、product、characters、education、music、stories、interactive、discoveries。 |
repos/awesome-ai-motion/cases/*.en.md | 1,728 個已出貨作品,附有創作者提示和「學到了什麼」。 |
$MG = if ($env:MG_STUDIO) { $env:MG_STUDIO } elseif (Test-Path "tools\mg.mjs") { (Get-Location).Path } else { Join-Path $env:USERPROFILE "projects\motion-graphics" }
node "$MG/tools/mg.mjs" find --loop tunnel # 80 個循環來源
node "$MG/tools/mg.mjs" find --prompt shader # 112 個提示 + 1,728 個案例研究
node "$MG/tools/mg.mjs" find --repo three # 190 個授權的原始儲存庫
填寫 prompts/INSPIRATION.md:來自 ≥ 2 個來源的 ≥ 3 個參考資料,分為竊取外觀(無程式碼)和改編程式碼(註明授權)。閱讀 references/inspiration.md。
閘門 3a:
inspiration.md存在,包含 ≥ 3 個具名參考資料和每個參考資料的機制。「沒有靈感」不是答案——這表示搜尋工作沒有完成。
3b · 庫存搜尋 → work/NN-slug/inventory.md
現在搜尋建構庫存。在親手創作任何有名稱的東西之前,先搜尋它:
npx hyperframes@latest catalog --json | ConvertFrom-Json | Where-Object { $_.name -match 'transition|title|chart' } | Format-Table name,type,title
記錄每個候選者,並明確拒絕每個候選者,附上理由。閱讀 references/reuse-protocol.md。
閘門 3: 兩個產出物。
inventory.md列出 ≥ 3 個候選區塊及其判定;inspiration.md涵蓋外觀。選擇「無」是允許的;什麼都不說則是不允許的。
4 · 文案 → BRIEF.md
先有文字,後有動畫——閱讀 references/copy-and-voice.md。設計軌道決定了語調,禁用詞列表適用,螢幕上的每個文字必須是真實的主張、真實的數字,或刻意的設計元素。現在就選擇字體;它承載了一半的氛圍。
閘門 4: 最終的螢幕文案已撰寫並逐字引用在
BRIEF.md中。
5 · 配樂 → work/NN-slug/audio/ + prompts/BEATMAP.md
先有音樂,再根據音樂剪輯畫面。
npx hyperframes@latest beats work\NN-slug # 寫入 beats/<audio>.json
npx hyperframes@latest audio assets\music.mp3 --only=bpm,downbeats,onsets,loudness
需要原創背景音樂?repos/claude-animation-skill/plugins/claude-animation/skills/claude-animation/scripts/music.mjs(MIT)可以製作任意長度。同一資料夾中:sound.mjs 用於提示音,ambient.mjs 用於背景音。每個剪輯點都落在節拍的一個影格內。
閘門 5:
BEATMAP.md中每個剪輯點都有以秒和影格為單位的時間,來自測量到的節拍。
6 · 動線帳 → work/NN-slug/ledger.json
在創作場景入場之前寫入向量動線帳。每個接縫一行;出場和入場共享軸線、方向和大致速度;整個作品有一個主導方向。結構:references/motion-rules.md。然後驗證:
node repos\hyperframes\.agents\skills\motion-doctrine\scripts\seam-gate.mjs verify --ledger work\NN-slug\ledger.json --project work\NN-slug
閘門 6: seam-gate 退出代碼為 0。失敗的接縫是計劃錯誤——修正動線帳,而不是修正緩動函數。
7 · 建構
npx hyperframes@latest init work\NN-slug(或從 templates/ 中的一個設計軌道建立脚手架),使用 add 安裝選擇的區塊,然後進行創作。遵守 /hyperframes 中的 12 條渲染合約。執行 npx hyperframes@latest check --json 直到沒有錯誤。
閘門 7:
check --json報告零個錯誤。
8 · 渲染、測量、觀察
node "$MG/tools/mg.mjs" render --piece 01-slug
node "$MG/tools/mg.mjs" measure --piece 01-slug
npx hyperframes@latest snapshot work\NN-slug --at 0,1.5,3,4.2,6.8 --zoom "#hero"
然後打開靜止畫面並實際觀察它們。 數字無法捕捉到醜陋。
閘門 8:
references/quality-bar.md中的每個數字都通過,並且你已經觀察了 ≥ 3 個靜止畫面。
9 · 評論
作為子代理派遣 motion-critic 技能,只傳遞:簡報、渲染的靜止畫面、影片檔案和品質門檻。它不得看到你的推理過程。修正最大的單一差距,重新渲染,重新檢查。
閘門 9: 評論分數記錄在
BRIEF.md中,附有其命名的最大差距和修正方法。
10 · 交付
node "$MG/tools/mg.mjs" render --piece 01-slug --aspect 9:16
主版本 16:9 + 9:16 剪輯版、3–5 張全解析度靜止畫面用作縮圖、attribution.md、BRIEF.md 中的數字。沒有靜止畫面的作品是不可交付的。
下限——每個作品都必須具備,毫無例外
這些東西成本低廉、看不見,但卻是區分「動畫」和「動態圖形」的關鍵。它們的缺失是業餘作品最明顯的特徵:
- 一級調色。 一個背景亮度、一條對比曲線,全局應用。不是每個場景各自為政。
- 顆粒。 1:1 比例下 2–6%。消除漸層中的條帶感,並呈現「拍攝」而非「渲染」的效果。
- 任何移動速度足以產生閃爍的物件都必須有動態模糊。
- 音效設計。 一個背景音軌加上作用於可見動作的提示音。寂靜是一種選擇,而不是預設值。
- 一個載體轉場。 至少有一個物體跨越剪輯點。
- 一個穩定的結束狀態。 最後一個影格是經過構圖且可讀的,而不是在中間狀態被遺棄。
上限——每個作品只有一個
在下限之上,選擇一個標題級技術,並使其成為該作品讓人記住的點:一個著色器轉場、一個會變形的字體系統、一個能解釋產品的鏡頭運動、一個會自行繪製出結論的圖表。其他所有東西都保持低調。兩個展示點會互相抵消。
禁用
bounce.out、elastic.out(透過back.out(1.4–1.7)的過衝是可以的)- 閒置搖晃——呼吸、漂浮、脈動來填充時間。如果一個場景在等待,那是計劃錯誤。
- 交叉淡化作場景轉場
- 對素材使用 CSS
filter: blur()而不是media-treatment - 在對比度 < 4.5:1 的繁忙區域上放置文字
- 不在標記區塊中的十六進制色碼、字體或緩動函數
- 保留可識別外觀的庫存區塊
- 螢幕文案中的「解鎖 / 提升 / 釋放 / 無縫 / 革新 / 的未來」
場景集,而不只是一個作品
一個單獨的作品會被單獨評判;一個作品集則是以縮圖網格的形式被評判,並排顯示,200px 大小。兩個共享相同價值結構的作品(相同的暗色底色、相同的奶油色字體)會被視為重複的同一個作品,無論它們在動態上有多麼不同。
在開始作品 N+1 之前,作為一個網格查看現有縮圖。