Dynamic Promptsの使い方 プロンプトの一部をランダムに変化させ連続生成できる拡張機能(Stable Diffusion)

2023年6月18日日曜日

stable-diffusion

t f B! P L

Dynamic Promptsという便利な拡張を使ってみてほしい。

Dynamic Promptsとは

単語のリストからランダムに選び出し、プロンプトを組み立てて画像を生成するStable Diffusion WebUIの拡張機能です。

できること

  • 同じプロンプトだけど髪の色だけランダム、服装だけランダムで画像を生成する
  • 顔、ポーズ、構図、背景をランダムに生成していい組み合わせに出会えることを期待する
  • お気に入りのプロンプトをランダムでひたすら回す
  • 総当たりでプロンプトを試す

Dynamic Promptsのインストール

ExtensionsタブのInstall from URLでhttps://github.com/adieyal/sd-dynamic-promptsと入力してInstall。インストールが終わったらUIを再起動させます。

Dynamic Promptsが追加されているのでenabledにチェックが入っていることを確認したら準備完了。

基本的な使い方

プロンプトを書くとき{}の中に要素を|で分割して入力します。入力したらGenerate。

1girl, {white|red|blonde} hair, long denim pants, {2$$have an apple|have grapes|have a pen|have a cup of coffee}, upper body

{}の中から一つ、{2$$}の中から2つランダムに要素が選ばれてプロンプトに反映されます。例えば以下のようなプロンプトが作られます。

  • 1girl, blonde hair, long denim pants, have a cup of coffee,have a pen, upper body
  • 1girl, white hair, long denim pants, have a pen,have an apple, upper body

流石にプロンプトが雑すぎて融合してしまったが挙動はわかったので良し。

指定した要素をランダムで、batch countの数だけ生成できるので便利です。

ワイルドカードを使ってファイルから要素を選ぶ

{white|red|blonde}のような呪文を毎回書くのは大変なので、ファイルに要素を書いてそこからランダムに選び出す機能があります。

以下をcolors.txtとしてstable-diffusion-webui/extensions/sd-dynamic-prompts/wildcards/に保存します。

white
red
blonde

ファイルを保存した後、Wildcards ManagerタブのRefresh wildcardsを押すと反映されます。この画面から編集することもできます。

プロンプトに__(拡張子なしファイル名)__の形で入力すると、ファイルからランダムで要素が選ばれます。

1girl, __colors__ hair, sitting

この場合、以下のプロンプトの中からランダムで画像が生成されます。

  • 1girl, blonde hair, sitting
  • 1girl, white hair, sitting
  • 1girl, red hair, sitting

また、要素は1単語である必要はありません。

cat ears, sitting, smile
serafuku, school uniform, upper body

このように書くと各行からランダムで選ばれます。例えばよく使うプロンプトをいくつか書いておき、それをランダムで生成するという使い方ができます。

Combinatorial Generation

ランダムだけではなく、全ての組み合わせを試みることができます。例えば1girl, {red|blue} hair, {white|black|green} shirt, upper bodyとすると2*3の6通りの組み合わせで生成されます。

  • 1girl, red hair, white shirt, upper body
  • 1girl, red hair, black shirt, upper body
  • 1girl, red hair, green shirt, upper body
  • 1girl, blue hair, white shirt, upper body
  • 1girl, blue hair, black shirt, upper body
  • 1girl, blue hair, green shirt, upper body

Max generationsの数だけ生成し、0なら全ての組み合わせで画像が生成されます。また、一つの組み合わせにつき、Combinatorial Batchesの数だけ別seedで生成されます。

seed値

最初の1枚で元のseed値を使い、次からの画像は生成するごとに+1のseedが使われます。Advanced optionsのFixed seedにチェックを入れると同一seedで生成され、Combinatorial Batchesがあれば次の周に+1されます。

ワイルドカードをまとめる(*)

マッチした文字列全てを含むワイルドカードを使うことができます。

expression1.txt

smile, open mouth

expression2.txt

closed eyes, closed mouth

(*)を使ってexpression1とexpression2の両方から選ぶことができます。

1girl, __expression*__

これをCombinatorial Generationにチェックを入れ、Combinatorial Batchesを2にして生成。

指定通りに目と口を閉じたり開けたりしています。

既存のワイルドカードを使う

wildcardsに置くテキストファイルを自分で用意するのが面倒なときは、用意されているwildcardを使うこともできます。Wildcards Managerタブを開き、select a collectionから適当に選んでCopy collectionをクリック。今回はdevilkkwを選択してみます。

いくつか選んで利用してみます。とりあえず笑顔、髪の色、頭の飾り、姿勢。

1girl, __devilkkw/body-1/face_smile__, __devilkkw/body-1/hair_color__, __devilkkw/attire/attire_headwear__, __devilkkw/pose/posture_basic__

色々な画像が出てきました。しゃがんでる黒髪ヴェールのプロンプトを見てみると1girl, evil grin, black hair, veil, fetal positionとありました。fetal positionってなんだ?と思って調べてみると「胎位」。とても勉強になります。

その他便利そうなこと

ワイルドカードを使ったプロンプトの保存

settingsでsave template to metadataにチェックを入れるとwildcardに何を指定したかをメタデータに保存することができます。その場合、以下のように保存されます。

1girl, evil grin, black hair, veil, fetal position
Negative prompt: (worst quality, low quality:1.4), nsfw, censored, monochrome
Steps: 30, Sampler: Euler a, CFG scale: 7, Seed: 170283505, Size: 512x512, Model hash: f303d10812, Model: AOM3A1_orangemixs
Template: 1girl, __devilkkw/body-1/face_smile__, __devilkkw/body-1/hair_color__, __devilkkw/attire/attire_headwear__, __devilkkw/pose/posture_basic__
Negative Template: (worst quality, low quality:1.4), nsfw, censored, monochrome

おわり

知らなかった単語を見つけられたり、単純に生成効率が上がるのがよかったです。いつもと違う組み合わせを見つけたい、複数のパターンで連続生成したいときにとても便利な拡張機能でした。

QooQ