Communitygithub.com

Luan-vP/fire-sprites

將火舞表演者的影片轉換為遊戲就緒的精靈動畫。當有人擁有火舞旋轉、噴火、POI、棍杖、劍術或其他流動藝術表演(通常在夜間拍攝)的素材,並希望將表演者從背景中剪出,製作成精靈表、動畫動作或遊戲素材時使用。涵蓋場景選擇、跟隨表演者修剪、背景移除(分離身體與火焰圖層)以及打包;並可銜接至 fire-sprites-retro 以獲得 8 位元風格。

fire-sprites 是什麼?

此技能旨在將火舞表演者的原始影片轉換為可用於遊戲的逐格動畫精靈。它提供了一條完整的自動化流程,包括影片匯入、分析可用片段、透過並行子代理識別動作、讓表演者自行修剪與選擇最佳片段,最終渲染並打包成精靈表(sprite sheets)及遊戲引擎可直接使用的 atlas.json。其核心技術在於將表演者的身體與火焰分離為獨立圖層,以便在遊戲中實現疊加的發光效果。該技能支援 Apple Silicon (MPS) 與 NVIDIA (CUDA) 等 GPU 加速,並依賴 ffmpeg 和自訂 Python 工具鏈。它要求使用者提供高品質的原始影片(建議 4K、10-bit、50 fps),並強烈建議使用 GPU 以獲得合理的渲染速度(M2 Max 上約每幀 3 秒)。最終輸出包括經過篩選的動作剪輯、預覽圖、一個基於 HTML 的審閱介面,以及包含所有元數據的 atlas.json。此技能也特別強調誠實回報限制(如可用片段長度、肢體裁切問題),並嚴格遵循不公開表演者素材的倫理規則。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Luan-vP/fire-sprite-kit/tree/HEAD/skills/fire-sprites

在你喜歡的 AI 中提問

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

說明文件

火舞表演影片轉為精靈動畫

您正在引導一位表演者,從原始影片一路製作成他們可以在遊戲中使用的精靈表。表演者熟悉自己的演出;您負責操作工具。請在兩個關鍵環節讓他們參與判斷(選擇哪些動作,以及每個動作的起點與終點),其餘部分由您自行完成。

所有工具都位於此工具包的 tools/ 資料夾中(相對於此檔案向上兩層)。稱之為 $KIT。每個工具都在您為此表演者建立的專案目錄內執行;原始影片會被引用,但絕不複製。

在開始之前,請先閱讀 references/how-it-works.md 一次。它說明了整個流程所依賴的三個核心概念:分離身體與火焰圖層、曝光處理、以及錨定腳部的標準化。

0. 環境設定(每台機器只需執行一次)

cd $KIT && python3 -m venv .venv && .venv/bin/pip install -r requirements.txt

請使用適用於該機器的原生 Python 版本(在 Apple Silicon 上,x86 的 Python 會靜默安裝僅支援 CPU 的舊版 PyTorch)。必須在 PATH 環境變數中包含 ffmpeg 和 ffprobe。強烈建議使用 GPU(Apple MPS 或 CUDA):在 M2 Max 上,渲染成本約為每輸出幀 3 秒。模型權重將在首次使用時下載。

下文中的 py 代表 $KIT/.venv/bin/python,且命令皆從專案目錄下執行。

1. 要求正確的影片素材

請向表演者索取原始攝影機檔案,而非經剪輯或匯出至社交媒體的版本。檢查他們所指派的資料夾:一個 4K、10-bit、50 fps 的原始檔經常就放在一個 720p 的最終剪輯檔旁邊,而下游的所有處理都從原始檔開始效果更好。同時詢問是否有他們在點火前走路或站著的影片:火舞表演很少包含清晰的走路循環,而遊戲需要走路動畫。

mkdir -p ~/sprite-projects/NAME && cd ~/sprite-projects/NAME
py $KIT/tools/ingest.py main "/path/to/original.mov"      # 對其他片段重複執行並使用不同名稱

閱讀 ingest 的輸出內容。它會測量真實的黑電平(檔案標籤的範圍標記不可靠),並對 8-bit 來源、低解析度和可變影格率(VFR)發出警告。可變影格率必須先修正(重新編碼為固定影格率),否則代理檔與原始檔之間的幀數會出現偏移。

2. 尋找可用素材

py $KIT/tools/pose_pass.py main                             # 速度較慢:每秒約處理 15 個代理幀
py $KIT/tools/find_segments.py main --strips                # 如果畫面中有衣著人群,請加上 --performer skin
py $KIT/tools/find_bursts.py main                           # 根據亮度尋找火焰噴發
  • find_segments 會保留整個身體在畫面內且保持直立的片段。預計只有一部分素材符合條件:手持攝影機經常會裁切到表演者的腳。這是正常現象;請告知表演者符合條件的片段數量。
  • 請您親自查看幾個 strips/*.jpg 檔案。如果它們追蹤到錯誤的人,請切換為 --performer 模式。
  • 查看 bursts/main.jpg。僅保留真正的火焰噴發,然後執行 py $KIT/tools/catalog.py add-bursts main(並從 catalog/selected.json 中刪除任何錯誤的條目)。火焰噴發是透過這種方式發現的,因為基於姿勢的搜尋會排除過曝的畫面。

3. 編目動作(使用子代理)

py $KIT/tools/catalog.py batches 5

將每個批次分配給一個子代理,使用 references/catalog-prompt.md 中的提示(填入批次編號並用一句話描述表演者,以便審閱者能排除錯誤的人)。他們會讀取標有幀號的影片片段,並寫入 catalog/outK.json。這是藉助並行代理效益最大的步驟:它純粹是視覺辨識,而且每個批次之間相互獨立。然後執行:

py $KIT/tools/catalog.py select            # 篩選出品質 >= 4 的項目,以及評分為 3 的走路/轉彎/旋轉/打擊動作
py $KIT/tools/catalog.py list

直接告訴表演者找到了什麼、沒找到什麼(例如:「13 個待機動作,8 個旋轉,但只有一個真正的走路動作,來自點火前的那段影片」)。

4. 表演者修剪與選擇

py $KIT/tools/make_trim.py                 # 為每個動作產生一段上下文片段 + trim.html
open trim.html

審閱者設定的範圍通常偏緊;實際的動作需要留出前後的緩衝空間。在 trim.html 中,表演者可以在前後幾秒的周圍素材上拖放每個動作的開始與結束點,標記為保留或刪除,並從頁面底部的方塊中複製清單。請他們將清單貼給您。該頁面會將狀態儲存在他們的瀏覽器中,因此您無法自行讀取。將貼上的文字儲存至檔案,然後執行:

py $KIT/tools/catalog.py apply-trim kept.txt

5. 渲染、打包、審閱

py $KIT/tools/render_move.py --kept        # 長時間執行:請在背景執行
py $KIT/tools/pack.py --kept
open review.html

在回報之前,請親自檢查幾個 moves/NAME/preview.jpg 檔案。需要檢查並明確指出的事項:

  • 有其他人物被合併進遮罩中(若該動作沒有道具,請在 catalog/selected.json 中將該動作設為 "gate": true,然後使用 --force 重新渲染);
  • 火焰圖層中出現了被火光照射到的牆壁;
  • 腳或頭部被裁切:render_move 會輸出每個範圍中整個身體在畫面內的比例。過長的修剪常常會導致表演者離開畫面的鏡頭被包含進來。

review.html 會播放每個動作,並可切換背景與圖層,包括「身體 + 疊加火焰發光」,這是遊戲應用的繪製方式。atlas.json 包含每個動作的影格網格、fps、腳部錨點以及來源範圍。

6. 可選:8 位元風格

如果他們想要復古風格,請使用 fire-sprites-retro 技能。

此工作的誠實規則

  • 回報數字與限制,而非僅報喜不報憂:有多少秒的素材可用、哪些動作的肢體被裁切、哪些火焰圖層包含了牆壁。
  • 素材本身設定了嚴格的限制。一團離開攝影機畫面的火焰雲會產生平直的邊緣;過曝的火焰則沒有內部紋理可供還原。請直接說明情況,而不是承諾可以修復。
  • 切勿將表演者的影片、姓名或渲染完成的精靈公開展示在任何地方。除非表演者另有要求,否則所有輸出都保留在專案目錄中。

請參閱 references/troubleshooting.md 以了解實務上常見的問題以及解決方法。

相關技能