Community画像github.com

MysteryGodzilla/live2d

1枚の全身アニメ絵から、Cubism Editor不要・手作業不要で物理演算・表情・モーション付きのLive2Dモデル(.moc3バンドル)を生成するキット。ユーザーがLive2DモデルやVTuberモデルを求めたり、修正を依頼した際に使用します。

live2d とは?

このスキルは、1枚の全身アニメイラストから、アプリ(AIRI、Open-LLM-VTuberなど)で読み込み可能なLive2Dモデル(.moc3バンドル)を、Cubism Editorを使わずに自動生成するためのキットです。ユーザーが「このキャラをモデル化して」「目の位置がおかしい」などと依頼した際にエージェントが実行します。Qwen Imageによる候補描画、切り抜き、アップスケール、透過レイヤー分割、レイヤー修正、リギング、ビルド、ビューアーでの確認を、スクリプト群が自動化します。手動でのリギングは一切不要で、すべての工程はコマンドラインから実行可能。エージェントは各ステップの結果を確認し、問題があれば修正してから次のステップに進みます。このキットは、ユーザーが「モデルを作って」「目の修正をして」「表情を増やして」などと言ったときに即座に活用できます。

対応~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に質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

1枚の絵からLive2Dモデルを作る

このキットは、1枚の全身キャラクター描画から、AIRIやOpen-LLM-VTuberなどのアプリが読み込めるLive2Dモデルを生成します。スクリプトが作業を行います。あなたの役割は、手順を順番に実行し、各手順の結果を確認し、次の手順がその上に構築する前に問題を修正することです。初期段階で見逃した欠陥(レイヤーの位置間違い)は、後で追跡がはるかに困難な問題(コートの後ろに隠れた脚)となって現れます。

すべてはプロジェクト内から実行する1つのコマンドで操作します:

python <このフォルダ>/live2d.py <step> <name> ...

<name> はキャラクターのフォルダ名です。live2d.py は各ステップに必要なPythonを自動選択し、実行するコマンドを表示します。最初のキャラクターを作成する前に、このフォルダ内の README.md を一度読んでください。ダウンロード、設定ファイル、各ステップとそのコマンド、レイヤー修正テーブルが記載されています。このファイルは、手順を適切に進めるためのガイドです。

人向けのGUIもあります(live2d.py gui:同じステップがページ上のボタンとして表示されます)。エージェントはコマンドを使用してください。

始める前に

  1. live2d.py check を実行します。インストールされているものと、各ステップに不足しているものが表示されます。何か不足している場合は、ユーザーにその内容と入手先(READMEの「必要なもの」)を伝えてください。ダウンロードは数ギガバイトあります。開始する前にユーザーに確認を取ってください。キットがまだ使用されていないプロジェクト(checkでlive2d-kit.jsonがないと表示される場合)では、プロジェクトのトップフォルダから最初に live2d.py init を実行します。これにより設定ファイル、ルックスファイル、およびこのスキルのポインタが作成され、既存のものは変更されません。init --like <別のプロジェクト> は、ツールのパスを既存のプロジェクトからコピーします。
  2. live2d.py status <name> を実行します。完了したステップにチェックを入れ、次のコマンドを表示します。キャラクターの作業を再開するときは、ファイルから推測するのではなく、これを使用してください。
  3. グラフィックカードを使用するステップ(draw、cutout、upscale、split)の前にユーザーに確認を取ってください。これらのステップはカードを専有する必要があり、ユーザーが他の処理を実行している可能性があります。split は空いているカードで1パスあたり約10分かかり、他の処理が一部でも占有していると数時間かかる場合があります。その旨を伝え、バックグラウンドで実行してください。
  4. draw --runpod は有料です。ユーザーが明示的に要求した場合のみ使用してください。
  5. 自分が開始したものだけを開始・停止してください。live2d.py comfy status は、ComfyUIが実行中かどうかと、誰が開始したかを表示します:このプロジェクトか、別のフォルダか(その場合は他の誰かのものです。使用しても構いませんが、停止しないでください)。comfy stop は、このプロジェクトの comfy start が開始したものだけを停止します。描画、切り抜き、アップスケールのステップが完了したら、あなたのComfyUIを停止してください。

各ステップと確認項目

ステップコマンド正しい状態
描画comfy start、次に draw <round> --character <name> --seeds ...ユーザーが1つを選択する。コンタクトシートを見せる。ユーザーが依頼しない限り、代わりに選ばないこと
選択pick <name> <picture>描画がREADMEの「リギングに適した描画」に適合している。適合しない場合(腕が体に密着、脚が揃っている、手に小道具を持っているなど)、先に進む前に何が問題になるかを伝える
切り抜き、アップスケールcutout <name>、upscale <name>、comfy stopfull/cutout.png にキャラクター全体が写っており、背景がない。draw からの描画は既に透明度を持っている:pick が既に切り抜きを済ませているため、cutout は何もせず、upscale のみが必要
分割split <name> bodyレイヤーが出力される。約17枚が期待される:髪、顔、目、眉、鼻、口、首、服、腕、脚、靴
レイヤー確認layers check <name>カウントが数千ピクセルの細いアウトラインである。保存された画像を確認する。真っ赤なブロックは、他のレイヤーを覆っているレイヤーを示す
ヘッドパスsplit <name> head、layers scale <name> 2、layers head ...、layers under <name> neck facelayers check を再度実行:カウントが急増しないこと。顔レイヤーが描画の顔と一致すること
パーツparts closed-eyes <name>、parts mouth <name>レイヤーに eye_close と mouth_open が含まれている。どの開いた口とどの赤面を使用するかはユーザーの好み:parts mouth-sheet <name> と parts blush-sheet <name> を実行し、2枚の画像を見せて番号を選んでもらう(READMEの「口と赤面」)。口が大きすぎる、小さすぎる、高い、低い、傾いている場合は、--size、--down、--right、--turn で修正可能。まず mouth-sheet で修正結果を見せる。赤面も同様に --size、--in、--down、--turn を使用する。parts mouth-oh <name> は、怖がった・驚いたときの「O」の口を追加する。閉じた口が細すぎて見えない場合は、parts mouth-line <name> --try で再描画を確認、parts mouth-line <name> で作成、その後 parts mouth <name> を再度実行
ビルドbuild <name>出力(下記)を読む
表示view、次に確認シート(下記)READMEの「モデルを試す」のリスト

キャラクターの説明はプロジェクトのルックスファイルから取得されます(check が保存場所を表示します。READMEの「ルックスとスタイル」にフォーマットがあります)。描画前にルックスをそこに記述するか、そこで変更してください。それが彼女の見た目を定義する唯一の場所であり、次のラウンドや次のエージェントが同じキャラクターを描画するためです。ルックスは髪、目、体型、服装のみです。キットがフレーミングとポーズ自体を追加するため、それらを繰り返したり別のポーズを要求するルックスはリギングの妨げになります。draw ... --show は描画せずにプロンプト全体を表示します:グラフィックカードを使う前に読んでください。--look "..." は1回限りの使用です。

分割後、<characters>/<name>/layers/full/parts/ 内の各レイヤー画像を一度確認してください。探すものは3つです:一緒に動かなければならない2つのものを保持するレイヤー(コートの前面と背面の内側)、順序が間違っているレイヤー、1つの形状として出力されたペア(腕、脚、目)。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 arms または 0 legs は、そのペアがレイヤー上で1つの形状になっていることを意味します。Feet at 0.000 はレイヤーの下部に浮遊ピクセルがあることを示します。
  • hair: 6 sections that swing each by itself (...):髪がどのように分割されたか。前髪1セクション、後ろ髪1セクションは、髪が細いか、レイヤーが分割されていることを意味します:欠陥ではありません。
  • in the texture at the head pass's own size: face, eyelash, ...:ヘッドパスのサイズでテクスチャに含まれた頭部パーツ。該当行がない場合、シャープなコピーがないことを意味します:layers sharp <name> で保存されたヘッド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")を渡します。隙間があると緑色が表示されます。

画像を注意深く確認してください。欠陥がありそうな場所(あご、腰、目)を拡大して見てください。全身サムネイルで判断しないでください。これまでに見つかった欠陥のほとんどは数ピクセル幅でした。各動作の両端と、2つの動作の組み合わせ(回転+視線、持ち上げ+曲げ)を確認してください。パーツが互いに離れる箇所です。

結果をユーザーに表示するときは、画像を送信し、確認した内容と確認しなかった内容を明確に伝えてください。ビューアーはアプリではありません。アプリで彼女を確認していない場合はその旨を伝えてください。

何かがおかしい場合

  1. 問題のあるパーツを特定します。スライダーでポーズを固定するか、その部分にズームしたシートを作成します。
  2. 欠陥の原因を特定します。パーツの画像が間違っている、切り詰められている、順序が間違っている、他のパーツに属するものが含まれている場合はレイヤーに問題があります。レイヤーが正しいのに動きがおかしい場合はリギングに問題があります。
  3. references/problems.md で該当する問題を調べます。これまでに発生した問題、原因、修正方法がリストされています。
  4. レイヤーの欠陥は layers コマンドまたは彼女の live2d.json で修正し、その後 build を再度実行します。
  5. すべてのキャラクターに発生するリギングの欠陥は scripts/rig.py で修正します。各数値とテーブルには、なぜその値なのかのコメントが付いています。変更するときは理由を追加してください。1つのキャラクターだけに発生する欠陥は、彼女の live2d.json に記述し、rig.py から読み取られます。
  6. ビルドし、ページをリロードし、同じシートを再度作成して比較します。リロードが重要です:ページは読み込んだモデルを保持するため、リロードせずにシートを作成すると、ビルド前の状態が表示されます。

意図した以上に影響が及ぶ修正には注意してください。すべてのキャラクターのレイヤーを変更する前に、他のキャラクターにその問題があったか確認してください。ある修正で、本来問題のなかった髪に暗い縞が描かれたことがあります。

動きや表示内容の変更

READMEの「動きの変更」は、各項目を scripts/rig.py の名前に対応付けています。表情は EXPRESSIONS、クリック反応は TAPS、アプリが再生する感情モーションは EMOTIONS と BORROWED です。すべてのキャラクターで同じ名前を維持してください。そうすることで、アプリの設定とプロンプトを1回記述するだけで済みます。

動きの程度はユーザーの好みによります。このキットの最初のユーザーからの標準的なガイダンス:頭の動きは物を見るためのものなので、特徴は少しだけ動き、虹彩が主な視線を担当します。体の動きは控えめで、足は床に固定されたままです。画像を見せてユーザーに判断を仰いでください。

終了処理

  • モデルの場所をユーザーに伝えます:<out>/live2d/<name>-full.zip がアプリがインポートするファイルです。
  • 描画、切り抜き、アップスケール後の描画、および layers/full/ 内のすべてをバージョン管理に保持してください。<out> 内のものは全て再生成可能です。
  • 将来の実行で必要になることを学んだ場合(新しい種類の欠陥とその修正方法)、references/problems.md に行を追加してください。
  • 起動したビューアーとComfyUIを停止してください。

関連スキル