Communitygithub.com

live2d-halfbody

從一張立繪或角色描述,自動生成可在 VTube Studio 直播用的半身 Live2D 皮套,無需手動建模或 Cubism Editor。

live2d-halfbody 是什麼?

這個技能專為不想手動建模或調整網格的創作者設計,能從一張角色立繪或純文字描述,自動建構出一個適合 VTube Studio 直播的半身 Live2D 皮套。使用者只需確認立繪、同意上傳到 See-through 服務進行圖層分離,最後在 VTS 中驗收效果。其餘所有步驟,包含圖像生成、圖層拆解、物理綁定、動態參數設定與自我檢查,都由 AI 代理自動完成。支援的功能包括 ±30 度的頭部轉動、歪頭時身體連動、眨眼、單眼眨眼、口型同步、頭髮分段物理擺動(包含短髮、長髮、雙馬尾與瀏海)、掛件與耳飾擺動、眼鏡跟隨、招手/攤手/指向前三個手勢,以及臉紅表情。此技能主要透過 Python 腳本與 rigkit 工具庫運作,支援 macOS 並需要 VTube Studio 與相關環境(如 See-through 服務等)才能完整執行。

相容平台✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/bellisji233/live2d-halfbody-skill/tree/HEAD

在你喜歡的 AI 中提問

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

說明文件

半身皮套:從一張立繪到 VTube Studio

給不想手動建模、不想調網格的人。一張立繪或一段角色描述進去,Agent 一步步做出能在 VTS 裡直播用的半身 Live2D 皮套。用戶只做三件事:

  1. 確認立繪(第 1 步);
  2. 同意把立繪傳到 See-through(第 3 步,Hugging Face,備用魔搭);
  3. 在 VTS 裡看效果,回覆 通過 或 不通過:<現象>(第 5 步)。

其餘由 Agent 完成,並在交給用戶前自查。

跑一次就有的功能

功能驅動
轉頭左右、上下(±30),歪頭時身體跟著傾斜攝影機
身體跟隨:左右轉、前後、呼吸起伏攝影機、VTS 自動呼吸
眨眼、單眼眨眼(快閉上時換成畫好的閉眼);半閉眼時雙眼皮淡出攝影機(左右眼分開)
眼珠跟隨、眉毛上下攝影機
張嘴說話、嘴角笑攝影機
頭髮分段擺動:劉海(可選)、兩側(三段,從髮根到髮梢一段跟一段;可別在耳後)、後髮或髮髻;點頭時上下彈。雙馬尾每條從髮繩往下單獨擺,同樣分三段。過肩長髮在肩膀以下跟身體走物理
掛件(項鍊吊墜、耳墜)擺動物理
眼鏡跟著臉轉攝影機
表情:笑眼 N1、O 型嘴 N2、急眼 N3、困擾 N4,清除 N0快捷鍵
手勢:招手 N5、攤手 N6、指向 N7快捷鍵(也配了攝影機手勢,見「已知問題」)
臉紅 N8快捷鍵

做不到:大角度轉頭(要側臉素材)、全身、手臂跟著攝影機連續動(要分段手臂素材)。產出是 VTS 直接用的 .moc3,不是 Cubism Editor 的工程檔案(.cmo3),Editor 打不開。精修級的效果(更細的物理、更多表情、商業級網格)要把 layers-st/ 的圖層導進 Cubism Editor 重新綁定。

資料夾

素材/角色名/                 立繪、提示詞、變體、See-through 結果、圖層
  A0-base.png                定稿立繪
  prompts/                   從 references/提示詞/標準/ 複製,填好 [[…]]
  check/                     每張變體的對位檢查圖
  seethrough.psd             See-through 的原始結果
  seethrough/                拆成每層一張 PNG
  layers/                    自拆的圖層:只作 See-through 合成的底,不單獨交付
  layers-st/                 最終圖層(See-through 合成,含手勢和臉紅)
  R0-rest.png                最終圖層的靜止合成,手勢和臉紅變體的底圖
角色/角色名/
  character.json             位置、幅度、圖層對照
  標註.png                    character.json 裡的位置畫在立繪上
  素材檢查/  prepared/  build/runtime/  自查/  vts/

步驟

命令都在用戶的工作目錄(放 素材/、角色/ 的地方)裡跑,命令前加 PYTHONPATH=<skill 目錄>(如 ~/.claude/skills/live2d-halfbody),Python 才找得到 rigkit。

0. 檢查環境

python -m rigkit.doctor

有 ✗ 的先處理完再出圖,否則會在出完二十來張圖之後才卡住。! 只影響一部分:沒有 See-through 令牌時匿名額度不一定夠,沒有 ffmpeg 時出不了自查短片,沒有 Codex 時用其他圖像工具出圖(見第 2 步)。

1. 立繪 —— 用戶確認

把 references/提示詞/標準/ 整個複製到 素材/角色名/prompts/,先填好 A0-base.txt 裡的 [[…]](外貌、劉海、兩側頭髮、頭髮長短、眼鏡、耳墜)。

  • 只有描述:照描述填,生成立繪。
  • 有立繪:存為 素材/角色名/參考.png,生成時作為參考圖附上,得到一張按綁定要求畫的版本(脖子露出;有劉海時停在眉毛以上;兩側頭髮蓋住耳朵到下巴為止,或別在耳後;平光、白底、手臂和身體之間留縫)。原圖不滿足這些要求時,直接拆會在動起來時出問題。
python -m rigkit.variants 素材/角色名 A0-base

沒有 Codex 時按第 2 步的「用其他圖像工具出圖」出 A0。給用戶看,用戶確認後才往下做。

已有按 圖層清單 分好層的檔案時,跳到第 4 步。

2. 出圖

把 prompts/ 裡其餘的 [[…]] 換成這個角色的描述;角色沒有的部件刪掉對應的提示詞:帽子或髮飾 V1,耳前的側髮 V2,劉海 V3,掛件 V9(S1 裡同時刪掉那一行,見 出圖)。然後:

python -m rigkit.variants 素材/角色名

依序生成 13~17 張「整張圖改一處」的變體,每張出對位檢查圖。偏移 4 px 以內、改動只在該改的地方算合格;不合格刪掉重出,同一張最多三次。細節見 出圖。

用其他圖像工具出圖(沒有 Codex,或 Agent 自己能出圖):variants 遇到已經有的圖只做檢查,不重出,所以可以先用別的工具把圖出好放進去。

python -m rigkit.variants 素材/角色名 --list

每行一張圖:要附的圖、提示詞檔案、出了沒有。按順序一次出一張,附的圖標著「還沒有」時等它出好:

  • 提示詞用 prompts/<名>.txt 的全文,不改寫;只附列出的那一張圖,讓工具在它上面改。A0 附參考圖,沒有參考圖時直接生成。
  • 工具要能改圖:給一張圖和提示詞,返回改過的同一個圖。只能憑文字出新圖的工具只能出 A0。
  • 存為 素材/角色名/<名>.png,和附的圖長寬比相同。不裁、不加邊、不摳圖、不修補。
  • A0 出成正方形;不是 1254×1254 時縮放到這個尺寸(做過的角色都是這個尺寸)。

出完一批,跑一次 python -m rigkit.variants 素材/角色名 出檢查圖,合格標準同上。第 3 步的手勢和臉紅同樣:--list F1-blush P1-wave P2-explain P3-point。還沒用 Codex 以外的工具完整做過一個角色。

3. 拆層 —— 用戶同意上傳

先用變體自拆,作為合成的底:

python -m rigkit.split 素材/角色名 素材/角色名/layers --pad-top 90

再問用戶是否同意把立繪傳到 See-through,同意後:

python -m rigkit.seethrough fetch 素材/角色名/A0-base.png 素材/角色名/seethrough
python -m rigkit.seethrough split 素材/角色名 素材/角色名/layers 素材/角色名/layers-st --pad-top 90

fetch 先試 Hugging Face,沒跑成再換魔搭(--site hf 或 --site modelscope 指定一個),各用能給的最高解析度。也可以把網頁版、ComfyUI 或自己顯卡跑出的 PSD 交給它:fetch 那個.psd 素材/角色名/seethrough。本機裝了 See-through 時用 --site local:不傳圖,不佔額度(見「環境」)。

最終圖層必須走 See-through:自拆的圖層動起來邊緣有碎點、被擋住的頭髮補不全,不單獨交付。當天沒有額度時,換另一個網站、等第二天,或者用 PSD。

split 會逐條打印它對 See-through 圖層做的修正(裁掉畫到別處的、挪回歸錯的配飾、補漏畫的部件),規則見 規則 的「See-through 合成」。看 layers-st/拆層總覽.png:每層只有自己的東西,靜止合成和立繪只差在畫風。

閉眼、笑眼是自拆的。它們帶進旁邊的線或邊緣毛躁、同一處改兩次還在時,把這兩張變體交給 See-through 拆,再跑一次上面的 split,它會改用 See-through 的睫毛層(規則第 103 條):

python -m rigkit.seethrough fetch 素材/角色名/D5-eyes-closed.png 素材/角色名/seethrough-D5-eyes-closed
python -m rigkit.seethrough fetch 素材/角色名/D6-eyes-smile.png 素材/角色名/seethrough-D6-eyes-smile

傳到網站同樣先問用戶,每張佔一次額度。本機跑時加 --site local --head-from 素材/角色名/seethrough,只拆頭部。

然後做手勢和臉紅:

python -m rigkit.extras 素材/角色名 素材/角色名/layers-st        # 寫出 R0-rest.png
python -m rigkit.variants 素材/角色名 F1-blush P1-wave P2-explain P3-point
python -m rigkit.extras 素材/角色名 素材/角色名/layers-st        # 加進圖層

看 layers-st/手勢和臉紅.png:每行是靜止、變體、模型裡打開後的樣子,手臂和身體接得上、手的邊緣乾淨才往下做。

4. 生成並自查

python -m rigkit.estimate 素材/角色名/layers-st 角色/角色名 --name 名字
python -m rigkit.check_art 角色/角色名/character.json
python -m rigkit.prepare 角色/角色名/character.json
python -m rigkit.build 角色/角色名/character.json             # 幾分鐘
  • estimate 不覆蓋已有的 character.json,寫成 character.draft.json;圖層改過要重估時,比對後換上。
  • 標註.png:臉的橢圓、眼眉鼻嘴、歪頭轉軸、頸根、肩、腰、髮根線不在對的位置時,改 character.json 裡對應的數字,重新 prepare 和 build。
  • 素材檢查/:露底 有品紅、原畫對照 有成線的紅色時,回到第 3 步。透出背景 列出靜止時沒蓋住的地方、手勢時變透明的地方,再看 青底.png(靜止和各手勢放在青色背景上):白衣服、淺色皮膚處的缺口在白底上看不出。手臂挪開處變透明是正常的,其餘回到第 3 步。

自查:

python -m rigkit.preview flips 角色/角色名/build/runtime
python -m rigkit.preview sheet 角色/角色名/character.json 角色/角色名/自查 新版=角色/角色名/build/runtime
python -m rigkit.preview clip 角色/角色名/character.json 角色/角色名/自查/動作.mp4 新版=角色/角色名/build/runtime

翻折三角形應為 0。看放大圖和短片裡的固定檢查區(眉毛和劉海、臉邊、下巴和脖子、太陽穴和耳朵、眼角和睫毛、嘴角),有問題先修,再交給用戶。有上一版時把上一版放在前面並排比。

再在 VTS 的背景色上,把閉眼、半閉、笑眼、張大嘴、半張嘴、三個手勢、左右甩頭各渲一張,眼睛、嘴、頭髮交界放大三到四倍看:用戶在 VTS 裡最先看到的就是這些畫面。

5. 裝進 VTS —— 用戶驗收

python -m rigkit.vts 角色/角色名/character.json --install

新模型可以在 VTS 開著時裝;覆蓋已裝的模型要先退出 VTS,這時保留用戶在 VTS 裡調過的設定,只補缺的快捷鍵和映射。VTS 開著又要換新版時,改 vts.name 和 vts.folder 裝成新資料夾。

給用戶並排圖、短片和下面這張清單,回覆 通過 或 不通過:<現象>:

看什麼怎麼做
轉頭、歪頭左右上下轉頭、歪頭:臉、頭髮、帽子、耳朵跟著轉,沒有裂縫、碎點、留在原地的東西
眼睛眨眼、單眼眨眼、半閉眼;轉頭時睫毛不穿過頭髮
嘴說話、笑;閉著嘴轉頭時不歪嘴
頭髮甩頭:劉海、側髮、後髮分段擺,從髮根到髮梢一段比一段晚;點頭時上下彈;長髮在肩膀以下跟身體
掛件身體動時吊墜擺動,底下的衣服完整
身體身體跟隨左右轉、前後,呼吸起伏
表情N1~N4 切換,N0 清除
手勢N5~N7:身體畫風不跳,手的邊緣乾淨;手勢打開時轉頭,手臂跟著身體走
臉紅N8:邊緣柔和;甩頭時頭髮下面不露邊

調幅度

動作幅度都在 character.json:

想改欄位
歪頭角度head.tilt_deg(滿幅時的度數)
轉頭時臉走多遠head.yaw_px、head.pitch_px
身體傾斜body.tilt_deg(每單位參數的度數,滿幅 ×10)
呼吸起伏body.breath.head、body.breath.shoulder(像素)
身體跟隨body.turn、body.shift、body.lean_y
頭髮擺幅hair.locks.<圖層>.swing;中段和髮梢 hair.locks.<圖層>.bend;點頭 hair.locks.<圖層>.pitch
物理手感hair.locks.<圖層>.chain(三段)或 physics:delay 越小越拖、length 越長越慢
掛件擺幅dangles.<圖層>.deg(滿幅時的度數)
半閉眼eyes.crease_fade(雙眼皮淡出的區間)、eyes.lower_from(下眼瞼開始合的位置)
嘴從哪裡開始張mouth.open_from:攝影機讀數低於它時保持閉嘴

幅度按 VTS 半身取景和真人動作判斷:正常歪頭約 15°,模型只轉 3° 就等於沒有。改完重新 build。其餘欄位見 配置說明。

規則

全部規則和來由見 規則。最常被違反的幾條:

  • 動手前先查 Live2D 的標準做法,說清楚打算怎麼做。
  • 切圖用 See-through,圖像模型只補它給不了的細節(表情、被擋住的部分、手勢)。
  • 只處理有把握的部分:See-through 的圖層整塊用,程式碼只做整塊的取捨、挪動和按不相連的塊分開,不在它的層裡按顏色逐像素再切(切出來都毛躁)。要改一處,先和 See-through 原樣並排放大比,沒有明顯更好就不改。
  • 新規則先在所有已有角色上量判斷依據、定適用範圍,改完新舊程式碼各跑一遍逐層比,不誤傷已通過的角色。每條規則寫明範圍:通用,還是只在某種情況下觸發(觸發條件、不管哪些情況)。
  • 每輪給同尺寸並排圖和短片,由人判斷;翻折數、像素差只用來排查破面。
  • 同一個症狀修了三輪還在,停止改程式碼,改用素材解決。
  • 圖像模型只派「整張圖改一處」,不派「只留一部分」;要的部分由程式碼用差值算。
  • 傳圖到外部服務前先問用戶;帳號和 token 由用戶自己註冊、自己填,不在對話裡複述 token。
  • 安裝時不覆蓋用戶的 vtube.json,覆蓋已裝模型時 VTS 要先退出。

環境

  • Python 3.10+:pip install -r <skill 目錄>/requirements.txt(系統 Python 不讓裝時建一個虛擬環境)。出短片要 ffmpeg。
  • Codex 命令列(出圖):ChatGPT 桌面版自帶,或單獨安裝的 codex(在 PATH 裡即可),登錄 ChatGPT 帳號;都不是時把環境變數 CODEX 指向它。沒有 Codex 時用其他能改圖的圖像工具,見第 2 步。
  • See-through(拆層),兩個網站跑的是同一個模型,至少準備一個:
    • Hugging Face(首選,幾分鐘一次,最高 1280):不登錄時每天的免費顯卡時間不一定夠跑一次;用戶註冊免費帳號、建一個 Read token,放進環境變數 HF_TOKEN 或 ~/.cache/huggingface/token(hf auth login 存的位置),每天約 1~2 次。
    • 魔搭 ModelScope(備用,免費,最高 1536):用戶註冊帳號、建一個存取令牌,放進環境變數 MODELSCOPE_API_TOKEN 或 ~/.cache/modelscope/token。要排隊,一次可能半小時。1536 的頭髮輪廓和眼睛比 1280 更接近原畫。
    • 本機(可選,不傳圖,不限次數):在 Apple 晶片、24 GB 記憶體上驗證過,1280 整張約 21 分鐘,只拆頭部約 9 分鐘;第一次執行下載約 13 GB 模型。裝好後把環境變數 SEETHROUGH_DIR 指向它,裝法見 出圖 的「本機跑 See-through」。
  • VTube Studio(Steam 版)。
  • Live2D Cubism Core(預覽、自查、圖示要用):裝了 Cubism Editor 時自動找到;否則下載 Cubism SDK for Native,把環境變數 CUBISM_CORE 指向其中的 Core 動態庫。Core 按 Live2D 的許可證使用,不隨本 skill 分發。

macOS 上驗證過;Windows 未驗證。

已知問題

  • 攝影機手勢(張開手掌 = 招手、雙手張開 = 攤手、豎食指 = 指向):第一個角色能觸發,第二個角色配置逐欄位相同卻不觸發,原因未查明。快捷鍵 N5~N7 不受影響。
  • 靜止時是 See-through 畫的樣子,比原畫軟一點,睫毛、髮梢描邊的細節少一些。
  • 戴眼鏡、鏡框緊挨雙眼皮時,See-through 會丟掉雙眼皮線,在睫毛上沿畫一道淺灰帶,按原樣保留。
  • 眼尾貼著臉頰和耳朵之間的輪廓線時(毛線帽),自拆的閉眼和笑眼圖層會帶進一小段這條輪廓線,轉頭時在臉邊露出來。把這兩張變體交給 See-through 拆可以去掉(第 3 步)。

相關技能