Communitygithub.com

gpt-hand-drawing-skill

使用內建的 p5.js/p5.brush 引擎、無頭 Chrome 和 FFmpeg 創建手繪水彩與墨水卡通影片、短動畫、音樂錄影帶、歌詞影片及動畫循環。

gpt-hand-drawing-skill 是什麼?

此技能允許開發者和 AI 代理在本地桌面上,透過 JavaScript 和 Python 程式碼生成手繪風格的動畫影片。它利用 p5.brush 在 Chrome 中繪製每一幀,並由 FFmpeg 編碼成 MP4,無需任何付費 API 或雲端圖像生成模型。支援平台包括 Codex,以及任何可執行 Node.js、Python 和 FFmpeg 的環境。技能包含完整的專案初始化腳本、場景規劃範本、節奏測量工具和渲染指令;透過「樣式表」(contact sheet) 和「動態條」(motion strip) 等機制進行逐幀檢驗,確保視覺連貫性。每個影格都是時間的純函數,避免累積模擬和隨機性,從而保證可重複性。此技能特別適合需要「手繪水彩與墨水」風格的作品,但不應用於一般的影片編輯或 Remotion 專案。

相容平台✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/chao69782/gpt-hand-drawing-skill/tree/HEAD

在你喜歡的 AI 中提問

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

說明文件

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 聲明。

相關技能