AUTOMATIC1111の拡張機能Dynamic promptsで、あるワイルドカードを作る際に、他のワイルドカードの内容を継承できるかについて、思い通り動作するのか否か実際に試して記録しておきます。
さて、なぜこのようなチェックをしておこうかと思ったのかと申しますと、もし別のワイルドカードの単語を引用できるのならば、自作ワイルドカードのファイル管理と、それらを使ったプロンプトの組み立てがシンプルになるかなと思います。例えば、人間(職業)×10個、モンスター(種族)×10個の単語を別々のファイルに書いておいて、さらに、まとめ用ワイルドカードから呼び出すようにしておけば、頭の中で想像する「人間×モンスターを同時に出現させる」プロンプトの管理がしやすそうです。
それに、組み合わせは10 x 10 の 100通りという多様なバリエーションになり、想定外の画像が出力されることを期待して、生成する私自身がワクワクするわけでございます。
作業方法
例として「親.txt」に入力した単語を「子.txt」の中で「__親__」のように入力して、そのままプロンプト入力欄に「__子__」と記述することで、親の単語を継承できているかをチェックします。
チェック環境
Stable Diffusion Web UI | AUTOMATIC1111 |
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__の内容を表示して欲しいわけで、NecromancerやFairyをピックアップして欲しいです。ということで↓
結果
例えば次のようなプロンプトが出来上がりました。
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__は、Necromancer やFairyをピックアップしてくれると嬉しいです。
結果
例えば次のようなプロンプトが出来上がりました。
Necromancer and Black
こちらも成功です。Exifからプロンプトを確認してOKでした。
ということでございまして、「子」は「親」の単語を継承し、「孫」は「子(今回は親の受け継ぎから)」の単語を継承してプロンプトを組み立ててくれました。
まとめ
「継承」という言葉が正しいのか「引用」という言葉が正しいのかわかりませんが、いずれにしても目的は達成しました。これまでなんとなしに書いていたワイルドカードの継承をまとめておくことができました。ここまでお付き合いありがとうございました。引き続きよろしくお願いします。