Communitygithub.com

timeqsz/motion-atoms

根據描述生成、組合和修改可運行的動效;也可拆解參考影片中的動作、節奏、層級和轉場,映射到 MotionFlux 原子與組合並說明復現邊界。適用於網頁、簡報和影片中的文字、圖形、循環與質感,支援單項能力查詢和驗證交付。提供動效層,不替代整片製作或通用影片內容總結。

motion-atoms 是什麼?

Motion Atoms 是一套專為 AI Agent 設計的動效開發工具,讓 Agent 能夠根據自然語言描述生成、組合與修改二維動效,並從參考影片中拆解可復用的動作與組合。它包含 53 個二維原子(分屬 8 族),以及對應的驗證器、渲染工具與 CLI 命令,全部以相對路徑隨套件提供,無需依賴線上網站、原始碼倉庫或 npm 安裝。Agent 負責理解用途與編排,原子與工具負責執行,使用者不必預先挑選效果或記憶原子名稱。支援的製作流程包括:從描述生成動效、修改現有效果、拆解影片中的動作與節奏、導出獨立預覽與可編輯場景,以及修復卡頓、偏移、遮擋等常見問題。本 Skill 明確定位為動效層,不替代整片製作或通用影片內容總結,並清楚劃分能力邊界:僅處理二維文字與路徑節點,不包含圖片、影片、音訊或三維原子,影片拆解由 Agent 使用宿主工具完成。

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

在你喜歡的 AI 中提問

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

說明文件

Motion Atoms

讓 Agent 按描述製作動效,也能從參考影片中拆出可復用的動作與組合。Agent 負責觀察、理解用途和編排,包內原子、驗證器與渲染工具負責執行;使用者不必先挑效果或記住原子名。發行包包含 53 個二維原子,分 8 族,與網站共用實作。使用相對路徑存取隨包資源,不依賴網站線上、原始碼倉庫或 npm 安裝。首次安裝見 安裝與環境;manifest.json 記錄本包版本、檔案與校驗值。

按任務讀,不要一次載入全部目錄

任務先讀再取用
按描述生成,或繼續修改現有效果生成與修改閉環意圖映射
拆解參考影片,或分析某個動作如何實現影片動效拆解按觀察結果查原子清單與用法,以 breakdown 截取原片;按動效類型分軌,軌道間清晰分隔,同軌多個無文字動作塊獨立高亮
二維文字、圖形、屬性動畫二維清單,只篩需要的族atoms/<ID>.md 與同名 .mjs;輸入輸出約定
導出二維素材檔案場景編排scripts/motion.mjs;精確欄位見 MotionSpec
修復卡頓、偏移、遮擋、不可讀時間與畫面檢查修復實際問題,再檢查受影響的幀與播放

製作時先明確宿主、畫幅、幀率、目標主體及交付物;拆解時先確認可觀看的影片、範圍與分析目的,保留源時間碼。沿用使用者已有決定。動效名稱、參數和行為以包內說明為準。

交付使用者要求的結果,不止推薦候選原子;已有結果的修改保留原始檔案,核對實際變更。二維 deliver 可打包獨立預覽、可編輯場景、資源與檢查報告;報告不會把數值校驗冒充視覺驗收。超出已實現能力時說明缺口,再用呼叫方的宿主實作,不能把相近效果包裝成已經滿足需求。

製作核心

  • 先有用途,再選動作。 組合展示一個明確的產品、事件或狀態變化;每個原子都要解釋得出作用。參考真實 PV 的主體、節奏和銜接,實際觀看後提煉方法,不照搬畫面,不用無關圖示、假控制項或裝飾運動湊數量。網站短篇約 5 秒、2–3 種原子;這不是所有影片的時長和數量限制。
  • 編排變化,不給海報掛特效。 先排好主次,再寫清楚入場、變化、落定和離場;動作之間有因果或視覺承接,關鍵變化一眼可見。各組採用適合主體的進出方式,文字停穩後留足閱讀時間;刪掉無用邊角小字。
  • 運動必須完整、連貫。 不提前截斷、不統一反向播放;接鏡兼顧位置、方向、速度和亮度。有限動作與連續循環分別設計,循環檢查真實首尾,不能用補幀或提高標稱幀率掩蓋停頓。
  • 主體作為整體。 圖像、字標、徽記共用正確的座標和樞軸;真實遮罩與繪製順序決定遮擋。入退場檢查整組文字和細節,不能只讓底板離開;在實際畫幅與顯示尺寸檢查對齊、清晰度和裁切。
  • 素材服務於動作。 選擇匹配用途、許可不可追溯的免費商用素材,按許可處理署名和原始檔案分發;別用同一素材鋪滿不同案例。控制素材載入體積;網站與宣傳片引用同一場景時同步素材和運動。
  • 以實際輸出驗收。 網頁檢查真實播放和目標尺寸;製作影片時先分鏡,再逐幀渲染、合成影片,抽查編碼後的入場/穩態/退場/接縫並完整播放。沒看過的部分不聲稱檢查通過;可播放結果與檢查範圍一起交付。具體技術檢查見 時間與畫面檢查。

二維:嵌入宿主渲染

只複製需要的 .mjs;需要繪製時再複製 atoms/draw.mjs。原子按顯式幀求值,不自帶播放器。宿主掌握繪製順序、座標與時間。八族各答一個問題:屬性(變什麼)、節奏(怎麼變)、循環(一直動)、編排(誰先誰後)、轉場(出現消失)、文字(字的動法)、質感(疊在上面)、生成(憑空產生)。

import move from './atoms/prop.move.mjs';
import spring from './atoms/timing.spring.mjs';
import breathe from './atoms/loop.breathe.mjs';
import { drawAtom } from './atoms/draw.mjs';

const subject = { points: [[-50,-50],[50,-50],[50,50],[-50,50]], closed: true, fill: true };
const curve = (t) => spring({ frame: t, durationFrames: 1 }).value;   // 節奏:只給曲線
function renderFrame(ctx, frame) {
  const shape = move({ frame, durationFrames: 30, subject, params: { fromPx: -200, toPx: 0 }, ease: curve });
  const breath = breathe({ frame, startFrame: 30, durationFrames: 90 });   // 循環:疊在上面
  drawAtom(ctx, { ...shape, scale: shape.scale * breath.scale }, { x: 320, y: 200, color: '#f4f1ea' });
}
  • 獨立函式的 params 可只傳改動項;MotionSpec clips 必須寫全參數。不要混用這兩種約定。
  • 同時組合先看角色與 writes:位移、角度相加,縮放、透明度、拉伸相乘,濾鏡依次拼接;編排原子返回 copies,宿主按副本的偏移和延遲各畫一次。一個主體的輪廓輸出不能靠物件展開疊加兩個 layers。
  • MotionSpec 裡寫同一屬性的屬性動畫不能時間重疊,可前後接力;前段終值與後段起值要相接。節奏、循環、編排和質感是疊加的。檔案匯出不會自動沿用網站的循環播放策略。
  • 圖形座標相對主體原點;文字位置為首行左側基線。裝置字型(system、mono)可直接使用,精確跨機字形才需固定字型資產。
  • 可執行最小範例:atoms/example.html,陣列 × 錯開 × 位移 × 彈簧。

二維:交付素材檔案

以下命令在解壓後的 motion-atoms/ 內執行;輸出寫入自己的工作目錄。匯出前按需檢測本機瀏覽器/FFmpeg,不在基礎檢索時要求這些工具。

node scripts/motion.mjs describe transition.slices
node scripts/motion.mjs scaffold transition.slices --out work/slices.scene.json --width 1920 --height 1080 --fps 30 --duration 60
node scripts/motion.mjs validate work/slices.scene.json
node scripts/motion.mjs frames work/slices.scene.json --out work/check --frames 0,20,40,59 --transparent
node scripts/motion.mjs render work/slices.scene.json --out work/slices.mov --transparent

多原子場景可直接用,例如:

node scripts/motion.mjs preview assets/examples/showcase.scene.json --out work/showcase.html
node scripts/motion.mjs breakdown assets/examples/showcase.scene.json --out work/showcase-breakdown.gif --title "片頭 · 原子拆解"

preview 是 HTML,不是影片。render 可輸出 MP4(不透明)、MOV / WebM(可透明);frames 輸出 PNG;breakdown 在畫面下方加一條條原子時間軸,輸出 GIF、MP4 或 WebM:輸入場景時說明自己做的動效,輸入拆解檔案時截取參考影片片段做拆解(見 影片動效拆解)。verified: true 只證明尺寸、幀數、時長等檔案檢查,不證明構圖、節奏或遮擋正確。交付前按 畫面檢查 看編碼結果與實際播放,並說明實際檢查範圍。回傳檔案路徑、場景路徑、幀率、時長和透明通道;這些素材沒有音軌。

能力邊界

  • 影片拆解由 Agent 使用宿主的播放、抽幀和聽音工具觀察完成;包內 CLI 沒有影片辨識命令,breakdown 按 Agent 寫好的拆解檔案截取原片片段,並在下方畫出原子時間軸。可以分析超出本包的動作,但必須區分直接可用、部分近似和宿主另做,不能從成片斷言原工程、外掛或精確參數;截取的原片只用於分析,不當作素材再發布。
  • 二維場景只有 text / path 節點,沒有圖片、影片、音訊、父子 group 或 z-index 欄位。屬性、曲線和副本輸出可由宿主套到圖片或影片上;幾何原子只處理折線圖形。宿主負責圖片與影片合成。
  • 轉場與質感可用於文字和圖形;文字的包圍盒按渲染時的實際字形測量。循環與節拍都不讀取音訊。
  • 預設範例與 scaffold 使用系統字型,包內不攜帶字庫。需要跨機一致時由宿主提供獲許可的固定字型,宣告路徑與哈希並檢查字形。
  • 目前沒有三維原子;三維場景由宿主自行實作。
  • 整片製作繼續使用呼叫方的分鏡、聲音、剪輯與交付流程;本 Skill 不強制使用某個宿主、視覺風格或統一轉場。

參考與致謝

本包所屬 MotionFlux 專案的早期動效索引構想參考了 Kazuki Akamine(赤嶺一希)的 Motion Periodic Table。感謝其對基礎動效整理與展示的啟發。MotionFlux 為獨立專案。

相關技能