2026.06.29
See-Through × Kaggle × Claude Code で1枚絵からLive2Dモデルを(ほぼ)自動生成する
前回の記事のFigmaをやめて、PenpotとClaudeで開発してみたから引き続き、遊んでみました。
1枚のキャラクターイラストからLive2Dモデルを作るパイプラインを構築しました。See-Through(Kaggle T4 x2)でAIパーツ分け、GIMP MCPサーバーでPSD自動生成、Cubism Editor 5.xの自動リギング、そしてClaude Code + MCPサーバーで一連の作業を統合制御します。完全自動化はまだ遠いですが、手作業が必要な範囲はかなり狭められました。

こんにちは、GMOインターネットグループ AI研究開発室のK.Sです。
なぜ作ったのか
Live2Dキャラクターで、新しいキャラクターを追加したいが、Live2Dモデルの制作は専門スキルが必要で、外注すれば数万〜数十万円、自作でも数日〜数週間かかります。
「キャラの画像素材はある。1枚絵さえあれば、あとはAIで自動化できないか?」
Live2D経験ゼロのエンジニアが、AIの力を借りてどこまで自動化できるかの挑戦です。
全体のワークフロー
最終的にたどり着いた構成はこちら。
Live2Dモデル制作フロー
- キャラ画像(1枚)を用意
- See-ThroughでAI自動パーツ分け
全自動 - PSD生成
GIMP + Claude Codeで全自動処理 - Cubism Editorでリギング
半自動 - MCP経由でパラメータ調整・動作確認
AIと対話しながら調整 - Live2Dモデル完成
一つずつ見ていきます。
※今回は、同僚の写真を撮り、イラスト化したキャラ画像を使いました。
① See-Through: AIで1枚絵をパーツ分け

Live2Dモデルを作るには、キャラクターの画像を「目」「口」「髪」「顔」などのパーツに分ける必要があります。通常はPhotoshopで手作業ですが、ここをSee-ThroughというAIツールで自動化しました。
See-Throughは1枚のイラストを入力すると、各パーツのPNG画像と深度マップを出力してくれます。ComfyUIのカスタムノードとして動作します。
実行環境はKaggle一択
See-Throughはそれなりのスペックを要求します。
| 環境 | GPU | RAM | 結果 |
|---|---|---|---|
| Google Colab無料枠 | T4 | 12.7GB | RAM不足で失敗 |
| Kaggle | T4 × 2 | 29GB | 安定動作 |
Colabの無料枠では途中でメモリが溢れます。Kaggle一択でした。
T4でのbfloat16問題
Kaggleで動かせるものの、T4(Turing世代)はbfloat16に対応していません。See-Throughのコードにはbf16がハードコードされているため、実行前にパッチが必要です。
import glob
ST_PATH = '/kaggle/working/ComfyUI/custom_nodes/ComfyUI-See-through'
for py_file in glob.glob(f'{ST_PATH}/**/*.py', recursive=True):
with open(py_file, 'r') as f:
content = f.read()
if 'bfloat16' in content:
new_content = content.replace('bfloat16', 'float16')
with open(py_file, 'w') as f:
f.write(new_content)
力技ですが、全.pyファイルのbfloat16をfloat16に一括置換するだけで動きます。
seedガチャという現実
See-Throughの生成品質はseed値に大きく依存します。同じ画像でもseedが変わるとパーツの境界が全く違う結果になります。
| パラメータ | 説明 | 推奨値 |
|---|---|---|
seed |
乱数シード | 複数試して選ぶ |
resolution |
処理解像度 | 1024 |
num_inference_steps |
推論ステップ数 | 50 |
1回あたり25〜30分かかるので、3パターン程度が現実的なライン。生成されたレイヤーを重ねてカバレッジ(元画像をどれだけ復元できるか)を比較し、最も良いものを選びます。今回は約72%のカバレッジが最高値でした。残りの28%は髪のサイド部分や肩の領域が白抜けになります。
出力形式
See-ThroughはパーツごとのPNG + 深度マップに加え、layers.jsonにメタデータを出力します。
{
"width": 1024,
"height": 1024,
"layers": [
{
"name": "back hair",
"left": 379,
"top": 170,
"depth_median": 0.900
},
{
"name": "face",
"left": 402,
"top": 194,
"depth_median": 0.486
}
]
}
depth_median(0.0が手前、1.0が奥)がパーツの前後関係を決めます。この値がPSD生成時のレイヤー順序に直結する重要な情報です。
② PSD生成: 地味に最大の沼
See-Throughの出力はパーツごとのPNGファイルです。Cubism Editorで読み込むにはPSD形式に変換する必要があります。
「PNGをPSDにまとめるだけでしょ?」——そう思っていました。
失敗の歴史
| 方法 | Cubism互換 | 備考 |
|---|---|---|
| pytoshop単体 | NG | Cubism Editorで開けない |
| ImageMagick | NG | 同上 |
| pytoshop + psd-tools再保存 | OK | Python完結だが不安定 |
| GIMP | OK | 最も安定。最終的にこれを採用 |
pytoshopでPSD構造をゼロから構築してみたところ、Pythonとしては問題なく書き出せるのにCubism Editorで開くとエラー。ImageMagickでも同様。PSD仕様は公開されていますが、Cubism Editorが要求する構造が微妙に厳しいようです。
pytoshopで構築→psd-toolsで再保存という2段階変換で一応読み込めるようになりましたが、user_layer_maskチャンネルの追加が必須だったり、レイヤー名にASCII以外を使うと文字化けしたりと、地雷が多い。
最終的にGIMPでPSDを保存するのが最も安定するという結論に至りました。GIMPは業界標準のPSD出力に対応しているので、互換性の心配がありません。
GIMP + Claude Code で全自動PSD生成
GIMPをプログラムから操作する方法はいくつかあります。Script-Fuスクリプトを生成する方法と、GIMP MCPサーバー経由でClaude Codeから直接操作する方法を併用しました。
アプローチA: Script-Fu生成
Pythonでlayers.jsonを読み、GIMP Script-Fuスクリプトを自動生成します。
(let*
(
(image (car (gimp-image-new 1024 1024 RGB)))
(layer 0)
)
;; 背景レイヤー
(set! layer
(car
(gimp-file-load-layer
RUN-NONINTERACTIVE
image
"background.png"
)
)
)
(gimp-image-insert-layer image layer 0 -1)
;; See-Throughパーツ(depth順に追加)
(set! layer
(car
(gimp-file-load-layer
RUN-NONINTERACTIVE
image
"back_hair.png"
)
)
)
(gimp-image-insert-layer image layer 0 -1)
(gimp-layer-set-offsets layer 379 170)
(gimp-item-set-name layer "back_hair")
;; ... 20パーツ分 ...
;; PSDとして保存
(file-psd-save
RUN-NONINTERACTIVE
image
(car (gimp-image-get-active-drawable image))
"/path/to/output.psd"
"output.psd"
0
0
)
)
アプローチB: GIMP MCPサーバー経由
GIMP MCPサーバーを導入すると、Claude CodeからGIMPを直接操作できます。
{
"mcpServers": {
"gimp": {
"command": "uv",
"args": [
"run",
"--directory",
"/path/to/gimp-mcp",
"gimp_mcp_server.py"
]
}
}
}
GIMPのPython APIをMCP経由で呼び出し、レイヤーグループの作成やPSD保存ができます。
# Claude CodeからGIMPを操作(MCP経由)
group = Gimp.GroupLayer.new(image)
group.set_name("EyeL")
image.insert_layer(group, None, 0)
image.reorder_item(eyelash_layer, group, 0)
image.reorder_item(eyewhite_layer, group, 1)
ハマりポイント: レイヤーグループが超重要
ここが最大の学びでした。PSDのレイヤーグループがCubism Editorのパーツフォルダになるのです。
レイヤーをフラットに並べたPSDを読み込むと、Cubism Editorでは全てのパーツがフォルダなしで表示されます。これだと、Cubism Editorの「顔のデフォーマの自動生成」機能がパーツを認識できず、ドロップダウンが空っぽになります。
[PSD] [Cubism Editor] レイヤーグループ "EyeL" → パーツフォルダ "EyeL" ├── eyelash-l → ├── eyelash-l (ArtMesh) └── eyewhite-l → └── eyewhite-l (ArtMesh)
GIMPでレイヤーグループを作ってからPSD保存することで、Cubism Editorが各パーツを正しく認識するようになりました。
最終的なグループ構成は以下の通り。
| グループ名 | 中身 | 備考 |
|---|---|---|
| FrontHair | front_hair | 最手前 |
| EyebrowL / EyebrowR | eyebrow-l / eyebrow-r | — |
| Eyewear | eyewear | メガネ |
| EyeL / EyeR | eyelash + eyewhite | まつげ + 白目 |
| IridesL / IridesR | irides-l / irides-r | 黒目 |
| Nose | nose | — |
| Mouth | mouth | — |
| Face | face | — |
| EarsL / EarsR | ears-l / ears-r | — |
| Topwear | topwear | 服 |
| Neck | neck | — |
| HandwearL / HandwearR | handwear-l / handwear-r | — |
| BackHair | back_hair | 最奥 |
③ Cubism Editorでリギング: 半自動の世界

PSDをCubism Editorに読み込んだら、リギング(動きをつける作業)です。ここが最も時間のかかる工程ですが、Cubism Editor 5.xの自動化機能でかなり省力化できました。
自動でできたこと
1. 描画順の設定
GIMPのレイヤー順序がそのままCubism Editorの描画順に反映されます。PSD生成時にdepth_median順でレイヤーを並べておけば、Cubism Editor側での並べ替えは不要です。
ただし、数値としては全レイヤーがデフォルト500になるので、手動で調整する必要があります(back_hair=100, face=300, front_hair=500 など)。
注意点: See-Throughの深度値は白目(eyewhite)を黒目(irides)より手前に配置することがあります。正しくは白目→黒目→まつげの順(奥→手前)なので、目の描画順だけは手動チェックが必要です。
2. メッシュの自動生成
全パーツ選択 → Ctrl+A で自動メッシュ生成。一瞬で完了します。
3. 顔のデフォーマの自動生成
メニュー → モデリング → 顔のデフォーマの自動生成。顔のパーツにワープデフォーマを自動配置してくれます。前提条件としてPSDにレイヤーグループが必須(前述)。
4. 顔の動きの自動生成(角度X/Y)
顔のデフォーマが作られた後、メニュー → モデリング → 顔の動きの自動生成。「角度X」「角度Y」「四隅」のボタンを押すだけで、顔を左右・上下に動かすキーフォームが自動生成されます。
Live2Dの自動化は、最新のアップデートでだいぶ自動化が進みましたので、参考に載せておきます。
自動化できなかったこと
目の開閉・口の開閉のキーフォームは手動です。Cubism Editorの自動生成は角度X/Yのみ対応で、まばたきや口パクは対象外です。
テンプレート機能(既存モデルの動きを転写)も試しましたが、See-Throughのパーツ構成と標準的なLive2Dモデルの構成が違いすぎて、体がぐにゃっと崩れてしまいました。目が3パーツ(まつげ・白目・黒目)に分かれている点が特に相性が悪かったです。
自動化スコアカード
| 工程 | 自動化 | 備考 |
|---|---|---|
| パーツ分け | 全自動 | See-Through |
| PSD生成 | 全自動 | GIMP + Claude Code |
| メッシュ生成 | 全自動 | Ctrl+A |
| デフォーマ生成 | 全自動 | 顔のデフォーマの自動生成 |
| 顔の角度X/Y | 全自動 | 顔の動きの自動生成 |
| 描画順の設定 | 手動 | 数値の調整が必要 |
| 目の開閉 | 手動 | キーフォーム手作成 |
| 口の開閉 | 手動 | キーフォーム手作成 |
| 揺れ・呼吸 | 半自動 | 物理演算で設定可 |
④ MCPサーバー: AIからCubism Editorを操作
Cubism Editor Plugin APIをMCP(Model Context Protocol)サーバーとしてラップし、Claude Codeから直接Cubism Editorを操作できるようにしました。
アーキテクチャ
Claude Code
↓↑
MCP Server
↓↑ stdio
WebSocket
↓↑
Cubism Editor Plugin API
localhost:22033
MCPサーバーはTypeScript/Node.jsで実装。@modelcontextprotocol/sdkを使い、stdioトランスポートでClaude Codeと通信します。Cubism EditorへはWebSocketで接続し、トークンベースの認証で永続セッションを維持します。
何ができるか
// モデル情報の取得
get_current_model(); // アクティブなモデルのUID
get_parameters(); // 全パラメータ一覧
get_parameter_values(); // 現在の値
// パラメータの操作
set_parameter_values([
{
Id: "ParamAngleX",
Value: 15
},
{
Id: "ParamMouthOpenY",
Value: 0.8
}
]);
clear_parameter_values(); // デフォルトにリセット
実際の使い方
AIとの対話でモデルを操作します。キーフォーム生成後の動作確認に特に便利です。
自分: 「顔を右に向けて」 Claude: set_parameter_values で ParamAngleX = 20 を設定 結果: Cubism Editorの画面でキャラが右を向く 自分: 「目を閉じて」 Claude: ParamEyeLOpen = 0 ParamEyeROpen = 0 を設定 結果: 目が閉じた状態になる 自分: 「デフォルトに戻して」 Claude: clear_parameter_values を実行 結果: 正面向き・目開き・口閉じの状態に戻る
手でスライダーを動かす代わりに自然言語で指示できるので、パラメータの組み合わせを試すときに楽です。
ツールチェーン全体像
最終的に、2つのMCPサーバーをClaude Codeから同時に利用する構成になりました。
Claude Code ├── cubism-mcp-server ←→ Cubism Editor(パラメータ操作) └── gimp-mcp-server ←→ GIMP(PSD生成・画像操作)
AIアシスタントが画像処理(GIMP)とモデル操作(Cubism Editor)の両方を一元的に制御できます。「GIMPでレイヤーグループ作ってPSD保存して」「Cubism Editorでパラメータ確認して」といった作業を、一つの対話の中で完結できます。
振り返り: 何が難しかったか
1. PSD互換性の罠
一番時間を使ったのがPSD生成です。PSD仕様は一見シンプルですが、Cubism Editorが要求する構造が微妙に厳しい。pytoshop → psd-tools → GIMPと3段階の試行錯誤を経て、「業界標準のツール(GIMP)に任せるのが一番」という当たり前の結論にたどり着きました。
2. レイヤーグループの存在を知らなかった
PSDのレイヤーグループがCubism Editorのパーツフォルダに対応するという事実は、Live2D経験者なら常識なのかもしれません。でもゼロから始めた自分にはこれが分からず、Cubism Editorの自動生成機能が動かない原因の特定に苦労しました。
3. See-Throughと標準Live2Dの構成のギャップ
See-Throughは目を「まつげ」「白目」「黒目」の3パーツに分けますが、Live2Dの標準構成では「目」は1パーツです。このギャップがテンプレート機能の適用を難しくしています。
まとめ
| 項目 | 結果 |
|---|---|
| パーツ分け | 全自動(See-Through) |
| PSD生成 | 全自動(GIMP + MCP) |
| リギング基礎(メッシュ、デフォーマ、角度X/Y) | 全自動(Cubism Editor AI機能) |
| 目の開閉・口の開閉 | 手動 |
| パラメータ調整・動作確認 | AIと対話(MCP) |
「1枚絵 → Live2Dモデル」の完全自動化はまだ遠いですが、手作業が必要なのは目と口のキーフォーム作成くらいまで絞り込めました。
工数で見ると、従来は絵師+Live2Dモデラーの分業で数日〜数週間かかる工程が、AIの支援でパーツ分け30分 + PSD生成5分 + リギング基礎10分 + 手動調整1〜2時間程度に短縮できています。
MCPによるツール統合は想像以上に強力でした。GIMPとCubism Editorという全く異なるGUIアプリケーションを、AIアシスタントとの対話だけで横断的に操作できる体験は、今後のクリエイティブワークフローの可能性を感じさせてくれます。
グループ研究開発本部 AI研究開発室では、データサイエンティスト/機械学習エンジニアを募集しています。ビッグデータの解析業務などAI研究開発室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ募集職種一覧 からご応募をお待ちしています。
グループ研究開発本部の最新情報をTwitterで配信中です。ぜひフォローください。
Follow @GMO_RD


