【AUTOMATIC1111】WildCardの多重化で親単語を継承できるか

DynamicPrompts AI生成
DynamicPrompts

AUTOMATIC1111の拡張機能Dynamic promptsで、あるワイルドカードを作る際に、他のワイルドカードの内容を継承できるかについて、思い通り動作するのか否か実際に試して記録しておきます。

さて、なぜこのようなチェックをしておこうかと思ったのかと申しますと、もし別のワイルドカードの単語を引用できるのならば、自作ワイルドカードのファイル管理と、それらを使ったプロンプトの組み立てがシンプルになるかなと思います。例えば、人間(職業)×10個、モンスター(種族)×10個の単語を別々のファイルに書いておいて、さらに、まとめ用ワイルドカードから呼び出すようにしておけば、頭の中で想像する「人間×モンスターを同時に出現させる」プロンプトの管理がしやすそうです。

それに、組み合わせは10 x 10 の 100通りという多様なバリエーションになり、想定外の画像が出力されることを期待して、生成する私自身がワクワクするわけでございます。

作業方法

例として「親.txt」に入力した単語を「子.txt」の中で「__親__」のように入力して、そのままプロンプト入力欄に「__子__」と記述することで、親の単語を継承できているかをチェックします。

チェック環境

Stable Diffusion Web UIAUTOMATIC1111
Stable Diffusion Web UI バージョンv1.9.4
sd-dynamic-prompts バージョンde056ff8 ←これが正しいのか分からん
使用するチェックポイントDreamShaper XL

テスト用ワイルドカード

ファイル名
(下段はテキスト内容)
説明
wildcard_oya_job.txt親1
Fairy
Harpy
Dryad
Necromancer
Dragonborn
ファンタジー世界の種族を5つ記入
wildcard_oya_effect.txt親2
Speed Lines
Glow
Impact
Sparkles
Fade
画像のエフェクト効果を5つ記入
wildcard_ko.txt
__wildcard_oya_job__上の「wildcard_oya_job.txt」の内容からワードを1個ピックアップすることを想定
wildcard_mago.txt
__wildcard_ko__ and Black
__wildcard_ko__ and White
__wildcard_ko__ and Red
__wildcard_ko__ and Blue
__wildcard_ko__ and Yellow
上の「wildcard_ko.txt」のテキスト内容からワードを1個ピックアップして「and 色」を付加することを想定。つまり「__wildcard_ko__」は元をたどって「wildcard_oya_job.txt」からピックアップしたプロンプトを生成してほしい。

やってみよう①|まずは親をチェック

Prompt

__wildcard_oya_job__ and __wildcard_oya_effect__

結果

例えば次のようなプロンプトが出来上がりました。

Necromancer and Fade

画像そのものは問題なく生成されました。Exifからプロンプトを確認してOK。DreamShaperはさすがに綺麗な画像を出力しますね。

ということで、まずは特に問題はなく・・・と思ったのですが、ワーニングが発生しておりました。今後のために次に記録しておきます。

警告発生

<wildcards>フォルダの中に任意フォルダを作って入れておくとワーニングが出る(下の例だと<XYZ>)。ところが同じ<wildcards>フォルダの中から一致するものを採用してプロンプトを組み立ててくれているようです。そのため、想定したファイルの中の単語を使って画像が生成されています。

WARNING:dynamicprompts.wildcards.wildcard_manager:No matches for wildcard ‘wildcard_oya_job’, used ‘**/wildcard_ko’ to match <TxtWildcardFile: C:\StableDiffusion\extensions\sd-dynamic-prompts\wildcards\XYZ\wildcard_oya_job.txt>

放っておくと想定外のファイルを参照しかねませんので、実際には次のようにフォルダ名付きでプロンプトを書いて生成します。

__XYZ/wildcard_oya_job__ and __XYZ/wildcard_oya_effect__

やってみよう②|子は親を継承できるのか?

Prompt

__wildcard_ko__ and Fantasy World

希望的には、__wildcard_ko__は、__wildcard_oya_job__の内容を表示して欲しいわけで、NecromancerFairyをピックアップして欲しいです。ということで↓

結果

例えば次のようなプロンプトが出来上がりました。

Necromancer and Fantasy World

成功です。Exifからプロンプトを確認してOKです。問題ありません。__wildcard_ko__は、親ファイル(wildcard_oya_job.txt)から1行づつピックアップしてプロンプトを組み立ててくれました。

やってみよう③|孫は”子の親”を継承できるのか?

Prompt

__wildcard_mago__

__wildcard_mago__は、__wildcard_ko__ and Black などがピックアップされ、
__wildcard_ko____wildcard_oya_job__となってほしいです。さらに、
__wildcard_oya_job__は、NecromancerFairyをピックアップしてくれると嬉しいです。

結果

例えば次のようなプロンプトが出来上がりました。

Necromancer and Black

こちらも成功です。Exifからプロンプトを確認してOKでした。

ということでございまして、「子」は「親」の単語を継承し、「孫」は「子(今回は親の受け継ぎから)」の単語を継承してプロンプトを組み立ててくれました。

まとめ

「継承」という言葉が正しいのか「引用」という言葉が正しいのかわかりませんが、いずれにしても目的は達成しました。これまでなんとなしに書いていたワイルドカードの継承をまとめておくことができました。ここまでお付き合いありがとうございました。引き続きよろしくお願いします。