Communitygithub.com

motion-video · 用程式碼做能驗收的動畫

用程式碼製作動畫和影片:片頭、動態效果、字幕動畫、資料視覺化動態、UI 示範、解說片段、循環動圖。輸出 mp4/webm/gif/webp,並內建機器驗收迴圈,確保「畫面真的有在動、沒有遺漏中間狀態」。

motion-video · 用程式碼做能驗收的動畫 是什麼?

這是一個專為 AI 代理(如 Claude Code、Cursor、Codex)設計的圖像生成技能,旨在解決小模型(Flash / mini / turbo 類型)在生成動畫時常見的問題:寫出來的動畫「看起來像有寫,但實際上沒動」。它將動畫製作轉變為可工程化驗證的流程,核心概念是「先有規格,再有程式碼」,並強制所有畫面狀態是時間 t 的純函數,杜絕不確定性。此技能支援多種平台,工作流程包括撰寫規格表(鏡頭表與元素時間軸)、使用工具(如 ease.mjs)計算精確的曲線參數(禁止心算)、透過 verify.mjs 進行數值驗算,最後使用 render.mjs 與 audit.mjs 進行像素層級的驗收。它特別強調「品質優先」,認為省下發現錯誤的機會就是降級,因此堅持全量驗證、禁止併發渲染,並在最終交付版本中強制開啟運動模糊以達到電影級品質。

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

在你喜歡的 AI 中提問

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

說明文件

motion-video · 用程式碼做能驗收的動畫 是做什麼的?

這份 skill 解決一個很具體的問題:小模型(Flash / mini / turbo 類)能寫 CSS 和 Canvas, 但寫出來的動畫經常「看起來寫了,其實沒動」——中間態被跳過、緩動是假的、 關鍵元素在別的時刻才出現、結尾停在半路。它自己看不出來,因為它沒有眼睛。

所以這裡的做法不是「教它寫得更好看」,而是把動畫變成可被機器判定的工程物:

  1. 先規格、後程式碼 —— 把審美判斷翻譯成表格裡的數值
  2. 畫面必須是 t 的純函數 —— 從結構上強迫它寫出中間態
  3. 數字交給腳本算 —— 貝塞爾、彈簧、錯開步長、對比度,一律跑工具,不心算
  4. 用確定性渲染器逐幀出圖 —— 同一份程式碼永遠同一幀
  5. 用機器驗收 —— 數值層先驗一遍,像素層再驗一遍
  6. 只在機器說「結構沒問題」之後,才輪到人眼看構圖

差距不是靠一句咒語補上的。是靠這六件事把「想不對」變成「可發現、可修」。 差距從哪來、哪些補得上、哪些補不上,見 references/delta-vs-opus.md。


品質優先:只省無效開銷,不省驗證

這條比下面的鐵律更靠前。 這個 skill 的目標是做出 Opus 級的片子,不是做出最便宜的片子。 所以「要不要做這件事」的判斷標準不是快不快,而是會不會更好。

只有一類開銷可以省:重複的、無效的、互相搶資源的。驗證密度、渲染品質、幀率、 運動模糊——這些一律不省。

允許省(浪費,省了不加分也不減分)

浪費省法
起 4 個 Chrome 併發搶 CPU串行(實測比併發快),render.mjs 已內建單實例鎖
每章一份 20KB 規格文件一份 storyboard.md 寫全
反覆調 render --still 每次只抽一幀一次抽 6–8 個時間點
同一素材反覆重新分析分析一次,結果寫進 storyboard
逐幀 PNG 落盤再讀已開 optimizeForSpeed;超大專案改 image2pipe(cinema-grade.md §9)
為了「穩妥」把同一件事驗證三遍驗證兩遍(數值 + 像素)就夠,第三遍加不出資訊

禁止省(省了就是降質)

不許省理由
全量 audit,含 jump / flat 逐條處理交付前最後一關,跳過 = 沒驗收
verify --idempotent冪等壞了,後面所有驗證都不可信
rigcheck(每次改角色或姿態)骨骼錯位只能靠數字抓,眼睛抓不到
交付版開運動模糊有沒有快門的觀感差一個檔次,不是錦上添花
有快速運動時用 60fps30fps 下快速肢體會頓,這是缺陷不是取捨
抽幀看圖(多時刻 + 局部放大)1 張圖看不出中段問題;至少 6 幀 + 關鍵部位 2–3× 放大
修完重跑(而不是「應該好了」)沒重跑就等於沒修

一句話判據

省下的是等待時間,可以省;省下的是「發現錯誤的機會」,不能省。

渲染 70 分鐘不可接受,原因不是「70 分鐘太長」,而是那 70 分鐘裡 85% 是 4 個進程在互相搶 CPU ——等待沒有換來任何品質。而為了 180° 快門多花 4 倍渲染時間,換來的是實打實的觀感提升 ——這筆必須花。

正確的提速順序

  1. 先殺浪費:併發改串行、合併重複啟動、刪冗餘文件、批量抽幀
  2. 再優化實現:截圖參數、單進程多 tab、不落盤直通編碼
  3. 最後才考慮減少驗證 —— 而這一步基本不該發生;真發生了說明前面兩步沒做

鐵律

違反任何一條,產物就是不可驗收的,重做。

  1. 沒有規格不許寫程式碼。 先產出鏡頭表和時間軸表(STEP 1)。表格裡每個元素必須有 enter / active / exit 三個時間區間,缺一個就說明你還沒想清楚它在什麼時候存在。 但用戶只給一句話時(「做個厲害的」「展示你的能力」「全力以赴」),不許反問他做訪談—— 自己把母題/元敘事/形式/檔位四個槽位填滿並寫進 storyboard.md,然後直接開工。 見 references/wish-mode.md。
  2. 所有畫面狀態是 seek(t) 的純函數。 禁止 requestAnimationFrame、Date.now()、 performance.now()、Math.random()、自增計數器、以及自己會跑的 CSS @keyframes/transition。 同一份程式碼同一個 t,必須永遠渲染出同一像素。
  3. 數值一律跑腳本,禁止心算。 曲線控制點、彈簧參數、錯開步長、座標換算、對比度比值、 linear() 串——全部由 ease.mjs 產出。你的回答裡出現這類數字之前,必須先有一條工具輸出。 見下面「數字歸工具,判斷歸你」。
  4. 改完必須跑 verify 和 render + audit。 FAIL 不許交付。WARN 要逐條給出 「改」或「這是設計內的,因為…」。不許跳過 verify 直接渲整片——多花 8 秒只換來一個 笨不知原因的「畫面沒動」。
  5. 交付三件套:成片(mp4/webm/gif)+ 接觸表(-sheet.png)+ audit 結論。
  6. 審美拿不準就給候選,別猜。 兩個配色、兩種節奏,讓用戶選,比交付一個平庸版本強。
  7. 不許等素材,自己畫。 交付物裡不許出現「建議插入圖片」「此處放圖」「等素材到位後」。 渲染管線只有 HTML/CSS/SVG/Canvas——所有視覺元素只能由程式碼產生。 需要光效/紋理/圖形/圖示時先查 references/asset-recipes.md (20 類現成片段,可直接貼上:光暈、掃光、顆粒、玻璃卡、霓虹、網格、抽象插畫、粒子、 線框球、圖表、城市剪影、故障風、掃描線、圖示集、光束、景深、布紋、散景、偽 3D), 沒有再自己寫 SVG path。禁止用 emoji 或 unicode 符號充當圖形。 每個畫面至少三層(背景漸變/網格 → 主體 → 氛圍顆粒/散景),至少 2 個自建視覺元素、 1 處深度線索(陰影/漸變/疊色/顆粒)。只有一層、只有文字和色塊的畫面 = 不合格。
  8. 既有資產優先,禁止重建。 工作空間裡如果有已經拼好的骨骼/規範/組件/設計稿, 必須整套沿用,一個數值都不許重估。用 rigcheck.mjs --ref 證明你用的是原值。 事故記錄:某次重建把 head.pos 從 [-6.8,-182.5] 改成 [0,-248](偏 65.9px)、 torso.pv 從 [160,160] 改成 [160,291](偏 131px),效果是頭飄在身體左側, 而「看圖檢查」沒看出來——因為人眼會把它讀成「一個角色」。這類錯必須用數字查。
  9. 素材白名單。 只用 storyboard.md 裡明確列出的素材。工作空間裡別的檔案 (上一版產物、無關角色的圖、別的專案的配置)一律不許碰,哪怕它看起來能用。 需要新素材時在 storyboard 裡加一行並說明用途,再找。
  10. 驗收不放水,也不許併發渲染。 audit 報 WARN 不等於「可以交」:硬跳變(jump)與純色幀(flat)必須清零或逐條解釋, 否則重做。verify/rigcheck 有 FAIL 一律不許繼續。 渲染一次只跑一個 render.mjs 進程——腳本帶單實例鎖,併發只會互相搶 CPU。 要並行就在一個 Chrome 裡開多 tab(見 cinema-grade.md §9),不是起多個進程。

數字歸工具,判斷歸你

這一類模型(Flash / mini / turbo)有個共同傾向:寧願自己估,也不肯調工具。 它覺得心算零成本、工具要等。這個成本帳是錯的,先用數字把它算清楚:

心算調 ease.mjs
直接耗時0 秒約 0.3–0.5 秒
一次算對的機率三四十(貝塞爾控制點猜錯一位,整條曲線性質就變了)100
錯了代價渲 90 幀 ≈ 8 秒 + 審圖,而且很可能看不出錯,只是「就是不夠絲滑」0
期望成本0 + 0.5 × (8 + 30) ≈ 19 秒,且品質靜默下降0.5 秒

心算省下的 0.5 秒,是最貴的那種省法。所以這裡是硬要求,不是建議:

下列數字一律來自工具輸出,不許在回答裡手寫推斷值:

要什麼跑什麼
任意貝塞爾的性質(過衝、平台、取樣表)node scripts/ease.mjs cubic 0.22 1 0.36 1
彈簧參數(回彈多少、多久停、會不會中途停)node scripts/ease.mjs spring 120 14 1 1.2
把曲線壓成 CSS linear()node scripts/ease.mjs css-linear --preset silkIn
一組元素的錯開步長、會不會超出總時長node scripts/ease.mjs stagger 7 2.4 0.5
文字對比度是否達標node scripts/ease.mjs contrast "#0b0e14" "#6d8bbd"
由底色生成可讀灰階node scripts/ease.mjs ramp "#0b0e14" 5

自檢三問(交付前問自己,答不上就是違規):

  1. 我回答裡的每個曲線參數,能指向上一條命令的輸出嗎?
  2. 我有沒在哪一行寫下了「大概 0.3 左右」這種估出來的數?有 → 刪掉,跑命令。
  3. 我說「這條曲線很絲滑」,是因為我看了 ease.mjs 打的 ASCII 圖和過衝百分比,還是因為我猜?

它也想自己驗,那就用驗算器讓它放心:verify.mjs 讀的是真實計算樣式, 不是推測。它想「確認一下」的時候,正確動作是跑 verify,不是在自己腦子裡模擬一遍。


環境

零 npm 依賴。需要 Chrome 或 Edge(本機已有)+ ffmpeg + ffprobe。

ffprobe 只有 audit 校驗解析度/時長時用。缺了不會靜默放行:宣告了 --width/--height/--duration 就 FAIL,沒宣告則 WARN 並列印「解析度未知(未校驗)」。

node scripts/render.mjs --check      # 列印 chrome / ffmpeg / node / WebSocket 能力

輸出裡 chrome 是 NOT FOUND 時,用 --chrome <path> 指定,或先裝一個瀏覽器。

沒有圖像理解時怎麼辦

有些模型(例如純文字推理版本)不能 read_image。這套鏈路的判定全部是數字,不是圖片, 所以仍然能走完:ease(參數)→ verify(數值軌跡 + 冪等)→ audit(像素統計,結論就是數字) → rigcheck(幾何斷言)。

  • 能做:結構、運動、幾何、可讀性
  • 做不到:構圖好壞、配色協調、風格統一、視覺穿模

後者必須交給能看圖的人或視覺模型。但可以推遲到最後:先用數字把能抓的錯全抓掉, 再一次性給人看 6–8 幀(--still 批量抽 + --guides 疊加安全區)。


文件索引(按需讀,別一次全讀)

文件什麼時候讀
references/wish-mode.md用戶只給一句話時先讀這個:四槽位、章節推導、預設值表、許願模式下不許做訪談
references/spec-and-prompt.mdSTEP 1 寫規格表時;要可複製的 prompt 模板時;對付「不願調工具」的模型時
references/code-patterns.mdSTEP 2 寫程式碼時:seek(t) 典範、緩動庫、keys() 關鍵幀表、spring(f,z)、SVG/Canvas、20 種現代 CSS 效果
references/asset-recipes.md畫面缺東西時第一時間翻:光暈、掃光、顆粒、玻璃、霓虹、網格、插畫、粒子、線框球、圖表、圖示集、散景、偽 3D
references/rig-characters.md畫面裡有角色要動:部件 + 父子變換鏈 + pose 表 + 12 條原則怎麼落到字段上
references/cinema-grade.md定稿前:運動模糊、編碼參數(抗色帶)、暗角、HUD 系統、甩鏡、幀率選擇、長片組織、並行提速
references/review-checklist.mdSTEP 5 人眼抽檢 + 交付前逐條過
references/failure-modes.mdaudit/verify 報錯時對號入座
references/delta-vs-opus.md想知道「這套東西到底能補到哪一步」、要判斷該不該換模型時

先分流:許願,還是下需求

輸入長什麼樣走哪條路
給了尺寸/時長/內容/風格中的多數;或在回答你的追問規格模式:STEP 0 問清楚 → STEP 1 規格表 → …
一句話 + 授權語氣(「做個厲害的」「展示你的能力」「就像某類片子那樣」「全力以赴」)許願模式:跳過 STEP 0,不許反問。先掃工作空間找母題,自己填四個槽位,然後從 STEP 1 起走。見 wish-mode.md

判據很簡單:他沒說清楚的,是「等我問」還是「你定」? 語氣裡帶「你看著辦/全力以赴/展示給我看」就是後者。 許願模式同樣要寫 storyboard.md —— 區別只是那張表由你寫,不是問來的。

工作流

STEP 0 · 問清楚三件事(僅規格模式;許願模式跳過)

  • 用途:投影片頭 / 社交短影片 / 網頁 hero 動效 / 講解插片 / 數據增長動效 / GIF
  • 尺寸與時長:見下表預設值,除非用戶明確要求
  • 情緒:穩(企業/金融)、快(科技/發布)、柔(生活/品牌)、硬(遊戲/運動)
用途尺寸時長幀率格式
片頭 / 發布會1920x10803–6s30mp4
社交豎屏1080x19205–15s30mp4
網頁 hero / banner1920x800 或 1440x6002–4s,可循環30webp / apng(要透明);webm 需先驗 alpha
數據動效 / 圖表1920x10803–8s30mp4
循環動圖800x800 / 1080x10801–3s,必須能無縫循環15–20gif / webp
講解插片1920x1080每鏡 2–5s,整片再拼30mp4

超過 10 秒或超過 3 個鏡頭:拆成多個場景檔案,每個單獨渲染單獨驗收,再用 ffmpeg 拼接。 不要讓一個 seek() 管 30 秒——那樣不會有人能自查。

STEP 1 · 寫規格(唯一允許的自由發揮環節)

產出 storyboard.md,兩樣東西缺一不可:

① 鏡頭表

#時間畫面在做什麼主要運動收尾狀態
10.00–1.10s標題逐字上浮y: +96→0, 每字錯開 75ms標題就位
21.10–2.40s進度線鋪滿 + 三點彈出scaleX: 0→1(緩入緩出)線到邊、點齊

② 元素時間軸表(每個元素一行,這是後面程式碼的唯一依據)

元素enteractiveexit屬性曲線
#title span0.15 + i*0.075到片尾—translateY 96→0, opacity 0→1easeOutCubic
#bar b0.300.30–2.40—scaleX 0→1easeInOutCubic
.dots i1.50 + i*0.15到片尾—scale 0→1easeOutBack

寫不出這張表 = 你還沒想清楚。不要跳過它去寫程式碼,寫出來一定是「只有首末幀」。

「曲線」這一列不是讓你寫個名字就完事。 定了名字之後立刻跑一次工具,把「這條曲線 在你這個時長下會怎樣」釘死,然後把這行補成帶數值的形式:

node scripts/ease.mjs cubic 0.33 1 0.68 1     # easeOutCubic → 看平台段/過衝
node scripts/ease.mjs stagger 6 2.4 0.7       # 6 個標題字在 2.4s 內、每個 0.7s → 步長與溢出

於是表格裡那兩行變成:

元素enteractiveexit屬性曲線(工具確認)
#title span0.15 + i*0.075到片尾—translateY 96→0, opacity 0→1cubic-bezier(0.33,1,0.68,1),過衝 0%,0.75 後有平台段 → 時長壓到 0.7s 內
.dots i1.50 + i*0.15到片尾—scale 0→1spring(120,14) 過衝 7.1%,0.67s 穩定 → 段長給 0.75s

好曲線的判據(工具會直接告訴你):過衝 ≤ 15%、沒有中段平台、彈簧的穩定時間 不超過段長。任何一條不滿足,換參數再跑一次,而不是「先這麼寫,渲出來看看」。

模板與更多典範: references/spec-and-prompt.md

STEP 2 · 實現

從骨架開始,不要一次寫完整個場景。骨架 = 背景 + 一個元素能動 + seek 契約通。

window.scene = {
  duration: 3.0, fps: 30, width: 1920, height: 1080, ready: true,
  seek(t) {
    // 每個元素:把「時間軸表裡那一行」逐字翻譯成 3 行程式碼
    // k = 曲線(seg(t, enter, enter + 持續)) → 用 k 插值屬性
  },
};

必須內聯 CSS 和 JS。不要引外部 CDN(渲染時會斷網般失敗), 字型用系統字型("Segoe UI", "Microsoft YaHei", Arial)。

可用典範(DOM/CSS/SVG/Canvas/GSAP/Web Animations、緩動庫、多段編排、文字逐字、 路徑描邊、數字滾動、遮罩轉場、CSS linear()、filter/blend-mode/mask 用法): references/code-patterns.md

需要畫東西的時候(光效、紋理、圖形、圖示、圖表、插畫、偽 3D),先翻 references/asset-recipes.md。那裡有 20 類零依賴片段, 都能直接粘進單檔案 HTML 並接受 seek(t) 驅動。不要憑感覺從零造,也不要等素材。

STEP 3 · 數值驗算(先查數字,別急著渲)

這一步是「多驗算」裡最先跑的一環:秒級、不用編碼、還能點名到元素。

# 看每個元素的實際軌跡:誰在動、動到哪、哪兒卡住了
node scripts/verify.mjs --html scene.html --select "#bar b,#title span" --props transform,opacity --steps 31

# 驗證「畫面只由 t 決定」(同一 t 兩次調用必須一模一樣)
node scripts/verify.mjs --html scene.html --select ".item" --idempotent

它會直接告訴你這一類的答案:

  • ⚠ #b[0] · sx — 中途停頓 0–2s 之後又繼續變化 → 這一段插值被拆斷或漏了
  • ℹ #card[0] · (全部) — 這個元素整段沒有任何變化 → 選擇器沒命中 / style 沒寫進 DOM
  • ✖ seek 不冪等:13 處同一 t 兩次調用結果不同 → seek 裡用了累計狀態

數值層過了再往下。不要在數值有問題的時候就渲整片——那只會得到一個模糊的 「畫面好像沒動」,然後你要從像素倒推原因。先讓數字說話。

STEP 4 · 渲染 + 像素驗收

先只出關鍵幀,快、夠判斷構圖對不對:

node scripts/render.mjs --html scene.html --still 0.2,1.0,2.2 --out out/stills

看這幾張圖(用 read_image 自己看,別跳)。構圖 OK 再出整片:

node scripts/render.mjs --html scene.html --out out/v.mp4 --fps 30 --sheet
node scripts/audit.mjs --video out/v.mp4 --fps 30 --duration 3 --width 1920 --height 1080

audit 會給你:變化像素曲線、節奏條、以及分級結論。按結論改,一次只改被點名的那一處, 改完立刻重跑 audit。最多 5 輪;第 5 輪還 FAIL 就回到 STEP 1 改規格(說明規格本身錯了)。

常見報錯對號入座: references/failure-modes.md

STEP 5 · 人眼抽檢

機器只保證「結構對」。這幾條要你自己看圖:

  • 文字有沒有溢出畫面 / 被裁切 / 和背景撞色
  • 視覺重心在不在預期位置(三分法 / 居中 / 元素群的重心)
  • 對比度夠不夠(暗背景上 40% 透明度的灰字等於看不見)
  • 出入口是否乾淨(有沒有元素在畫面外就開始動、在畫面內突然消失)

清單: references/review-checklist.md

STEP 6 · 交付

# 需要的格式再補一條
node scripts/render.mjs --html scene.html --out out/v.webm --format webm
node scripts/render.mjs --html scene.html --out out/v.gif --format gif --fps 15

交付時給:成片路徑、接觸表、audit 的 verdict 那幾行、storyboard.md。 如果 audit 有 WARN 但你判斷是設計內的,明說是哪一條、為什麼。

定稿版必須開運動模糊重渲一次。

node scripts/render.mjs --html scene.html --out out/final.mp4 --fps 30 --motion-blur 180

這是「看起來順」與「看起來像錄屏」的分界。迭代階段可以暫時關著省時間, 但交付版不許沒有快門——省這個就是在降質。開完重跑一次 audit 確認時長幀數沒被改變。 有快速運動(角色動作、甩鏡、粒子)時,同時上 --fps 60。


命令速查

# 體檢
node scripts/render.mjs --check

# 算數(曲線 / 彈簧 / 錯開 / 對比度)—— 這些不許心算
node scripts/ease.mjs cubic 0.22 1 0.36 1
node scripts/ease.mjs spring 120 14 1 1.2
node scripts/ease.mjs css-linear --preset silkIn
node scripts/ease.mjs stagger 7 2.4 0.5
node scripts/ease.mjs contrast "#0b0e14" "#6d8bbd"
node scripts/ease.mjs ramp "#0b0e14" 5
node scripts/ease.mjs presets

# 骨骼幾何體檢(有角色時必跑;有現成 rig 時必須 --ref 對齊)
node scripts/rigcheck.mjs --rig rig/ander.rig.json
node scripts/rigcheck.mjs --rig lib/rig.json --ref rig/ander.rig.json
node scripts/rigcheck.mjs --rig rig.json --pose '{"head":{"rot":0.2}}' --assert

# SKILL.md frontmatter 體檢(改完 skill 就跑一次,防「整個 skill 載不了」)
node scripts/lint-skill.mjs

# 數值驗算(秒級,能點名元素)
node scripts/verify.mjs --html scene.html --select "#bar b" --props transform,opacity --steps 31
node scripts/verify.mjs --html scene.html --select ".item" --idempotent
node scripts/verify.mjs --html scene.html --all --json

# 關鍵幀(審圖用,最快)
node scripts/render.mjs --html scene.html --still 0,0.5,1.5,2.9 --out out/stills

# 關鍵幀 + 構圖輔助線(100px 網格 / 80px 安全區 / 三分線 / 中心十字)
node scripts/render.mjs --html scene.html --still 1.6 --guides --out out/guides

# 整片 + 接觸表
node scripts/render.mjs --html scene.html --out out/v.mp4 --fps 30 --sheet

# 最終交付版開運動模糊(180° 快門 = 電影標準;渲染 ×4,只在定稿時用)
node scripts/render.mjs --html scene.html --out out/final.mp4 --fps 30 --motion-blur 180

# 有快速運動(角色動作、甩鏡、粒子)才上 60fps
node scripts/render.mjs --html scene.html --out out/final.mp4 --fps 60 --motion-blur 180

# 2x 超取樣(更銳,慢 3–4 倍)
node scripts/render.mjs --html scene.html --out out/v.mp4 --scale 2

# 透明背景:webp / apng / png 可靠
node scripts/render.mjs --html scene.html --out out/v.webp --format webp --alpha
node scripts/render.mjs --html scene.html --out out/v.apng --format apng --alpha

# webm 的 alpha 取決於 ffmpeg 構建。本機實測 VP8/VP9 都會降級成無 alpha,
# 腳本會在編碼後回讀首幀校驗 —— 沒有透明像素就報錯,並告訴你換哪個格式
node scripts/render.mjs --html scene.html --out out/v.webm --format webm --alpha

# 循環動圖
node scripts/render.mjs --html scene.html --out out/v.gif --format gif --fps 15

# 像素驗收
node scripts/audit.mjs --video out/v.mp4 --fps 30 --duration 3 --width 1920 --height 1080
node scripts/audit.mjs --video out/v.gif --loop           # 循環接縫檢查
node scripts/audit.mjs --video out/v.mp4 --json out/audit.json

render.mjs 參數:--html --out --fps --duration --width --height --scale --format(mp4|webm|gif|webp|apng|png) --still --sheet --alpha --file --keep-frames --chrome --check --quiet verify.mjs 參數:--html --select --props --steps --idempotent --all --json audit.mjs 參數:--video --fps --duration --width --height --loop --json ease.mjs 參數:cubic <x1> <y1> <x2> <y2> / spring <mass> <stiffness> <damping> [initialVelocity] / stagger <count> <duration> [overlap] / contrast <bg> <fg> / ramp <bg> <steps> / css-linear [--preset name] / presets rigcheck.mjs 參數:--rig <file> [--ref <file>] [--pose <json>] [--assert]

相關技能