Communitygithub.com

KKcorps/code-film

製作一部短片,其中每個影格和每個聲音都由單一 HTML 頁面中的程式碼計算產生,完全不使用圖片、影片素材或音效樣本。

code-film 是什麼?

此技能可用來創建完全由程式碼驅動的動畫短片:每個影格、每個音效,全都來自單一 HTML 頁面的計算結果,無需任何外部圖片、影片剪輯或音效樣本。它支援多種風格(解說技術系統、音樂錄影帶、敘事影片、廣告、視覺詩)與多種手工質感(孔版印刷、紙拼貼、墨水、水彩、像素、藍圖、沙畫)。流程從撰寫意圖卡開始,接著依據一份包含 29 部廣受喜愛的程式繪製短片的圖庫進行判斷,最後驗證完成的 MP4 是否符合原始意圖。內建影格引擎(含孔版印刷機與動態效果)、計算產生的配樂、一鍵建置為 MP4,並進行缺陷、接縫、視覺與音效檢查。也可用來拆解參考素材(影片剪輯、靜態圖片或 HTML 頁面)。適用於需要動畫解說影片、程式繪製影片、音樂錄影帶、靜態圖像、孔版印刷風格或搭配質感效果,或希望比對/學習參考影片的場景。不適用於 YouTube 旁白教學影片(這應使用 lesson-film 技能),也不適用於頁面或文件內的動畫圖表。

相容平台✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/KKcorps/inkreel/tree/main/skills/code-film

在你喜歡的 AI 中提問

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

說明文件

程式繪製影片

此技能製作一個 HTML 頁面,用來繪製由 (f, seed) 決定的第 f 個影格、以相同方式計算生成的配樂,以及一個 MP4 檔案。影片的主題、外觀與動態方式完全由你決定。此技能包含三項要素:你首先寫下的意圖、你用以判斷的品味,以及用於確認最終影片是否符合意圖的檢查機制。

設定

在新機器上執行一次 bash assets/doctor.sh。它會檢查是否安裝了 Chrome(或 CHROME 環境變數指向的路徑)、Node 22 或更新版本、ffmpeg,以及帶有 numpy 和 Pillow 的 Python 3,並說明如何修復任何遺漏的項目。

1. 撰寫意圖

將 assets/intent.md 複製到頁面旁,命名為 piece.intent.md。首先填寫核心訊息與感受:一位新觀眾看過一次後能說出的重點,以及影片結束時的感受。在選定草稿前,先保留其他部分;因為先寫好的意圖卡能固定想法,後續的草稿只能改變其外觀。這就是帳本影片的三個草稿如何成為同一想法、三種外皮的過程。

選定草稿後,完成意圖卡。其中的「判斷」行說明我們遵循的內容、唯有這個主題才能提供的觀點、外觀及其原因、文字是否出現及出現方式、它從圖庫中學習哪些影片,以及結尾如何回應開端。「測量」行則給出長度、節奏、聲音與節拍。之後的每個選擇都服務於這張意圖卡。當工作顯示意圖卡有誤時,修改意圖卡並加以說明。

2. 以圖庫為判斷依據

reference/gallery.md 收錄了 29 部由 Claude 用程式繪製每個影格的影片,涵蓋音樂、解說、故事與實驗,並說明了備受喜愛的影片的共同點:

  • 有一個貫穿每個場景的元素。
  • 每張畫面都有意義,並非只為多樣性而存在。
  • 它從哪裡開始,就在哪裡結束,但已有所改變。
  • 有些東西顯示我們在哪裡:量表、計數器、時鐘。
  • 外觀是一種真實的材質,帶著其缺陷被使用,並為此故事而選擇。
  • 聲音與畫面是同一整體。
  • 文字稀少、大膽,且是世界的一部分。
  • 它有觀點與溫度。
  • 它和想法一樣簡短。

這些是判斷,而非規則。若意圖卡說明了原因,可以打破任何一條。reference/taste.md 收錄了技能作者 Kartik 在建置過程中所做的修正:這是你最初的品味,而非你的。當它們與圖庫不一致時,請說明並詢問影片的對象。

3. 驗證結果

在交付說明中報告所有三個層次。

  • 缺陷會阻礙建置。 頁面能解析、執行,並每次都繪製相同的影格。沒有影格閃爍或從剪接處跳出。混音音量介於 -28 到 -8 dBFS 之間,且無削波。check.py、seamcheck.py、verify.py 和 build.sh 強制執行這些條件。
  • 意圖被測量。 python3 assets/verify.py piece.mp4 會檢查意圖卡中的「測量」行。未符合表示影片或意圖卡有誤。修正其中之一並說明。
  • 觀看測試由你負責。 每次逐行通過所有數字後,影片仍可能不好。回答 verify.py 印出的五個問題:像新觀眾一樣複述、說出每個圖塊的名稱、關掉聲音觀看、與圖庫中的影片並排觀看、判斷最後一個影格。

lookcheck.py 和 soundcheck.py 永遠不會阻礙建置。它們描述節奏、色彩、同步與節拍,你需比對意圖卡進行閱讀。

工作流程

每個步驟都有一行報告,因此不能在不說明的情況下勾選。

  1. 如果對方分享了參考素材,先將其拆解。 影片剪輯、靜態圖片或 HTML 頁面都可以。閱讀 reference/references.md。報告其形式、功能、哪些差距可以填補,以及你取用了什麼、遺留了什麼。
  2. 寫下核心訊息與感受。 僅這兩行。報告它們。
  3. 完整觀看兩三部最接近的圖庫影片。 報告你從每部影片中學到了什麼,以及你不會複製什麼。
  4. 以靜態草稿構思三個不同的故事。 每個草稿是不同的發生事件,用一句話說明,而非同一想法搭配三種外觀。至少有一個應是觀眾可以沉浸的世界,而非圖表。使用引擎和印刷效果以最終外觀繪製每個草稿,絕不使用線框。草稿可以跳過缺陷檢查,但不能省略工藝。assets/sketchcheck.py 會判定平面草稿為不合格,若提供已核准影格作為 --refs,也會判定複製的草稿。展示給目標對象,讓他們選擇或混合。報告每個故事的敘述。然後完成意圖卡。
  5. 如果有文字,撰寫文字。 在撰寫任何程式碼之前,用同一種語氣寫成一個段落,儲存為 piece.chain.txt。閱讀 reference/story.md 中的「讀起來像有聲音的文字」。報告該段落及其連接詞比率。
  6. 規劃。 依序排列節拍、每張畫面在一句話中的意義、顯示我們在哪裡的元素,以及結尾。報告規劃。規劃是計畫,而非合約。
  7. 建置頁面。 從 assets/engine.html 開始,或依據下方合約自行撰寫頁面。在組合場景前,先單獨檢查每個場景。報告你在觀看後重繪了什麼。
  8. 製作聲音。 先撰寫旋律,放在 TUNE 和 SECTIONS 中,然後為故事的轉折點加入四到八個重音。或者帶入你自己的 piece.score.py、頁面產生的 piece.wav,或靜音。報告 score.py 印出的樂譜,以及為什麼聲音符合意圖卡。
  9. 建置。 assets/build.sh piece.html out.mp4。在前面加上 ROUGH=1 可產生草稿,以便早期展示。報告數字。
  10. 驗證。 所有三個層次。報告每個層次。
  11. 作為新檔案交付。 絕不覆蓋上一次的建置結果。

一部影片中的兩種外觀

影片可以在兩個渲染器之間切換,例如孔版印刷場景與墨水帳本。為第二個渲染器提供自己的作用域,使用 plate 選項 { raw: (ctx, u, f, size) => {} } 繪製其場景,並將其剪接點放入 EXTRA_CUTS。assets/examples/parcel42-day/ 正是這樣做的。它也是整個工作流程的標準範例,因此請閱讀其 README,並為方法而非外觀而閱讀。

頁面合約

任何符合此合約的頁面都可以建置和驗證。它設定 const FPS = n。在 ?capture=1 模式下,它將 window.__frames 設為影格數量,並將 window.__render(f) 設為每次以相同方式繪製第 f 個影格,然後將標題設為 capture ready N。其腳本的第一行將任何錯誤寫入 document.title,因此崩潰不會看起來像空白頁面。

基於引擎建置的頁面還可獲得 ?play=1、?f=N、?grid=1、?scene=id 和 ?cuts=1 功能,且 score.py 從 plate() 讀取其場景。

檔案

檔案說明
assets/intent.md意圖卡範本
assets/engine.html可選起點:影格格線、場景與鏡頭、場景庫、動態、孔版印刷機、手寫筆、三個示範世界
assets/score.py在頁面節拍網格上的計算樂譜,包含每個段落的調性、和聲、樂器組、搖擺感與結尾
assets/build.sh單一命令:閘門檢查、擷取、接縫檢查、樂譜、編碼、測量、驗證、確認
assets/verify.py將影片與其意圖卡比對,並檢查響度與削波,然後輸出觀看測試問題
assets/check.py頁面閘門檢查:解析、錯誤處理、模式、格線、渲染
assets/seamcheck.py閃爍、從剪接處跳出、動態內部的抖動、漂移的固定錨點
assets/sketchcheck.py故事草稿:非平面、非已核准影格的複製(--refs)、無禁止世界(--world)、無遺留的存根
assets/lookcheck.py、assets/soundcheck.py畫面與聲音的測量,需與意圖卡和圖庫比對
assets/printcheck.py檢查影格看起來是印刷還是計算產生的,與參考圖片比對。將寬影格置中裁切為正方形
assets/refpage.mjs拆解作為參考的 HTML 頁面:其調色盤、標記、圖層與音訊工具組在繪製時的狀態,以及一個 MP4 以便套用剪輯檢查
assets/capture.mjs透過 CDP 進行影格擷取。由 build.sh 呼叫
assets/capture-range.mjs、assets/capture-par.sh以任何寬度和高度在數個 Chrome 實例中同時擷取。適用於 16:9 及超過一分鐘的內容
assets/doctor.sh檢查機器是否就緒:Chrome、Node 22+、ffmpeg、numpy、Pillow
assets/examples/parcel42-day/已核准影片的原始碼,附有說明建置過程的 README
assets/example-print-still.html孔版印刷效果模型

何時閱讀什麼

每次呼叫時完整閱讀每個檔案。Codex 執行在單次呼叫中讀取三到四個技能檔案,受限於輸出上限。它會不知不覺地從讀取的中間遺失約 13k token,包括一半的 gallery.md。如果讀取顯示 token 被截斷,請再次單獨讀取該檔案。

  • 在撰寫意圖卡和展示任何內容之前,閱讀 reference/gallery.md,然後是 reference/taste.md。
  • 當對方分享參考影片剪輯、靜態圖片或 HTML 頁面時,閱讀 reference/references.md。
  • 當你規劃故事或撰寫說明文字時,閱讀 reference/story.md。
  • 當畫面與聲音共用一個節拍網格時,閱讀 reference/time.md。
  • 當你規劃轉場或鏡頭時,閱讀 reference/moves.md。
  • 當外觀是孔版印刷或任何印刷風格時,閱讀 reference/press.md,然後在調整紋理前閱讀 reference/surface.md。
  • 當你加入手寫字時,閱讀 reference/hand.md。
  • 當你製作聲音時,閱讀 reference/sound.md。
  • 當你建置時,閱讀 reference/export.md。
  • 當影片長度超過一分鐘時,閱讀 reference/export.md 的結尾部分。
  • 當影片是用於 YouTube 的旁白教學時,使用 lesson-film 技能,它基於此技能建置。
  • 陷阱:此技能到目前為止的每種失敗方式,按階段分類的清單。在意圖卡與草稿之前,以及展示任何內容之前,閱讀 reference/traps-story.md。在建置頁面之前,閱讀 reference/traps-page.md。當你規劃動態、鏡頭或節拍網格時,閱讀 reference/traps-motion.md。當外觀是印刷風格時,閱讀 reference/traps-print.md。當你製作聲音時,閱讀 reference/traps-sound.md。在第一次完整建置之前,閱讀 reference/traps-build.md。

修改此技能

陳述意圖與判斷,並檢查結果是否符合意圖。切勿將一部影片的風格變成規則:否則每個作品都會變成一個參考素材的複製品。一個教訓應歸入擁有它的唯一檔案,而其他每個檔案都用一行指向那裡。一部獲得核准的新影片應放入圖庫的「我們的作品」部分,並說明其成功的原因。

借用,並致謝

平填加裁切效果模型,以及 wob、crayon、hatch、grain、dotScreen 和 scribble 的形狀,來自 alesha-pro 的 hand-drawn-canvas-animation 技能(MIT 授權,github.com/alesha-pro/tools)。其紋理是修飾而非漸層的規則,以及形狀的填色與輪廓絕不能重合的規則,是解鎖此技能印刷外觀的關鍵。

好的標準

一位新觀眾看過一次後能複述,且複述的內容與核心訊息行一致。聯絡表的每個圖塊都是一張有意義的畫面。它可以與圖庫影片並列,而不會成為其中一部影片的複製品。最後一個影格為影片畫下句點。缺陷為零、意圖卡相符,而且你無論如何都會觀看它。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相關技能