複数キャラ画像の生成 - Zuntan03/EasySdxlWebUi GitHub Wiki

新 ControlNet の inpaint と anytest で、複数キャラ画像を高打率な txt2img で着実に生成します。
キャラの姿勢がわかれば、写真無償の 3D モデルベタ塗り などからでも生成できます。

みんなで温泉街です。

ひとりめ

マスク指定が見やすいように、元画像に説明用の色を付けています。
実際に試す際には色を付ける必要はありません。

奥にあるモノから生成するのが基本ですので、本来はまず背景を用意するのが推奨です
実際、きららジャンプ では先に背景を生成していました。

シンプルな背景を好まれる方も多いでしょうし、今回はとりあえずグラデーションを置いておきつつ、あとから背景を差し替えてみます(色化けが発生しました)。

  • forge は Hyper-SD <lora:Hyper-SDXL-8steps-lora:1> を使って、CFGスケール1.0 にすると大幅に高速化します。
    • ただしネガティブプロンプトが効かなくなりますので、無効にしたいモノは NegPip の (negative_word: -1) で対処します。
  • ひとりずつ生成するので、Forge Couple のようにキャラ LoRA が混ざる心配はありません。
    存分にキャラ LoRA をご利用ください。
  • 絵の内容に合わせたプロンプトにする必要があります。
    • 一行目で表情や手のプロンプトを指定しています。
      敬礼しつつも親指の伸ばしたかったのですが、エルフ耳と位置がかぶって同化してしまい、上手くいかず。
    • LoRA の呼び出しプロンプトから、靴などの画面に入らないものは取り除きます。

  • Hyper-SD を サンプリング方法Euler A SGMUniformCFGスケール1.0 で利用します。
  • Hyper-SD の高速化に合わせてステップ数を多めに設定しています。
    • 2010 といった切りの良い数にしておくと、様々な処理の切り替えタイミングを指定しやすくなります。
  • よさげなシードを見繕ってから、高解像度補助 を有効にして、1.5 倍で掛けます。
    • アップスケーラー は実写系なら 4x-UltraSharp、そうでなければ 4x-AnimeSharp が安定です。
    • 高解像度補助 を利用したくない場合は ADetailer をご利用ください。
    • ノイズ除去0.40.6 あたりでお好みで。
      ノイズ除去 を細かく調整するよりも、困るまでは 0.5 固定で any 系 ControlNet で絵の崩れを防ぐほうが楽です。

ひとつめの ControlNet は inpaint で、マスク指定した場所以外を書き換えないようにします。

  • マスク指定のキャンバスでは、いくつかのショートカットが使用できます。
    • Alt + マウスホイール で拡大縮小ができます。r キーでリセットです。
    • Ctrl + マウスホイール でペンの太さが変わります。
    • 設定Canvas Hotkeys でショートカットの確認と設定ができます。
  • エルフ耳やアホ毛が生えるであろう場所は、大きめにマスクします。
  • Use Mask を有効にすると、マスク画像で範囲を指定できます。
  • プリプロセッサinpaint_only+lamaモデルKataragi_inpaintXL-lora128 です。
    • Download/ControlNet/kataragi-ControlNet.bat でダウンロードできます。
  • Ending Control Step は気分で 0.20.3 にしています(0.0 はマズいようです)。
    • 全体のステップが 20 ステップなら、46 ステップですね。

ふたつめの ControlNet は anytest で inpaint の位置にキャラが来るように構図を制御します。

  • 今回のようなラフ画像の他に、写真3D モデル画像ベタ塗り などの、カタチ・構図を制御する画像を指定します。
  • プリプロセッサNone です。
  • anytest の モデルEnding Control Step は状況に合わせて調整します。
    求める構図が出なかったら制御を強めるように調整し、入力画像そのままでうまく書き換えができなかったら制御を弱めるように調整します。
    • anytestDownload/ControlNet/2vXpSwA7-CN-any.bat でダウンロードできます。
    • モデル 欄に anytest が表示されない時は、右側の更新ボタンを押してください。
      • 画像生成モデルを変更した際に、ControlNet のモデルが勝手に変更される場合があります。
    • anytest には v3・v4、Animagine 用(_am_)・Pony 用(_pn_)、dim(_dim8dim256) といったバリエーションがあり、モデルや LoRA や用途で使い分けます。
      • キャラ差し替えには v3 を、アップスケールなどのカタチを残したいときには v4 を使っています。
      • Animagine・Pony は基本は画像生成モデルに合わせます。
        ただし、異なる組み合わせによる弱い制御が、程よく使える場面もあります。
      • dim が高いと構図を細かく・より強力に制御します。
    • 今回のようなキャラ差し替えでは、坊主頭が出ても困りますので程々に構図を制御する必要があります。
      • Ending Control Step は直感的に構図の制御できます。
        • 0.10.3 なら、画像の方向性だけ決めてあとは自由に生成します。
        • 0.81.0 なら、最後まで入力画像の構図を維持しようとします。
    • LoRA 使用時はより強力に構図を制御する必要があります。

今回はキャラ差し替えなので v3 を選びつつ、手の形状をなるべく残すために dim256 を選んでいます(が、長く伸ばした親指は拾えていません)。
キャラ LoRA を使用していますが、高 dim なので Ending Control Step0.3 です。
最初のキャラは画像に他の情報が無いために制御しやすい、といった側面もある気がします。

anytest はモデルや LoRA や用途によって相性がありますので、ご利用の状況に合わせて使い分けてください。

生成した画像で気になる点があれば、LamaCleanerCpu.batGIMP で随時はやめに修正します。

ふたりめ

ひとりめの画像を ControlNet の入力画像にして、ふたりめを書き足します。
ひとりめの設定を破棄できるので、人数の増加による急激な難易度上昇はありません。

  • キャラ LoRA を別のモノに変更しています。
    複数のキャラ LoRA を同時に使用するのは、3 LoRA あたりからとても難しくなります。
  • 表情や手の形状など、状況に合わせてプロンプトを調整しています。
  • Generation 設定に変更はありません。
  • inpaint は画像を生成したものに変更し、マスクを指定し直します。
    • ローブの裾を生成するために、下の方までマスクを指定しています。
  • anytest は Ending Control Step0.3 から 0.4 に高めました。
    • 胸の大きさによるアウトラインの逸脱を抑えるためでした。

さんにんめ

キャラが重なっており、かつ顔の十字線が胸の谷間として認識され、打率が下がってしまいました。
GIMP で顔の十字線を「へのへのへ」字にしたら、事なきを得ました。
顔と認識させるのにどのくらい適当に描いても問題が無いかの例であり、求める絵に近ければ打率は上がります。

キャラが重なっていなければ、7キャラ並べても 問題ありません。

  • LoRA を差し替えてプロンプトを調整しています。
    • 4girls で重なっている部分に手や顔が生成されるように誘導しています。
    • アニメの状況に合わせて、泣いてみてもらいました(2024/06/07)。
  • Generation と anytest は変更なしです。
  • inpaint は画像を差し替えて、アホ毛分も含めてマスクを指定し直します。

よにんめ

顔を「ののワ」にすることでそこそこの打率でキャラを出せたのですが、キャラと重なった状況では高難度の手の姿勢が絶望的に再現できませんでした。
そこで 1キャラ画像を別で生成し、GIMP雑コラしたものを ControlNet の入力画像にして 対処しました。
求める絵に近い絵を用意しつつも、txt2img で再生成することで、雑コラを手軽に馴染ませることができます。

同様の考え方で、満足ではないがそこそこのクオリティの画像が生成された場合に、ControlNet の入力画像を生成された画像に差し替えることで打率を高めることもできます。
今回は手の形状が複雑だったため、そこそこの形状の手を修正したくなかったので、そこそこ画像への差し替えは行いませんでした。

  • プロンプトの指定内容は変わりませんが、LoRA が無くともモデルが自力で生成できるキャラなので、モデル用の指定もしています。
  • Generation は変更なしです。
  • inpaint はアホ毛部分のようにマスクを厳密めに指定しています。
    が、境界を馴染ませるのも目的ですので、簡単に指定できる雑さで問題ありません。
  • 雑コラした元絵から忠実な画像を生成したいので、anytest は v4dim256Ending Control Step1.0 にしています。

背景追加とアップスケール

最初に一番奥の背景から生成していれば、この時点で完成だったかもしれません。

背景は別で適当に生成したものを GIMP で雑コラしました。

キャラのエッジが雑コラ相当のクォリティなので、img2img のアップスケールで馴染ませます。

  • プロンプトは Hyper-SD の LoRA のみです。
    • 画像全体のプロンプトやシードがあれば、より高品質なアップスケールができます。
  • Generation は Hyper-SD 用の設定以外は、普通な img2img の設定です。
    • ノイズ除去強度0.10.4 ぐらいでお好みで。
  • 雑コラした元絵に忠実な画像を生成したいので、anytest は v4dim256Ending Control Step1.0 です。

今回はプロンプトが空でしたので、これにより色化けが複数箇所で起こっていることに後で気が付きました。
Forge Couple で色化けしやすい箇所の色指定をすると回避できます。
が、やはり背景を最初に用意してしまうのが確実ですね。

おまけ

アップスケールが終わってから温泉街にしたくなったので、久しぶりに Layer Diffuse を使ってみました。
背景透過画像をサクッと生成できるのは良いですね。

GIMP で雑コラして完成です。