Communitygithub.com

motionproof

直接建構、驗證動態圖像影片(短影片、宣傳片、產品廣告、品牌片頭、動態字體、動畫廣告),確保作品看起來像出自人類設計之手,並通過可量測的檢查。

motionproof 是什麼?

motionproof 是一個嚴謹的動態圖像專案建構與驗證工具,專為 AI 代理(如 Claude Code、Cursor、Codex)設計。它強制執行一套「五條規則」工作流程,確保每個影片都圍繞一個品牌擁有的獨特想法(第一條規則)、每個節拍都讓觀眾相信某件事(第二條規則),並且從不重複品牌近期影片的任何組合(第三條規則)。支援純 HTML、HyperFrames 和 Remotion 三種建構方式,並透過多個自動化腳本(`doctor.mjs`, `render.mjs`, `probe.mjs`, `review.py`, `master.py`, `ledger.py`)進行機器檢查:包含可讀性、對比度、平台安全區域、閱讀時間、靜音時段、結尾、閃爍頻率、音量等。所有檢查結果必須以數字形式記錄在 `NOTE.md` 中,取代主觀的「好」或「壞」描述。此工具特別適合用於任何需要製作、規劃、分鏡、修復、審查或評論動態影片或社群媒體影片的請求,支援各種寬高比。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/producoestiagopaulino-source/motionproof/tree/HEAD

在你喜歡的 AI 中提問

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

說明文件

motionproof 是做什麼的?

您是導演、設計師,也是最終檢查作品的人。您決定影片要讓觀眾相信什麼,您建構它,然後像陌生人一樣去測量它。腳本跑出的數字,比您對畫面的印象更有分量。下方 SKILL 指的是包含此檔案的資料夾。

指令適用於任何 shell。在 Windows 上,請使用 python(或 py -3)來代替 python;包含空格的路徑請用引號括起來。PowerShell 沒有 &&:請一次執行一行指令。

五條規則

  1. 一個品牌擁有的想法。 蓋住 logo:如果競爭對手也能播出同樣的影片,請重新開始。這個想法必須來自品牌自身的素材(其產品、其姿態、其工作、其場所),絕不能來自其名稱的第一個聯想。
  2. 每個節拍都要買一個信念。 為每個節拍寫下「在這個節拍之後,觀眾相信了 ___」。如果您填不了這個空白,請刪除這個節拍。先展示正在發生的事情,然後再說出來,絕對不能只說出來。
  3. 絕不重複同樣的影片。 在您開始分鏡之前,先執行 Ledger。重複使用近期影片的音軌、概念、結尾,或一半以上的軸線,都必須拒絕。
  4. 先測量,再判斷。 執行腳本;在 NOTE.md 中引用它們的數字。任何腳本可以測量的項目都是一道門檻。腳本無法測量的項目,您要仔細看過,並且記錄您已經看過了。
  5. 在手機上清晰可讀。 文字要夠大、對比要夠強、落在平台的安全區域內、並且在螢幕上停留足夠長的時間讓觀眾閱讀。直式是社群媒體的預設方向,而不是事後才想到的。

工作流程

0. 環境檢查(10 秒)

node "SKILL/scripts/doctor.mjs"

如果缺少 ffmpeg、Node 版本低於 22 或剩餘空間少於 20 GB,則會停止。僅在製作 HTML 影片時才需要瀏覽器(Chrome 或 Edge)。

1. 簡報

用四行文字書寫:誰在看、在哪裡看(平台和寬高比)、他們看完後應該做什麼、他們應該有什麼感覺。接著是這部影片要傳達的唯一真實事物:一個真實的功能、一個真實的結果、一個真實的時刻。對於常規疑問,請直接陳述假設,不要停下來詢問;只有在簡報確實模糊不清時(哪個品牌、哪個平台、哪個優惠),才需要提問。

2. 三個想法,然後選一個

寫下三個不同類型的想法(請參閱 references/direction.md:記錄單一任務的紀錄片、一個單一的長鏡頭、倒數計時、正在建構的圖表、一個物體的旅程、前後對比的匹配剪輯,以及更多)。對每一個進行「蓋住 logo」測試。選出一個,並用一行文字說明為什麼選它。

3. Ledger

python "SKILL/scripts/ledger.py" suggest --brand "<brand>"
python "SKILL/scripts/ledger.py" check --brand "<brand>" --concept <x> --opening <x> --transition <x> --camera <x> --type <x> --palette <x> --texture <x> --track <x> --exit <x>

如果 exit code 為 1,表示這個組合重複了近期或已被拒絕的影片:請修改它所標示的軸線。Ledger 存在於專案中(motion-ledger.jsonl,或 $MOTIONPROOF_LEDGER)。如果專案本身已經維護了自己的過去影片庫,也請讀取它。

4. 分鏡表(STORYBOARD.md)

格式和安全區域預設值(請參閱 references/formats.md)、每一幕的地面/光線/質感、英雄時刻(值得截圖的畫面),以及節拍表:以影格為單位的時間、角色(鉤子、轉折、證明、收尾)、觀眾在該節拍之後相信什麼、什麼在動、入場和出場曲線(請參閱 references/motion-catalog.md)、它如何交接到下一個節拍,以及螢幕上的文字及其最低閱讀時間(0.5 秒 + 字元數 / 17)。如果一個節拍的文字無法在分配的時間內顯示完畢,請減少文字,而不是增加時間。

5. 先建構最難的節拍

選擇轉接器(請參閱 references/adapters.md):

  • 純 HTML: 將 templates/film.html 和 templates/kit.js 複製到影片資料夾中。
  • HyperFrames: 保持其組成;腳本驅動 window.__timelines。
  • Remotion: 將 adapters/remotion/ 複製到 src/ 中;使用 ease()、dur()、safeBox()、readingFrames()、<SafeGuide/>。

在建立其餘部分之前,先建構英雄時刻及其最困難的轉場,渲染靜止畫面並仔細檢查:

node "SKILL/scripts/render.mjs" film/index.html --still 0.5,2.2,4.0 --out film/stills      (HTML / HyperFrames)
npx remotion still <Comp> film/stills/f60.png --frame=60                                  (Remotion)

6. 草稿渲染與檢查

node "SKILL/scripts/render.mjs" film/index.html film/draft.mp4 --scale 0.5
node "SKILL/scripts/probe.mjs" film/index.html --zones reels
python "SKILL/scripts/review.py" film/draft.mp4 --zones reels --expect <seconds> --exit-required

probe.mjs 讀取即時 DOM(HTML 和 HyperFrames):L1 大小、L2 對比度、L3 安全區域、L4 被裁切的文字、L5 閱讀時間;它還會對簡報投影片風格發出警告(W3 踢腳線搭配標題、W4 投影片版面、W5 鍵入標題、W6 進度條、W7 庫存 UI 卡片)。當簡報要求的是電影感而非介面感時,請加上 --strict-style;一個作為核心想法的樣式可以加上 data-allow-<name> 或 data-ui,並在 NOTE.md 中註明一行(表格請參閱 references/review.md)。review.py 讀取任何 MP4 的像素(也支援 Remotion 和編輯過的檔案):R1 渲染、R2 靜音時段、R3 結尾、R4 閃爍、R5 安全區域像素、R6 聲音。開啟審查資料夾中的 sheet.jpg:紅色條帶是平台邊界。在評判任何內容之前,先用一句話描述每個 sheet 畫面(畫面上有什麼、眼睛的視線往哪裡去)。

按此順序修復:不真實或有問題的內容、核心想法、節拍之間的交接、層級和比例、時機、表面、聲音。FAIL(失敗)是要修復的,而不是爭論的。WARN(警告)是要仔細檢查的,然後要嘛修復,要嘛在 NOTE.md 中解釋。

7. 音效

節拍網格:python "SKILL/scripts/beats.py" grid --bpm <bpm> --fps 30 --duration <s> 會給出用於剪輯和重拍的節拍影格。如果環境中有可用的音效工具(例如音效庫、音訊分析工具),請用它來挑選和放置重音。在大重音之前留白;在出現閱讀文字時將音樂音量拉低。然後:

python "SKILL/scripts/master.py" film/final-raw.mp4 film/final.mp4 --target reels --fade 1.0

8. 最終檢查、備註、Ledger

python "SKILL/scripts/review.py" film/final.mp4 --zones reels --target reels --expect <s> --expect-audio --exit-required --fade-required
python "SKILL/scripts/beats.py" check --bpm <bpm> --report film/final-review/report.json
python "SKILL/scripts/ledger.py" add --brand "<brand>" --film <name> <與步驟 3 相同的軸線>

撰寫 NOTE.md:核心想法及其理由;每個節拍及其買到的信念;哪些是真實的、哪些是示意性的;從 probe.mjs 和 review.py 複製過來的門檻數值;一句話的畫面描述;您仍想改進的地方。絕對不要寫「這部影片很好」:要寫您檢查了什麼。當觀眾做出反應時,記錄下來:ledger.py verdict --film <name> --verdict approved|rejected --note "<他們的評論>"。一個被拒絕的組合將被禁止出現在所有未來的影片中。

永不交付

  • 沒有人看過的影片,或者未執行腳本就直接聲稱通過門檻。
  • 文字落在平台的介面之下、被畫面邊緣裁切、小於短邊的 3.1%、對比度低於 4.5:1,或者在能被閱讀之前就消失了。
  • 任何一秒鐘內超過三次閃爍。
  • 一個完成的影格停留超過結束停留的限制;中間出現定格畫面;一個只是停下來而沒有動作的結尾(請使用退場動作和聲音淡出)。
  • 與品牌上一部影片相同的音軌、概念或結尾。
  • 將頁面 chrome 元素作為裝飾:角落標籤、「01 / 04」計數器、時間碼、進度條。只有在這些元素本身就是核心想法時(例如控制室、倒數計時)才允許:此時請標記為 data-diegetic(如果是真實產品螢幕則用 data-ui),並在 NOTE.md 中說明原因。
  • 虛構的數字、見證或介面,並將其呈現為真實。

檔案

路徑說明
references/direction.md簡報、想法類型、節拍及其購買的信念、交接、葡萄牙語文案備註
references/motion-catalog.md曲線、持續時間、交錯、停留、如何選擇
references/formats.md寬高比、安全區域、每種格式的字體大小
references/sound.md音樂網格、重音、音量目標、淡出
references/review.md每道門檻、其編號、它無法看到的項目
references/adapters.mdHTML、HyperFrames 和 Remotion 的約定
data/*.json區域、音量目標、動作 token、Ledger 詞彙表(請編輯這些檔案,而不是腳本)
scripts/doctor、render、probe、review、master、beats、ledger
templates/film.html 和無依賴的 kit.js 執行環境
adapters/Remotion 輔助函式庫和 HyperFrames 備註

相關技能