Stable Diffusion web UI(AUTOMATIC1111版)

Last-modified: 2022-10-11 (火) 14:13:05
lo08.jpg

詳細な導入方法は既に詳しいサイトがいくつもあるのでそちらに譲ります。
こことかこことかここを見るといいよ。

  • まず、事前に必要なものとしてpythonとgitをインストール。
  • 1111版webuiのインストール
    • ZIPでインストール
      • GithubのAUTOMATIC1111のページからzipをダウンロードし、任意のフォルダに解凍。
    • GITでインストール
      • インストールしたい場所でShift+右クリックをしてPowerShell ウィンドウをここに開くをクリック(旧Win10もしくはそれ以前はコマンドウィンドウをここで開く)
      • 下のコマンドをコマンドプロンプトをコピペしてEnter
        git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
  • modelsフォルダ内の、txtファイルで「ここにckptを配置せよ」と書かれているところにWaifu等任意のモデルファイルを置く。
  • webui-user.batを起動する。プロンプト画面の処理が進むが、初回起動時のみやたらと時間がかかるので注意。
  • プロンプト画面上に「Running on local URL:」とローカルアドレスが表示されたら起動完了。
  • 任意のブラウザでアドレスを開くとブラウザ上でローカルに操作ができる。
  • 更新について
    • ZIPでインストールした場合
      • 以後、更新があった際は落としてきた最新のzipファイルを既存のフォルダに上書きしてやるだけでよい。プログラムとかまったくわからんマンにもやさしい。
    • GITでインストールした場合
      • インストールフォルダ内でShift+右クリックをしてPowerShell ウィンドウをここに開くをクリック
      • 下のコマンドをコピペしてEnter(batにしておいても良い)
        git pull origin master


1111版はありがたいことに開発が非常に熱心で頻繁にアップデートをしてくれるのだが、それ故に上記のgigazine記事などは既に一部情報が古くなっている。
気をつけるべき点として、現在のバージョンでは使用するモデルファイルをmodel.ckptにリネームする必要がない。
また、modelsフォルダにはモデルを複数入れてよい。入れたモデルは起動後settingsタブ内、新しいバージョンならページ上部からいつでも切り替えが可能であり便利。
不要なモデルを後から削除したりしても問題ない。基本的にモデルはやたらとデカく容量をくうので、使わないものは消してしまうのもいい。

VRAMが4GB以下のヨワヨワなグラボで起動する場合メモリ不足になる可能性がある。
その場合、webui-user.batを編集しcommand line argumentsに--medvramと追記するとよい。
また、GTX1660系に特有のバグがあり、緑一色の画像しか出力されない場合がある。これはcommand line argumentsに--precision full --no-halfと追記すればよい。
(このあたりはアプデで修正されている可能性もあるが未確認なので注意)
参考はこちら

画像生成の基本として使う機能

細かい文法が環境によって異なることがあるため1111環境の方法をまとめておく。
なお1111はバージョンアップでトークン数の上限が解放されて、いくらでも呪文を乗せることができるようになっている。
※数が多ければその分処理は重くなるが、無理に削減する必要はなくなった

原文

  • ()で囲むと1.1倍強く出す
    (())と重ねて囲むと乗算で強調(2重なら1.1x1.1の1.21倍)
  • []で囲むと1.1倍控えめに出す(強さを/1.1=約0.909倍で下げる)
    ※[控えめ]はネガティブプロンプトではない。要素として入れたいが強調はしたくないという場合の指定。
  • (ward:1.5)と囲った中の最後尾に「:数値」を入れた場合は入力数値の倍率で強調する(1.5なら1.5倍)
    (ward:0.25)と数値を1.0未満にすればその分控えめになる
    • ※控えめに使う方での[ward:1]は全く別物の条件指定になるため強調控えめ指定には使えない
    • ※単体で確かめると気づくが倍率が高すぎると形にならない=機能しなくなる可能性がある。
      大きくても1.6前後が丁度良く、限度は2.0くらい。(())指定なら5重まで、限度7~8重
  • ※prompt内のキーワードとして()や[]を使いたい場合は\(~~\)と手前に\を入れる

原文
[ward:1]の指定はタイミングを指定したprompt条件指定に使える。

  • [条件前呪文:条件後呪文:条件数値]
    • 条件数値:step数かsteps割合を指定する。
      • 整数指定(8とか20とか)はその値が条件step回数になる
      • 小数指定(0.3とか0.5とか)は指定steps * 指定数値が条件step回数になる
    • 条件前呪文:stepが条件step回数になるまでprompt文として影響を与える(省略可能)
    • 条件後呪文:stepが条件step回数になった後からprompt文として影響を与える(空欄可能)
      • 呪文分の中には()や[]を使っても問題ない。
        条件を入れ子にしても機能する
記入例実行されるprompt
[XXX:30],step30までは無,step31からXXX,
steps70で[XXX::0.5],step(70*0.5)=35まではXXX,step36から無,
[XXX:YYY:40],step40までXXX,step41からYYY,に切り替わる

※結果の呪文がそのままpromptへ挿入されるため区切っていないと前後の文章とつながってしまう
「a [XXX:YYY:30] color,」という記載の場合は
 step30まで「a XXX color,」というpromptとして扱われ
 step31以降「a YYY color,」というpromptとして扱われるとのこと

Prompt Editingの例1:seed値固定での活用・要素の影響低減
この命令文が威力を発揮するのはseed値固定でpromptをいじっている時の「構図はいじりたくないけど影響のある要素を付け加えたい」という場合に
構図のだいたい定まってくるstepを狙って[XXX:0.5]などとすれば、構図への影響を最小限にしながらXXXの要素を付け加えるということが狙える。※ダメな時もある
同じように通常のランダム生成でも影響が大きすぎる呪文の発動を遅らせることで影響を抑える手法もとれる
例えば涙(tears)のような表情に大きく影響する要素を[teras,:0.6]のように遅らせると「ちょっと涙目」が狙える
Prompt Editingの活用性2:ネガティブへ導入
例えば「上半身が正面を向いているのに下半身が尻を向けている」という構図に出会うことがある
しかしhipなどをそのままネガティブに入れると下半身の描画自体が少し減ってしまいやすいなど若干影響が出てしまう
そこで[hip:10]のように入れることで下半身が出る構図を容認しつつ尻が出ていたら途中から抑えることが狙える

prompt入力フォームとは別に、すぐ下にNegative prompt入力欄があり、そこへ入力する。
ネガティブに記入した要素はなるべく回避しようとしてくれる。100%排除してくれるわけではない。
こちらの入力でも(強調)・[控えめ]の指定が可能で、特に抑えたい要素は(ward:1.6)などと記入してもよい。
※通常のpromptで強調の倍率を高くしすぎると形が崩れやすいようにネガティブでも大きすぎる強調は全体に悪影響を及ぼし、出力をおかしくしてしまう。限度2程度、強くても1.6くらいが丁度よさそう?

原論文
たぶん「promptをAND(大文字)の前後でpromptを分割しそれぞれを重ね合わせて出力する」みたいな記述法。
異なる要素を持たせた存在を並列生成できるのでは?と期待したりするが実際は互いに影響を及ぼしあうため「片方の呪文で塗りつぶされる」「別々に指定した要素が一つに混ざる」などの場合が多くて扱いは難しい。

「学習データからどの手法(サンプラー)で構成を行うか」の選択。比較表

  • 考えないサンプラー選び
    1. てきとうに出力させて楽しむ:Euler a(初期設定)
    2. 呪文を詰めてstepsを多めに出力させる:Eulerなど

生成状況は使うメゾットだけでなくstepsやCFG Scaleによっても微妙に異なり、メゾットによって得意不得意のある印象もある。
正直実際に使ってみないとどうなるかわからない! いくつか試してマッチするものを選ぼう。
※一部メゾットは一部文法に対応していないことがある?(AND文を入れるとDDIM/PLMSが使えないなど)
(以下、おおよその印象※CFG ScaleやStepsによっても違いが出るため参考までに)

Euler a(初期設定)かなり大味。分かりやすいが、緻密さに欠けやすい
1つ1つを大きく要素を出しstepを重ねると大変化もありえるなどやや不安定
出力を煮詰めるならEuler a以外を使った方が良さそう
Euler/LMS/Heun/DPM2/LMS Karras/DPM2 Karras/DDIM/PLMS
(仮グループ)上記グループは近い構図を出しやすい傾向
低1-15程度の初期段階では違いが大きいが、20~40stepほどでほぼ出来上がり
それ以上のstepでは少しずつ詳細を詰めていく
Euler aに比べ要素が細かくなる傾向があり その分余計な描画の可能性も増える
(CFG Scaleが高いと独自性が出やすいかも?)
Eulerこの中ではstep毎の描画が少し緩く、同stepsだとふんわりとした印象になる
(詳細を詰めるには他より多くのstepsが必要)
LMSEulerやHeun他の中間くらいでわずかに緩い
Heun
DPM2
この2つはstepが増えるほど近い絵になりやすい
Eulerに比べ早いstepで完成形に近づく
LMS Karras
DPM2 Karras
より細かい構図を出す傾向があり この中でもやや外れた構図になりやすい
DDIMconfigになんか設定がある
低steps3-5程でラフな描画の画像を作れる
※stepを増やすとこの中に似た形へ一気に近づき、少し違う程度のサンプラーになる
PLMSDDIMに近いがよりカッチリした表現の傾向がある
低stepのラフもカッチリする分異形さが強い
その他
DPM2 a
DPM2 a Karras
Euler aと同様、a系には緩さと不安定さがある DPM2もaの有無で出力は大きく違う
DPM fast早いが雑 stepsが結局多く必要で不安定
DPM adaptive1stepで完成形を出力する特殊なサンプラー
steps設定を増やしても変化がない

なお細かい構図を出せるサンプラーほど1stepの処理の重い傾向があり、出力にそれだけ時間がかかりやすい

画像を生成する際に特殊な加工を行う設定

顔に補正をかける。ぼやけ気味の表情をくっきりさせる。
※顔と認識されないものは修正されない

素材制作用。タイルのように並べる素材を作る。
上と下、左と右の柄を合わせて、並べるとつなぎ目がわからなくなるアレ

512x512より大きなサイズで生成する際にヘンテコな人物の出現*1などを抑制する。生成に大きな影響を与える。
512x512以下で生成しているなら必要ないはず。

シード値はランダム要素の元にする値で、同じ設定で同じシード値なら同じ画像を生成できる。
初期値「-1」は生成のたびに適当な乱数を入れるため、生成のたびに異なる画像が出てくる。
シード値入力欄の右の2つのボタンはサイコロが-1を入れるボタン、
その右のボタン(リサイクルマーク)は表示中の出力画像のシード値を入れてくれるので、同じシード値を1クリックで再利用できる。

連続して多数の画像を出力する際は「1枚目のシード値から2枚目以降+1ずつする」ように生成される。
これにより多数のシード値の出力比較も手軽にできる。

選択した生成画像の下の「Save」「Send to img2img」「Send to inpaint」「Send to extras」から画像の次の場所へ送れる。

生成した画像は設定で全て自動保存されるが「Save」で選択している生成画像をtext2img/img2img問わず「Saveした画像用のフォルダ」へ保存できる。

選択している生成画像をimg2imgタブのimg2img/inpaint入力画像へ送り、すぐimg2img/inpaintできる状態にする。
text2imgから送った場合はtext2imgの入力フォームにあるpromptも一緒に送られる。

選択している生成画像をExtrasタブのsingle image入力画像へ送り、すぐExtrasの処理をできる状態にする。
Extrasの処理については後述


機能が多すぎて全部は説明しきれない…
なのでより詳しくはこちらのページ(英語)を参照。

text2img/img2imgの設定項目の一番下にあるScriptのプルダウンメニューから選べる便利な特殊機能

img2imgタブで使える機能の一つ。
既存の画像の外側を描き広げることができる。
注意点として、Sampling Stepsを80~100、SamplerはEuler a、Denoising strengthは0.8での使用が推奨されている。
でないとよくわからないもやもやが描画されるなんてことも。

img2imgタブで使える機能の一つ。
既存の画像にマスクを描き込み、そのマスク内だけを描画し直しさせる機能。
指が気になるのでそこだけ描き直させる、小さめの人物の顔が潰れているので描き直させるetc.様々に使い道がある。
基本的に描き直しさせる場合はMasked contentの項目をoriginalにしておくといい。
他にぼんやりした感じに塗り直す、ランダムノイズで塗り直す、ベタ塗りで塗り直すなどもあるが殆ど使わないよね…。
また、Inpaint at full resolutionの項目にチェックを入れておくことで、マスク範囲のみをフル解像度で描き直した状態になる。
なお当然だがDenoising strengthの影響を受けるため大きく描き直させるときは大きめにすること。微調整であれば中程度にする。

呪文に"|"を入れて区切ることで、区切った範囲のワードをオンオフし出力結果がどうなるかを比較した画像を作ってくれる。
呪文の効き具合を吟味するのにとても便利。

img2imgタブで使える機能の一つ。
画像をいくつかに分割した上で拡大し詳細に描き直して統合することで、元画像の解像度を高めながら縦横2倍サイズに拡大することができる。
すごい便利。
Denoising strengthを0.2くらいに抑えて使わないと全然違う絵がちぐはぐに合成された絵が出たりするので注意。

img2imgタブで使える機能の一つ。
img2imgで出力された画像を元にimg2imgをかけて…という処理を指定した回数だけ繰り返しやってくれる。
元画像から処理が繰り返すうちに別物になっていく過程が楽しめる。

Prompt matrixの出力項目設定版。異なる設定での出力結果の違いを比較した画像を作ってくれる。
記入ルール(英語)
とりあえず数値の入力は「最小値-最大値 [n]」(最小値~最大値までn分割して調べる)と記入するのが表の大きさを間違えなくて済む。

画像を拡大処理をして保存するための機能で、text2img/img2imgのタブから生成した画像は1ボタンでExtrasへ送れる。
拡大する際に処理を施して細部を少し綺麗にしながら拡大し、処理後の画像は自動でExtras用のフォルダへ自動保存される。
※ただしPNGのメタデータは上書きされて元の情報が失われる。そのためメタデータ内の情報を保管しておきたい場合は元のpng画像も一緒に保管しておくように。
メタデータについては下記

text2img/img2imgで生成したPNG画像にはpromptや各種設定、seed値など生成に必要な情報がメタデータとして一緒に保存されている。これはPNG画像をテキストソフトで開いても確認はできる。
このPNG infoタブでPNG画像を入れると情報を表示し、さらに「send to text2img(img2img)」で同じ設定での再生成を行うことができる。
※text2imgで生成された画像なら同じ環境であれば全く同じ画像を生成することができるが、モデルデータが違うなど環境にズレがあると同じ画像にならない。img2imgで加工された画像もpromptなどの情報は入っているがtext2imgに入れてもそのものを出すことはできない。
※PNGのメタデータは対応していない方法で保存したり、当然他の形式で保存しても失われる。

画像生成に用いるモデルデータ[ckptファイル]をMerge、ブレンドできるタブ。
使い方は入っているckptファイルを選んで名前を決めて割合を調節して出力するだけ。

こちらを参照

設定画面からはファイルの保存やより細かい処理に関する設定を行える。正直細かいことはわからない

初期設定だとおそらく出力した画像はすべて自動保存される仕様になっている。
もし大量に生成するとなると結構なファイルサイズになってくるため保存フォルダはHDDなどへ変更しておいてもいいかもしれない。
画像を保存する際のファイル名に情報を入れることもできる。ファイル名ルール(英語)

設定の初期値などはSettingsタブではなく、webuiフォルダ内にある「ui-config.json」ファイルを編集することで変更できる
特に「"txt2img/Batch count/maximum": 16,」の16を変えるとtext2imgを一度に回す回数の上限を変更できる
その他にも好みの設定があるのならこれで変更しておくと起動のたびに変更する手間を省ける



*1 Stable Diffusionは512x512の学習データから画像を生成するため縦横512を超えるとその範囲外への生成で異常な生成が行われてしまう