Stable Difussionでは、プロンプトと呼ばれる英単語や文章で指示を与え、画像を生成します。
英単語をそのまま並べるだけでも画像は生成できますが、カッコや数字を使うことでより細かい指定が可能です。
今回は画像を比較しながら、プロンプトの基本的な入力方法について解説します。
なお、この記事はStable Difussion Web UIがインストールされている方を対象にしています。
インストールがまだの方はこちらの記事を参考にしてみてください。
Stable Diffusion Web UIでプロンプトを入力する場所は2つ
Stable Diffusion Web UIにはmプロンプトを入力する欄が2つあります。
- プロンプト
- ネガティブプロンプト
プロンプト
プロンプトには画像に加えたい要素を入力します。
例えば「黒髪の少女」を生成したいのであれば「black hair,girl」や「The girl with the black hair」など。
モデルによって異なりますが、一部日本語も反映される場合があります。
こちらはシード値(ランダム性を制御するもの)を同じにして、プロンプトだけ変えたものです。
英語・日本語、単語・文章によって、生成される画像も変化します。
ネガティブプロンプト
ネガティブプロンプトは画像に加えたくない要素を入力します。
例えば低画質な画像を生成したくない場合は「low quality」、アダルト要素を除外したい場合は「nsfw」など。
ネガティブプロンプトを使うと、生成される画像をより限定的にすることができます。
【Stable Diffusion Web UI】ネガティブプロンプトのコツは?綺麗な画像を生成する方法
プロンプトの基本的な入力方法
プロンプトには影響を強調したり、減少したりできる機能があります。
ここではプロンプトの具体的な入力方法やルールについてご紹介します。
プロンプトは入力順が影響する場合がある
プロンプトは入力する順番によって、生成結果に影響がでる場合があります。
一般的に手前の要素が強く影響し、後ろのプロンプトの影響は少なくなると言われています。
実際に「1girl,black hair」を入れ替えて生成してみました。
ほぼ同じですが、背景や口元の辺りに微妙な変化があります。
ただ入力している要素自体に、そこまで大きな変化はありません。
今まで画像生成していても順番を変えて上手く生成できたということがほぼないため、あまり気にしなくていいような気もします。
後述する「BREAK」を使えば、プロンプトの影響範囲を限定することができます。
プロンプトは75文字で1つのチャンクになる
チャンクは情報やデータの塊のこと指し、プロンプトは75文字1チャンクで自動的に区切られます。
プロンプトが長いと1つのチャンクに異なる要素が混ざってしまうため、髪色が服の色にも反映されてしまうなんてことが起きやすくなります。
チャンクごとに同じ要素をまとめておけば、そういった影響が少なくなるため、分けて使う方も多いです。
大文字で「BREAK」と入力すれば、そこまでを1つのチャンクとして扱うことができます。
以下は被写体、服装、画質をそれぞれのチャンクに分けた例です。
1girl, black hair,BREAK,suit,BREAK,masterpiece
プロンプトを見やすくなる効果もあるので、同じカテゴリなどでチャンクをまとめておくと修正もしやすくなります。
カンマと半角スペースの違い
カンマはプロンプトを明確に区切るときに使います。
例えば「orange juice」はオレンジジュースですが、「orange, juice」にするとオレンジとジュースが別のプロンプトとして処理されます。
結果はほぼ同じですが、おそらくカンマの方は分かれて認識されていると思います。
また半角スペースは名詞+装飾語や、文章でプロンプトを入力する場合に使います。
例えば以下のように文章で入力する場合は、半角スペースで区切ることが多いです。
()丸括弧
()丸括弧はプロンプトを強調したいときに使用する記号です。
複数プロンプトがある場合に、特定のプロンプトの影響を強めることができます。
具体的な数値で言うと丸括弧で囲むとその要素が1.1倍になり、重ねる数に応じで乗算されます。
1*(1.1^n) n=丸括弧の数
またプロンプトの後にコロンと数値で直接倍率を指定することも可能です。
例)cherry blossom:1.1
値を1以下に指定するとその要素は弱まります。
なお、プロンプトを選択した状態でCtrl+上下キーを押すと、簡単に値が調整できます。
[]角括弧
角括弧は複数使い方があり、1つは囲んだプロンプトの要素を弱めることができます。
ネガティブプロンプトはその要素を除外しますが、角括弧は目立つ要素を抑えたいときなどに有効です。
丸括弧と同じく重ねる数に応じで乗算されます。
1/(1.1^n) n=角括弧の数
[]角括弧と値
角括弧に値を指定すると、重みではなくプロンプトを反映させるタイミングを指定できます。
例えばSampling Stepsが20のとき、[crying:15]とするとstep15以降でcryingが反映されます。
また[A:B:15]という書き方をすれば、step15でプロンプトAをBに切り替えるという指定ができます。
例)[black:red:15] hair
これが小数点の場合は割合で計算され、赤と黒が混ざったような髪の毛になります。
整数値と違い[black:red:0.5] hairにした場合、Sampling Stepsが50%のところでredが混ざります。
50%なのでsteps10ならsteps5のとき、steps12ならsteps6でredが追加されるという感じです。
整数値の方と同じシード値ですが、全画像にblackとredの要素が反映され、赤と黒が混ざり合った髪色になっているのがわかると思います。
AND・NOT
小文字のandはそのまま〇と〇になりますが、大文字にするとプロンプト同士を融合できます。
NOTは特定の要素を否定できるものです。
「cloud AND bear AND NOT White」とすると「雲と熊を融合して白を使わない」という意味になります。
なお、ANDとNOTはモデルやサンプラーによって反映されたり、されなかったりだったので、使えるシーンは限られてしまうかもしれません。
公式を参考にいろいろ試行錯誤してみてください。
プロンプトのエラー
プロンプト内で入力に問題がある場合、右上のカウンターに赤い枠線が表示されます。
このように赤くなっている場合は、カッコの数や位置がズレてうまく機能していない可能性があります。
プロンプトを見直して問題がないか確認してみてください。
基本的なプロンプトの入力方法まとめ
今回はStable Difussion Web UIのプロンプトの入力方法について解説しました。
正直使いどころが難しい機能もありますが、プロンプトを効果的に活用することで、モデルに対して具体的な指示や制御を与えることができます。
特に強調・BREAK・弱める構文は画像への影響も大きので、理想の画像目指して使ってみてください。