Community影像github.com

MysteryGodzilla/live2d

從一張全身動畫繪圖快速產生可動的 Live2D 模型(.moc3 套件,包含物理、表情與動作),無需 Cubism Editor 與手動綁骨。

live2d 是什麼?

這是一套自動化管線,能將一張角色全身繪圖轉換為可供 AIRI、Open-LLM-VTuber 等應用程式載入的 Live2D 模型。此工具套件要求使用者依序執行步驟,並在每個階段檢查輸出結果,確保在進入下一步前修正任何問題。支援的步驟包括透過 Qwen Image 生成候選繪圖、去背、放大、分層、圖層修正、綁骨與建置,最後可在檢視器中驗證模型。主要平台為命令列(CLI),但也提供簡易的 GUI 介面。若使用者想建立 Live2D 模型、虛擬角色、VTuber 模型或綁骨,或想對已有模型進行修改(例如表情、動作、修復眼睛、下巴線條等),都可直接使用本工具。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/MysteryGodzilla/live2d/tree/HEAD

Installed? Explore more 影像 skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

在你喜歡的 AI 中提問

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

說明文件

從一張繪圖生成 Live2D 模型

此工具套件能將角色的一張全身繪圖轉換為 Live2D 模型,供 AIRI 或 Open-LLM-VTuber 等應用程式載入。腳本會自行處理大部分工作,您只需依序執行步驟,檢查每一步的結果,並在下一步建立在此結果之前修正任何偏差。一個早期未處理好的錯誤(例如圖層位置錯誤)會在後續步驟中導致更難追蹤的問題(例如腿部被外套遮擋)。

所有操作皆在專案目錄內透過一條命令完成:

python <此資料夾>/live2d.py <步驟> <名稱> ...

<名稱> 是角色的資料夾名稱。live2d.py 會自動為每個步驟選擇所需的 Python 版本,並印出實際執行的命令。請在處理第一個角色前完整閱讀此資料夾中的 README.md:其中有所有下載連結、設定檔、每個步驟的指令以及圖層修正對照表。本文件說明如何順利完成整個流程。

本工具也提供 GUI 介面供一般人使用(live2d.py gui:將相同的步驟顯示為按鈕),但 AI Agent 應使用命令列模式。

事前準備

  1. 執行 live2d.py check。它會顯示已安裝的項目以及每個步驟缺少的依賴。如果有缺少,請告知使用者缺少什麼以及從何處取得(請參考 README 中的「你需要什麼」)。下載檔案可能達數 GB:請先詢問使用者再開始下載。在尚未使用過此工具套件的專案中(check 顯示沒有 live2d-kit.json),請先在專案頂層目錄執行 live2d.py init。它會建立設定檔、外貌檔案以及此技能的指標,不會變更任何已存在的檔案。init --like <其他專案> 會從已有工具路徑設定的專案複製設定。
  2. 執行 live2d.py status <名稱>。它會標記已完成的步驟並提示下一個指令。當您再次處理某個角色時,請優先使用此指令,而不是根據檔案猜測進度。
  3. 在執行需要顯示卡資源的步驟(繪圖、去背、放大、分層)前,務必詢問使用者。這些步驟需要獨佔顯示卡,而使用者可能正在使用顯示卡執行其他任務。split 步驟在空閒顯示卡上每次約需 10 分鐘,若有任何其他程式佔用部分顯示卡資源,可能需要數小時:請事先告知使用者,並在背景執行。
  4. draw --runpod 會產生費用。僅在使用者明確要求時才使用。
  5. 只啟動和停止您自己啟動的服務。live2d.py comfy status 會顯示 ComfyUI 是否正在執行以及由誰啟動:是此專案啟動的,還是其他資料夾啟動的(如果是其他資料夾啟動的,那是別人的服務:可以使用,但不要停止它)。comfy stop 只會停止此專案中由 comfy start 啟動的 ComfyUI 實例。在繪圖、去背和放大步驟完成後,請停止您啟動的 ComfyUI。

步驟及每個步驟後應檢查的項目

步驟指令正確的判斷標準
繪圖comfy start,然後 draw <回合> --character <名稱> --seeds ...使用者挑選一張。向他們展示對照表。除非他們要求,否則不要代為挑選
挑選pick <名稱> <圖片>繪圖符合 README 中的「適合綁骨的繪圖」。如果不符(手臂貼在身體上、雙腿併攏、手中持有道具),請在繼續之前說明可能出現的問題
去背、放大cutout <名稱>,upscale <名稱>,comfy stopfull/cutout.png 顯示角色的完整輪廓且無背景。來自 draw 的繪圖已有透明度:pick 已執行去背,因此 cutout 不會執行任何操作,只需 upscale
分層split <名稱> body指令會印出角色的圖層。預計約 17 層:頭髮、臉部、眼睛、眉毛、鼻子、嘴巴、脖子、衣服、手臂、腿部、鞋子
檢查圖層layers check <名稱>計數結果應為數千像素的細線條。查看其儲存的圖片。大塊紅色區域表示某個圖層遮蓋了不該遮蓋的區域
頭部處理split <名稱> head,layers scale <名稱> 2,layers head ...,layers under <名稱> neck face再次執行 layers check:計數不應突然增加。臉部圖層應與繪圖中的臉部對齊
部位parts closed-eyes <名稱>,parts mouth <名稱>角色的圖層現在包含 eye_close 和 mouth_open。使用者喜歡哪種張嘴和臉紅風格由使用者決定:請執行 parts mouth-sheet <名稱> 和 parts blush-sheet <名稱>,向使用者展示兩張圖片,讓他們選擇一個編號(請參閱 README 的「嘴巴與臉紅」部分)。如果嘴巴太大、太小、太高、太低或傾斜,可以透過 --size、--down、--right 和 --turn 參數調整,首先對 mouth-sheet 執行以向使用者展示效果;臉紅的調整方式相同,參數為 --size、--in、--down 和 --turn。parts mouth-oh <名稱> 會為角色添加「O」型嘴,用於害怕或驚訝的表情。如果閉合的嘴巴太細或太淡看不清,請執行 parts mouth-line <名稱> --try 顯示重新繪製的版本,再執行 parts mouth-line <名稱> 完成,然後再次執行 parts mouth <名稱>
建置build <名稱>閱讀其輸出內容(如下所述)
檢視view,然後檢查對照表(如下所述)請參閱 README 中的「試用她的模型」清單

角色的描述來自專案的外貌檔案(check 會顯示其位置;README 的「外貌與風格」說明了其格式)。請在繪圖前於該檔案中撰寫或變更角色的外貌:這是唯一描述角色長相的地方,因此後續的回合和後續的 AI Agent 才能畫出同一個角色。外貌僅包含角色的頭髮、眼睛、體型和服裝。工具套件會自行添加構圖和姿勢,如果外貌描述重複這些內容或要求其他姿勢,反而會妨礙綁骨。draw ... --show 會顯示完整的提示詞而不實際繪圖:請在花費顯示卡資源執行繪圖回合前先閱讀。--look "..." 用於一次性需求。

分層完成後,請逐一檢視 <characters>/<名稱>/layers/full/parts/ 中的每個圖層圖片。您需要檢查三件事:一個圖層包含了兩個必須分開移動的部分(例如外套的前片和內側後片)、圖層順序錯誤、以及成對的部分(手臂、腿部、眼睛)被合併成一個形狀。README 的「修正圖層」說明了每種情況的處理方式。請將設定的原因記錄在角色的 live2d.json 檔案中的 "why" 欄位:後續處理的人無法得知您當時看到的狀況。

解讀建置輸出

  • head: her head turned -9.9 degrees ...:頭部被矯正了多少度。「No pair of eyes or brows」表示某個眼睛圖層沒有被分割成左右兩部分:請先修正該圖層。
  • head turn: 13_face_base as face; 16_accessory as glasses; ...:每個頭部零件被視為什麼類型。被誤判的零件會產生錯誤的動作:未標示為眼鏡的配件會從眼睛位置飄開。
  • body: her feet at ..., knees ..., hips ..., neck ...; 2 arms that bend, 2 legs that bend; ...:0 隻手臂或 0 條腿表示該對零件在圖層中被合併為一個形狀。腳部位置為 0.000 表示某個圖層底部存在一個孤立的像素。
  • hair: 6 sections that swing each by itself (...):頭髮被分割成多少區塊。只有前髮和後髮兩個區塊表示頭髮很窄,或其圖層是破碎的:這不算是錯誤。
  • in the texture at the head pass's own size: face, eyelash, ...:被放入紋理中並保留原始解析度的頭部零件。如果沒有這一行,表示角色沒有銳利副本:請執行 layers sharp <名稱> 從保留的頭部 PSD 建立。changed since the head pass 表示在頭部處理後被編輯過的頭部圖層,這些圖層會以影格大小使用:這是正確的,不是錯誤。

在不觀看螢幕的情況下檢查模型

啟動檢視器(live2d.py view,在背景執行),並在瀏覽器工具中開啟 http://127.0.0.1:8777/live2d/。該頁面提供了 window.sheets 物件,可以用來繪製帶有標籤的姿勢、動作影格和表情圖片,並存成可讀取的檔案。它會讀取渲染器的像素資料,因此即使在頁面隱藏時也能正確運作。隱藏頁面的螢幕截圖則不可靠:它會顯示過時的影格。

const u = "/live2d/models/akane-full/model/model.model3.json";
await sheets.poses([
  ["face", u, /face/i, 2.6, [["rest", {}], ["turn", {ParamAngleX: 30, ParamEyeBallX: 1}],
                              ["half shut", {ParamEyeLOpen: 0.5, ParamEyeROpen: 0.5}], ["tilt", {ParamAngleZ: -30}]]],
  ["body", u, [0.15, 0, 0.85, 1], 0, [["rest", {}], ["sway", {ParamBodyAngleX: 10}],
                                      ["arms", {ParamArmLA: 10, ParamArmLB: -10}], ["knee", {ParamLegLB: 10}]]],
], 200, 300);
await sheets.save("akane-check");                 // -> <out>/live2d/checks/akane-check.png
await sheets.expressions(u, ["(none)", "happy", "tired", "blushing", "angry", "scared"], /face/i, 1.6, 133, 170);
await sheets.save("akane-expressions");
await sheets.motion(u, "TapHead", /face/i, 1.6, 133, 170, 6, 13);
await sheets.save("akane-taphead");
sheets.done();

影格可以是 [x0, y0, x1, y1](以模型邊框的比例表示),也可以是包含縮放比例的繪製對象名稱模式(/face/i、/neck/i)。當您需要檢查間隙時,請傳入綠色背景(在 poses 的最後一個參數傳入 "#30c060"):間隙會顯示為綠色。

仔細查看圖片。請放大到可能出現問題的位置(下巴、腰部、眼睛),而不是根據全身縮圖來判斷:目前發現的大部分問題都只有幾個像素寬。檢查每個動作的兩個極端位置,以及兩個動作的組合(轉頭搭配視線移動、舉臂搭配彎曲),因為這些情況最容易導致零件分離。

當您向使用者展示結果時,請傳送圖片給他們,並清楚說明您檢查了什麼以及尚未檢查什麼。檢視器並非最終應用程式:如果您還沒有在應用程式中看過角色,請告知使用者。

當出現問題時

  1. 找出是哪個零件有問題。使用滑桿固定姿勢,或製作一個放大該區域的對照表。
  2. 判斷問題所在。如果零件的圖片錯誤、被截斷、順序錯誤或包含了其他零件所屬的內容,則問題出在圖層。如果圖層正確但移動時出現異常,則問題出在綁骨。
  3. 查閱 references/problems.md。其中列出了過去出現過的問題、原因以及修正方法。
  4. 圖層問題可以使用 layers 指令或在角色的 live2d.json 中修正,然後重新執行 build。
  5. 如果某個綁骨問題是所有角色都可能出現的,則應在 scripts/rig.py 中修正,其中的每個數字和表格都有註釋說明其設定原因。當您修改時,請一併加入您的理由。如果某個問題只出現在特定角色上,則應在角色的 live2d.json 中設定,由 rig.py 讀取。
  6. 重新建置、重新載入頁面、再次製作相同的對照表,然後進行比較。重新載入非常重要:頁面會保留已載入的模型,因此未重新載入就製作的對照表會顯示建置前的舊模型。

請謹慎處理任何可能影響範圍超出預期的修正。在修改所有角色共用的圖層之前,請先檢查其他角色是否也有同樣的問題:過去曾有一項修正,在原本正常的頭髮上畫出了深色條紋。

變更角色的動作或可展示的內容

README 的「變更角色的動作」將每個項目對應到 scripts/rig.py 中的名稱。表情對應 EXPRESSIONS,點擊反應對應 TAPS,應用程式播放的情感動畫對應 EMOTIONS 和 BORROWED。請保持所有角色的名稱一致,這樣應用程式的設定和提示詞只需編寫一次。

動作幅度取決於使用者的喜好。此工具套件第一位使用者的建議:頭部動作用於注視物體,因此臉部特徵稍微滑動,主要由瞳孔來表現注視方向;身體動作則較為細微,並保持腳部著地。請向使用者展示圖片,讓他們決定。

完成

  • 告知使用者模型的位置:<out>/live2d/<名稱>-full.zip 是應用程式匯入的檔案。
  • 請將角色的繪圖、去背景圖、放大圖以及 layers/full/ 中的所有內容納入版本控制。<out> 中的所有內容都可以重新產生。
  • 如果您學到了未來執行時需要的知識(例如新的問題類型及其修正方法),請在 references/problems.md 中新增一行記錄。
  • 如果啟動了檢視器和 ComfyUI,請停止它們。

相關技能