程式繪製影片
此技能製作一個 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 永遠不會阻礙建置。它們描述節奏、色彩、同步與節拍,你需比對意圖卡進行閱讀。
工作流程
每個步驟都有一行報告,因此不能在不說明的情況下勾選。
- 如果對方分享了參考素材,先將其拆解。 影片剪輯、靜態圖片或 HTML 頁面都可以。閱讀
reference/references.md。報告其形式、功能、哪些差距可以填補,以及你取用了什麼、遺留了什麼。 - 寫下核心訊息與感受。 僅這兩行。報告它們。
- 完整觀看兩三部最接近的圖庫影片。 報告你從每部影片中學到了什麼,以及你不會複製什麼。
- 以靜態草稿構思三個不同的故事。 每個草稿是不同的發生事件,用一句話說明,而非同一想法搭配三種外觀。至少有一個應是觀眾可以沉浸的世界,而非圖表。使用引擎和印刷效果以最終外觀繪製每個草稿,絕不使用線框。草稿可以跳過缺陷檢查,但不能省略工藝。
assets/sketchcheck.py會判定平面草稿為不合格,若提供已核准影格作為--refs,也會判定複製的草稿。展示給目標對象,讓他們選擇或混合。報告每個故事的敘述。然後完成意圖卡。 - 如果有文字,撰寫文字。 在撰寫任何程式碼之前,用同一種語氣寫成一個段落,儲存為
piece.chain.txt。閱讀reference/story.md中的「讀起來像有聲音的文字」。報告該段落及其連接詞比率。 - 規劃。 依序排列節拍、每張畫面在一句話中的意義、顯示我們在哪裡的元素,以及結尾。報告規劃。規劃是計畫,而非合約。
- 建置頁面。 從
assets/engine.html開始,或依據下方合約自行撰寫頁面。在組合場景前,先單獨檢查每個場景。報告你在觀看後重繪了什麼。 - 製作聲音。 先撰寫旋律,放在
TUNE和SECTIONS中,然後為故事的轉折點加入四到八個重音。或者帶入你自己的piece.score.py、頁面產生的piece.wav,或靜音。報告score.py印出的樂譜,以及為什麼聲音符合意圖卡。 - 建置。
assets/build.sh piece.html out.mp4。在前面加上ROUGH=1可產生草稿,以便早期展示。報告數字。 - 驗證。 所有三個層次。報告每個層次。
- 作為新檔案交付。 絕不覆蓋上一次的建置結果。
一部影片中的兩種外觀
影片可以在兩個渲染器之間切換,例如孔版印刷場景與墨水帳本。為第二個渲染器提供自己的作用域,使用 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)。其紋理是修飾而非漸層的規則,以及形狀的填色與輪廓絕不能重合的規則,是解鎖此技能印刷外觀的關鍵。
好的標準
一位新觀眾看過一次後能複述,且複述的內容與核心訊息行一致。聯絡表的每個圖塊都是一張有意義的畫面。它可以與圖庫影片並列,而不會成為其中一部影片的複製品。最後一個影格為影片畫下句點。缺陷為零、意圖卡相符,而且你無論如何都會觀看它。