圖片轉像素動畫
結果必須忠於原始來源:修復因縮小至像素尺寸所造成的損壞,切勿憑空增添細節。在動畫中,最大的敵人是破圖:任何跳動、撕裂、突然出現或閃爍的像素。Claude 無法觀看 GIF,因此每次展示前都必須經過量化的檢查,絕不能僅憑「靜態看來沒問題」。
如果使用者在 CLAUDE.md 或其指向的檔案中保留了像素藝術偏好設定,請先讀取這些設定;它們會覆蓋此處的預設值。需要 Aseprite MCP:references/aseprite-mcp.md。在進入相關階段時請閱讀:references/still-recipe.md、references/motion-and-breaks.md。
工作流程
每一次提交檢查都是一則訊息:一張並排顯示的圖片(來源 | 修改前 | 修改後,或是一張 GIF 加上裁切過的翻頁書),並附帶一個問題。在每次修改前,將當前檔案複製為 _vN,以便在該輪被拒絕時可以從該還原點恢復。每一輪只做要求的那項修改,不做其他任何事。
- 簡報。 在規劃前詢問需求:哪些部分會移動、移動幅度與速度、哪些部分保持靜止、哪些部分需要保護。撰寫一份簡短的規劃檔案(約半頁),並獲得同意。使用者核准計畫後即完成此步驟。
- 來源。 裁切或調整原始圖片大小,使其尺寸恰好為目標精靈的 3 倍(約 200-260 像素寬)。腳本均假設為 3 倍。
- 靜態圖(
1_still.lua,然後使用2_local_rerender.lua、3_join_outline.lua進行修正)。根據 still-recipe.md 為此圖片測量參數。按順序提交檢查:手部、臉部與眼睛、輪廓、金屬與背景。當每個部分都獲核准且靜態圖儲存為*_still_FINAL時即完成。 - 眨眼姿勢(
4_blink_poses.lua,在 14 倍縮放下手動描繪眼睛範圍)。在一次提交檢查中並排顯示所有四個姿勢以及一張眨眼 GIF,建置方式請參考 motion-and-breaks.md。核准後即完成。 - 動畫(
5_animation_frames.lua)。根據靜態圖的測量結果填入其 SETTINGS 區塊,先以BF_ZERO = true執行(必須改變 0 像素),然後執行正式執行,接著執行6_deflicker_metrics.lua。通過以下檢查後,顯示完整 GIF 以及移動部分的裁切翻頁書。 - 效果(
8_effects.lua,僅限顏色,在去閃爍之後)。檢查後展示。 - 附加項目一次處理一個要求(手臂、水等),每個要求都有各自的提交檢查。
- 最終完成。 複製到
*_FINAL(.aseprite+ 3 倍 GIF),保留先前的最終版本。
每次動畫提交檢查前的檢查項目
| 檢查項目 | 通過條件 | 位置 |
|---|---|---|
| 零偏移渲染等於姿勢 | 使用 BF_ZERO 時改變 0 像素 | 5 |
| 剛體部分(手部)精準 | 每幀的方框,經其整數像素抬升量位移後,等於靜態圖:0 像素 | 自訂 Lua 比較 |
| 單幀閃爍(A→B→A) | 眨眼與效果之外無此現象 | 6 會列印出來 |
| 跳動 | 步驟幀列於 BA_STEPS 中排除;其他每幀改變的像素數約 ≤ 2 倍中位數,且任何超過該值的幀都有命名的原因 | 6 |
| 熱力圖 | 輪廓、背帶、睫毛、眼睛上無紅色(每循環 ≥ 8 次變化) | 7_flicker_heatmap.lua |
| 效果 | 每個效果像素至少持續 2 幀;改變的像素數大於 0(弱混合可能跳回相同的調色板顏色) | 8 會列印計數 |
| 閉眼 | 閉眼幀上無虹膜顏色殘留 | 使用 view_sprite 在 12 倍縮放下 |
| 翻頁書 | 手部、臉部及每個移動邊緣的 8-16 幀,在 6 倍以上放大時看起來連續 | view_sprite 區域 + 幀 |
腳本(scripts/)
每個腳本都需要先設定 PA_DIR(專案資料夾,結尾為路徑分隔符號:Windows 用 \,macOS 用 /)和 PA_SRC(來源圖片檔名),以及其標頭中列出的全域變數。透過 run_lua_script 使用簡短的啟動器來執行它們;<skill> 是此技能的基礎目錄,在技能載入時提供:
PA_DIR, PA_SRC = [[/path/to/project/]], "reference.jpg"
BF_POSES, BF_OUT, BF_PUSH = "blink_poses.aseprite", "frames", true
dofile([[<skill>/scripts/5_animation_frames.lua]])
| 腳本 | 功能 |
|---|---|
1_still.lua | 3x3 保留線條的縮小、k-means 調色板 + 強調色、雀斑處理、孤立點合併 |
2_local_rerender.lua | 以不同線條閾值或額外顏色(手部、嘴唇)重新渲染方框 |
3_join_outline.lua | 在原始來源有細線處連接虛線輪廓 |
4_blink_poses.lua | 睜眼、半閉、接近閉合、閉眼姿勢(檔案中的眼睛範圍因圖片而異) |
5_animation_frames.lua | 所有幀;每個座標都存在於其 SETTINGS 區塊中(包含範例值) |
6_deflicker_metrics.lua | 去閃爍、閃爍偵測、跳動檢查(BA_SKIP 剛體方框,BA_STEPS 步驟幀) |
7_flicker_heatmap.lua | 熱力圖 PNG |
8_effects.lua | 壓縮光線、閃光、海上閃爍、沙地閃光(每個圖像皆有 SETTINGS 區塊) |
checkin_sheet.lua | 來源 / 修改前 / 修改後比對表(針對特定區域) |
example_metal_rerender.lua | 僅供參考範例:使用來自原始來源的陰影層重新渲染金屬 |
5_animation_frames.lua 存放了目前處理過的動畫類型(呼吸帶、軟體圓頂、搖擺方框、剛體整數像素推擠、肢體分段、海浪)。若遇到具有不同移動部分的新圖片,則需在其中新增一個欄位。