ローカル Stable Diffusion × Claude Code で育成キャラ84体を作る — こつと失敗
「ぽんっ!」(旧称:でいりんぐ)の育成キャラ(動物 84 体)を、ローカルの Stable Diffusion と Claude Code の組み合わせで全刷新しました。1 体につき「成体・最終進化・卵・幼体 × 表情 × 色違い × GIF」と必要枚数が多く、手描きでは現実的ではありません。生成 AI で量産しつつ、生成 AI が苦手な部分は後処理に切り出すという切り分けが肝でした。こつと失敗を残します。
背景(当時の状況)
きっかけは 2026-07-08 の「育成キャラを全部刷新でOK」という一声でした。既存キャラを一新して 84 体を作り直すことになり、手描きは非現実的だったのでローカルの Stable Diffusion を使うことに。とはいえ最初から順調だったわけではなく、生成 AI に何を任せられて何を任せられないかを、失敗を重ねながら切り分けていったのがこの作業でした。
失敗①: txt2img で装飾(王冠など)は乗らない
最終進化に王冠や花冠のような装飾を付けたかったのですが、これがなかなかうまくいきませんでした。
- txt2img で「王冠をかぶった動物」とプロンプトしても、王冠が塊状につぶれる/頭ではなく変な位置に出る/白飛びする、といった破綻が頻発。
- img2img で装飾を足そうとしても、装飾が乗らないか、色が本体に移る(色移り)/お腹の造形が崩れる、が起きる。
- 特に王冠が頭の上に出ないのが厄介で、耳や横長の体だと「頭の位置」をモデルが取り違えます。
対処①: 装飾は PIL 描画の PNG を後処理で合成する
結論は、装飾は生成 AI に任せず、後処理で合成するでした。
- 王冠・花冠・リボン・星・輪っかなどを PIL で描いた PNG 素材として用意。
- 動物本体(生成物)に、装飾 PNG を別レイヤーとして重ねる。
- 頭の自動検出は破綻する(耳・横長体で位置がずれる)ので、手動配置エディタ(ブラウザで動く簡易 HTML)で位置・サイズ・角度を決め、その配置情報を JSON に書き出して合成スクリプトが読む。エディタと合成で同じ変換式を使うことで、プレビューと結果を一致させています。
「生成で塊にする」より「部品を描いて重ねる」ほうが、狙いどおりの装飾を安定して量産できました。
失敗②→対処②: 目のばらつきは共通パーツで統一する
生成物は目の形・大きさ・左右対称性がばらつくため、そのままだとキャラ同士の統一感が出ません。これも装飾と同じ発想で、共通の目パーツ(形×色のバリエーション)を後合成して統一しました。目データも専用のエディタで配置し、輪郭のモヤを消すバリア処理を入れています。
こつ: 色違いは補色反転で自動量産する
色違い(alt)は 1 体ずつ生成し直すのではなく、成体・最終進化の PNG を補色反転して自動生成しています。10% で出る色違いのために追加の生成コストをかけずに済みました。
こつ: 多シードで生成し、破綻分だけ取り直して目視で採用する
1 種につき複数シード(4〜6 枚程度)を生成すると、必ず一定数が破綻します(塊化・目の非対称など)。ここで全体を作り直すのではなく、破綻したものだけ別シードで取り直し、生成した候補から使えるものを目視で採用する運用にしました。全体をやり直さないぶん、レビューの回転が上がります。
こつ: 安定 ID を崩さない(Claude Code に任せる範囲)
- ファイル名は
NNN_name.pngの安定 ID を維持し、途中で改名しない。目データや装飾配置は ID に紐づくので、改名すると手戻りが大きい。 - カテゴリ(生息域)はファイル名ではなくメタデータとして持ち、番号帯からカテゴリを判定する関数で機械的に振り分ける。
- Claude Code には パイプラインのスクリプト実行・一括処理・コード改修(カタログ 84 体化、多言語リソース更新)を任せ、最終的な絵の良し悪しの判断は人間が握る、という分担にしました。
まとめ
生成 AI でキャラを量産するときの学びは、「量産できる部分」と「後処理に切り出す部分」を最初に切り分けることでした。
- 本体シルエットや色バリエーションは生成・自動処理で量産できる。
- 王冠などの装飾・目の統一のような『正確さが要る部分』は、PIL 描画の部品を後合成したほうが速くて安定する。
- 破綻は避けられない前提で、多シード生成して破綻分だけ取り直し、目視で採用してレビュー負荷を下げる。生成 AI は「一発で完成品」ではなく「工程の一部」と割り切るのが結局は近道でした。