開発Tips

ローカル Stable Diffusion × Claude Code で育成キャラ84体を作る — こつと失敗

「ぽんっ!」(旧称:でいりんぐ)の育成キャラ(動物 84 体)を、ローカルの Stable DiffusionClaude 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 は「一発で完成品」ではなく「工程の一部」と割り切るのが結局は近道でした。