GPT Hand Drawing Skill for Codex
建立一個能運作的動畫專案,並輸出要求的 MP4 或循環動畫。影格是時間的確定性函數,由 p5.brush 在 Chrome 中繪製,再由 FFmpeg 編碼。無需 Claude 執行環境、付費 API 或圖像生成模型。Clawd 是一個可選的內建角色;請遵循使用者選擇的角色與風格。
開始一個專案
從載入的 SKILL.md 所在位置解析此技能目錄。不要硬編碼一個 Claude 目錄。執行:
python "<skill-dir>/scripts/new_project.py" "<project-dir>"
跨平台初始化器會複製 template/、中斷示範連線、使用 npm ci 安裝鎖定的依賴項,並回報工具。僅在示範或引擎檢查時使用 --keep-demo,僅在建立支架時使用 --skip-install,或當 Node 可用但 npm 不在 PATH 上時使用 --npm-cli /path/to/npm-cli.js。NPM_CLI_JS 是等效的環境變數覆寫。它不會覆寫非空目錄。
在設計之前完整閱讀生成的 ANIMATION_GUIDE.md。使用可用的圖片檢視器(例如透過執行工具使用 view_image)檢查 docs/emotions.jpg 和 docs/views.jpg。指南包含引擎和角色 API。閱讀 references/music-video.md 以了解 MV 或長度超過約 20 秒的影片。閱讀 references/codex-runtime.md 以了解執行環境問題、平台指令和渲染器限制。
規劃與建置
使用使用者現有的選擇。只詢問對工作有實質影響的遺漏資訊;不要重複已回答的問題。對於 MV,收集音訊和時間來源。歌詞影片需要提供帶有 LRC 或等效時間戳記的歌詞;不要發明遺漏的歌詞。純音樂 MV 不需要 LRC。當創作方向遺漏時,可以提出一個可選的問題來涵蓋故事、氛圍、重複出現的意象和應避免的事項。如果使用者委託方向,則提出並執行一個連貫的詮釋。
使用 python "<skill-dir>/scripts/beat_grid.py" song.mp3 --from=0 --to=30 --lrc=song.lrc 測量音樂(需要 NumPy 和 FFmpeg)。將節奏視為估算值,並考慮倍速/半速的歧義;提供的音訊和時間戳記定義了時間。LRC 通常為歌詞行標記時間,因此卡拉 OK 的逐字填充是近似值,除非提供了逐字時間。不要聲稱強制對齊。
撰寫 STORYBOARD.md:一句話劇情、世界與色調變化、視覺主題、情感變化,以及包含時間範圍、動作、觀眾解讀和轉場的鏡頭。在有用時分享方向以供審閱;如果使用者要求繼續,請繼續。完整的實作範例在 examples/xiaozhen/STORYBOARD.md,其場景檔案位於同一目錄。
在 src/config.js 中設定 duration、bpm、offset 和可選的 audio。將場景實作為 src/scenes/ 中的 IIFE,註冊 shots([[t0, fn], ...]),並在 studio.html 中包含它們的腳本。首先阻擋可辨識的姿勢。在鏡頭間使用共同的角色群、色調和重複出現的主題。
渲染與檢查
從專案目錄中,在需要時渲染選定的影格、短動態條和細節:
node render.mjs --sheet=0.1,0.8,1.6,2.4 --cols=4 --w=480 --out=out/check/poses.jpg
node render.mjs --strip=2.1:2.6 --out=out/check/motion.jpg
node render.mjs --sheet=2.3 --crop=760,420,500,400 --w=500 --out=out/check/face.jpg
開啟生成的圖片。檢查每個鏡頭的事件與閱讀時間、臉部、道具接觸、角色大小、轉場和色調。檢查關鍵動作和接縫處的動態。修正觀察到的問題,然後再次檢查受影響的影格。樣式表驗證姿勢和連續性;檢查短編碼預覽以確保重要的動態時機。不要僅從原始碼聲稱進行了視覺審查。
使用測量到的毫秒/影格和影格數來估算最終成本。此桌面環境是本機的:建立影片的請求通常授權本地渲染。尊重明確的本機/雲端選擇;不要添加強制的位置批准關卡,或未經授權使用付費/雲端服務。如果工作實際上是遠端的,且渲染位置是重要的,請在完整渲染前澄清。如果使用者只要求原始碼或本機指令,則保留可運行的專案和預覽。
node render.mjs --clip --out=out/video.mp4
node render.mjs --frames --workers=4
node render.mjs --encode --audio=assets/song.mp3 --out=out/video.mp4
在影格渲染和編碼中使用相同的 --fps。影格檔案是可恢復的,但必須在重新渲染前移除已更改時間範圍的快取影格。--encode 從零開始消耗影格;從較晚時間開始的部分範圍需要其自己的 FFmpeg 起始編號和匹配的音訊修剪(請參閱執行環境參考)。
使用 ffprobe 驗證編碼後的持續時間、解析度、幀率和音訊,並檢查結果。回傳影片和專案路徑、測量到的效能,以及任何實際限制。將 node_modules、影格快取和暫存檔案保留在可攜帶的原始碼壓縮檔之外。
視覺與引擎不變性
- 使用
paint()和inkLine()繪製;使用glow()進行疊加發光。平面 2D 繪製的關鍵視圖、柔和色調、沸騰墨水。這些是風格預設值;明確的使用者要求優先。 - 避免不必要的文字;支援歌詞卡拉 OK 和要求的字體。在
timeline.js之後載入src/karaoke.js,填入LY,並將動作保持在其底部區域之上。驗證實際字體和中文字元。 - 每個鏡頭都需要一個事件、原因與反應,以及可讀取的暫留意義。透過
emotions()動畫臉部,並透過feel()動畫閒置狀態。將轉場融入故事,並在適當時將結尾與開頭連接起來。 - 每個影格都是
t的純函數:沒有累積模擬、未設定種子的Math.random(),或對渲染順序的依賴。使用hash()進行穩定變化,並為每個獨立元素使用boilSeed(key)。 - 將輔助函數保留在場景 IIFE 中,以避免 p5 全域名稱衝突。防禦退化幾何和 NaN。使用前景影格遮罩門/窗內容;在近距離縮放下減少輪廓線條粗細。
- 效能取決於筆刷填充和筆畫。在放大規模前測量一些代表性影格;當 GPU 記憶體不足時減少過多的幾何體和工作執行緒數量。
--soft-gl是慢速的後備方案,不是預設的優化。 - 除非使用者明確要求代理,否則依序實作章節。平行渲染工作執行緒是渲染器的功能,不需要子代理。
來源與授權:references/upstream.md。在重新分發引擎或技能時,保留兩個捆綁的 MIT 聲明。