PromptsをDynamicにするStable Diffusion web UI用の拡張機能の一つ。
分岐するプロンプトを用意すると生成ごとに変化するプロンプトを使えるようになる。
生成ごとに細かい変化を作って、生成画像を変化させる。マンネリ防止ができる。
概要 できること
- Stable Diffusion web UI用の拡張機能の一つ、ダイナミックプロンプト。
- インストールすると、プロンプト*1でダイナミックプロンプトの構文を使えるようになる。
- {リスト|プロンプト}
- __ワイルドカード__
- 分岐するリストは、ファイル"ワイルドカード"として用意しておくことで、
プロンプトからそのファイルの中身を分岐リストプロンプトとして呼び出すこともできる。例えば、プロンプト画面に一々
{aqua hair|black hair|blonde hair|blue hair|brown hair|green hair|grey hair|orange hair|pink hair|purple hair|red hair|white hair},
と入力するのは冗長で読みにくい。
大量の分岐リストを使うならtxtファイルへ1行1分岐ずつ並べて書いて、aqua hair black hair blonde hair blue hair brown hair green hair grey hair orange hair pink hair purple hair red hair white hair
wildcardsフォルダへ仮に「hair_color.txt」というワイルドカードとして保存しておいて
プロンプト中では保存したtxtファイル名などをワイルドカード構文で書けば__hair_color__
たったこれだけでファイルの中身をリスト化して選ばせることができる。
- 長いプロンプトのリストはワイルドカードで用意するとすごく使いやすくなる。
髪型リスト、衣装リスト、場所リスト、あるいはアングルリスト、表情リスト、ポーズリストなどなど、使い道は多彩。
長大な分岐リストを組み合わせれば思いつかないような画像も生成してくれて、末永く楽しめる。- ワイルドカードは配布されてるものもあり、未知の世界を開ける。
- なおワイルドカードはよく使うプロンプトの入力の補助という使い方もある。
- 特にワイルドカードを使い倒すようになってくるとYAML形式のワイルドカードが便利になってくる。
YAMLでは1つのファイルで多数のリスト・フォルダ階層をまとめて作成できるなど、細かいことをやるならYAMLが便利。
- 分岐するリストは、ファイル"ワイルドカード"として用意しておくことで、
- 応用:指定オプション設定
- {1-2$$リストの|中から|何個|選択|するか|といった|設定}があったり、
{}には{5::重みづけ|という設定が|0.5::できたり}といった、細かいオプション指定がある。
- {1-2$$リストの|中から|何個|選択|するか|といった|設定}があったり、
- 応用:組み合わせ生成
- ランダムだけでなく、オプション設定により全ての組み合わせ生成といった機能で、
用意したリストの中身の全パターンで生成させる・複数のリストの組み合わせ全パターンで作る、といったこともできる。 - 細かい比較だけでなく、「一連の流れを一気に生成したい」といったときにも使える。
- なお、連続生成用の生成オプション指定を使えば、
「一部を組み合わせパターンに含めずランダムな出力のまま出す」「一部を順番に生成する」といった調整もできる。
- ランダムだけでなく、オプション設定により全ての組み合わせ生成といった機能で、
- 応用:その他特殊構文
- 地味なところとして「プロンプト上での変数機能」も使えるようになる。
ランダム生成を想定しているが、ランダム生成以外にも応用できる。
- 地味なところとして「プロンプト上での変数機能」も使えるようになる。
<LoRA:を使ってると__たまに読み込まれなくなる問題:1>など
Dynamic Promptsでは通常「__(アンダーバー2本羅列)」を__ワイルドカード指定__に用いている。
そのため文中に無関係な__が存在する場合、処理がうまくいかなくなってしまう。
この関係でよくある問題例が「LoRAなどのファイル名に__2本の羅列が使われている」というパターン。
LoRAのファイル名を変えてアンダーバーを_1本にしておこう。
(一応Dynamic Prompts側での対応記述の変更も可能ではある)
LoRAのファイル名を変えてもプロンプト上で変わらない場合、フリーのブラウザ上で使える「LoRA Info Editor」でLoRA名を変更可能。
他にもプロンプトに特殊案処理を施す拡張機能を使っていると同じ構文記号でのバッティングを引き起こすことがある。
使い方
- WebUIタブ「Extensions(拡張機能)」→「Available(拡張機能リスト)」の「Load from(読込)」でリストを読み込み、「Dynamic Prompts」を探してインストールする
(EasyReforgeだと最初からインストールされている)- 導入するとtxt2imgやimg2imgの左下、Scriptの上辺りに[Dynamic Prompts ◀]のパネルが追加される。
- インストールされたら構文を使ったプロンプトを入れて生成する
基本構文ルール (とりあえずこれだけでも良い)
基本ルールは {} で囲って | で分割 。
プロンプトとして {} で囲い | で分割して分岐を作ると、生成時にその内のどれかになる。 例:{A|B|C} → 生成ごとに「A」「B」「C」のいずれかになる 例:{A|B|} → 生成ごとに「A」「B」「」のいずれかになる。 例:{A|B|C} hair, →「A hair,」「B hair,」「C hair,」のいずれかになる 記入例:{closed mouth|parted lips|open mouth|laughing},{smile|^_^|expressionless|smug},
{}の指定は入れ子構造にしても問題ない 例:{A|B|C|{D|E}|{F|G}} →まずA,B,C,{D|E},{F|G}の1/5抽選、その後{D|E}や{F|G}なら1/2抽選。 (確率:A20%,B20%,C20%,D10%,E10%,F10%,G10% ※細かい確率調整は重みづけ設定が合理的)
{}の中には大量の単語や、改行を入れたりしてもいい 例: {standing, legs together, arms at sides, smile, closed mouth| on sofa, sitting, crossed legs, crossed arms, frown, open mouth, glaring}, →{直立して笑っている|不機嫌に座っている}の指定
ワイルドカードの指定は__カード名__で行う
例:__color__ →ワイルドカードフォルダ(waildcards)の中にあるcolorのワイルドカードのリストを呼び出す
補足として、ファイルへ記入されるプロンプトは「選ばれた要素のみ」が記載されている。
(設定(setting)で変更可能)
オプション指定構文
通常は「等倍率・1個・基本ランダムな出力」となるが、オプション指定により細かい調整ができる。
※注意点として、異なるオプション指定は同時指定出来ない※
オプション指定は指定された中のいずれかしか機能しない。
{:: |:: } 確率調整
{}でリスト指定する場合、重みづけによる確率調整ができる
{数字::A|数字::B} 「数字::」を各中身の頭に入れることで「指定要素の重みづけ」を出来る 例:{5::A|2::B|0.5::C|0.5::D} →生成ごとに偏ったランダムで要素が選ばれる(相対確率) →出力例:5/8で「A」、2/8で「B」、0.5/8で「C」、0.5/8で「D」が選ばれる ※確率は「要素指定値/全体合算」。 省略時は1で、全省略なら全部1なので全等倍。
※重みづけは{}指定でしか使用できない。
(ワイルドカードのリスト記法上では使えないが、要素として使うことはできる)
$$ ピックアップ個数設定 リストから複数選ぶ
リストから選ぶ個数を、1個以外に設定できる。
{数字$$~~~} を用いることで「指定数分の要素を並べる」 省略時は「1$$」と同義 例:{2$$A|B|C|D} → 生成ごとにA, B, C, D, の内2つを並べる(重複無し) →出力例:「A, B」「B, D」など(間に「, 」を挟む) ※指定数が要素の数を超えた場合は要素全てを並べる ※注意:0$$指定は ・{0$$|}の中に分岐があるなら0個指定で何も出ない ・{0$$ }の中身が単一だと$$自体が無視されて中身が出る
個数はランダム指定もできる
数字-数字 と指定すると「最大小-最大数」範囲内でランダムな個数を並べる (-かつ数字省略では1-最大(要素数)が入る) 例:{1-2$$A|B|C|D} → 生成ごとにA, B, C, Dの内1~2つを並べる 例:{-2$$A|B|C|D} → 生成ごとにA, B, C, Dの内1~2つを並べる 例:{1-$$A|B|C|D} → 生成ごとにA, B, C, Dの内1~4つを並べる ※補足 ・{0-1$$A}のように中身が単一だと$$自体が無視されるため、確実にAが出る ・分岐が2個以上で{0-1$$A|B}と記入した場合は0個~n個のランダムができる
ランダム個数で間に挟む文字の変更
{数字$$ 文言 $$中身|中身...}で間に挟む文言を「, 」以外にできる(※半角スペースも必要) 例:{3$$ and $$A|B|C|D|E} → 生成ごとにA,B,C,D,Eの内3つを「 and 」で繋げて並べる 出力例:「A and C and E」「E and B and D」など ※悪例:{3$$and$$A|B|C|D|E} → 「AandBandE」などとなってしまう
ワイルドカードでのランダム個数設定
ワイルドカードでのランダム個数設定は {数字$$__カード名__} や {数字$$ 文言 $$__カード名__} と「中身側に余計な文字の入っていないカード記入」の場合は(リストとして処理され)ランダム個数設定ができる。 他の文字、余計な文字が入っている場合は{単一の選択肢}と見なされて、1回分1個ワイルドカードから呼び出す。 ※悪例 {2$$ __カード名__}←スペースが入ってる× {2$$__カード名__,}←カンマが入ってる×
※__2$$カード名__ これも不可
組み合わせ生成・連続生成用オプション指定構文 @ ~
組み合わせ生成を行うなど、連続生成を行う際に使えるオプション構文がある。
※なおワイルドカード内で指定すると処理が変になる。
詳細説明は各項目を参照
- @アットマーク:循環オプション指定 リストから順番に生成する
{@A|B|C...} または __@wildcard__( または {@__wildcard__} ※$$同様詰めればリストで処理される) ※{__@wildcard__}では組み合わせ除外されない通常のリスト扱いになる
- ~チルダ:ランダム設定 組み合わせ生成でランダムのまま生成する
{~A|B|C...} または __~wildcard__( または {~__wildcard__} ※$$同様詰めればリストで処理される) ※{__~wildcard__}では組み合わせ除外されない通常のリスト扱いになる
分岐プロントは組み合わせ生成で「全分岐プロンプトの全パターンを順番に生成する」ことができるが、
これら @ ~ のオプション指定をすると、「組み合わせパターンに数えない」という指定となる。
ようするに「組み合わせ生成で一部だけランダムのまま・一部だけ順番に生成」という処理ができる。
(組み合わせ生成の例) 通常:{red|blue|green|yellow|white} {shirt|dress},→「オプション無し{}5x{}2の10パターン分」を生成する。 オプション構文を使うと ~:{red|blue|green|yellow|white} {~shirt|dress},→「オプション無しの{}5パターン分」を生成し、{~}はランダムにする。 出力例:「red dress」「blue shirt」「green shirt」「yellow dress」「white shirt」 など ※生成の度に変わる @:{red|blue|green|yellow|white} {@shirt|dress},→「オプション無しの{}5パターン分」を生成し、{@}は順番に入れる。 出力例:「red shirt」「blue dress」「green shirt」「yellow dress」「white shirt」
一連の生成をさせたいが、組み合わせパターンとは別に変化をつけたい場合などは~や@を使おう。
(~は通常のランダム連続生成で使っても元々ランダムなので変わりない)
@ 循環オプション指定 順番に生成する
連続生成する際にランダムではなく分岐リストを1番目から順番に生成する(循環する)
基本の仕様は前述
@アットマーク:循環設定 組み合わせ生成含む、連続生成で順番選択して生成する {@A|B|C...} または __@wildcard__ など これによりに、ランダムではない生成を行う。 例:{@red|blue|green|yellow} dress, 出力1枚目 red dress, 出力2枚目 blue dress, 出力3枚目 green dress, 出力4枚目 yellow dress, 出力5枚目 red dress, (全ての分岐を使ったら最初に戻る) 出力6枚目 blue dress,
※1枚だけ生成する設定では何度出力しても常に1つ目が選ばれる。
連続生成(組み合わせ生成を含む)で、2枚目で2つ目、3枚目で3つ目と順番に選ぶ。
"いちおう補足:@は並べても全て1から順番に選ぶ"
{@__color__}, {@__color__}, {@__color__} ... というように並べても【常に、全て同じものが選ばれる】。 @は途中で順番・周期が変化することは原則的に無い。
1枚目→@各リスト1番目 ※なかった場合1番目に戻って循環する 2枚目→@各リスト2番目 リスト2個2番目 3枚目→@各リスト3番目 リスト2個1番目 リスト3個3番目 4枚目→@各リスト4番目 リスト2個2番目 リスト3個1番目 リスト4個4番目 5枚目→@各リスト5番目 リスト2個1番目 リスト3個2番目 リスト4個1番目 リスト5個5番目 6枚目→@各リスト6番目 リスト2個2番目 リスト3個3番目 リスト4個2番目 リスト5個1番目 … …と続いてく
応用:多くの要素を順番に切り替えながら生成させることもできる
(@連続生成応用例) 生成回数2回以上 {@[●前編●:99] school uniform, winter uniform, long sleeves, scarf, gloves, thighhighs, |[●後編●:99] school uniform, summer uniform, short sleeves, socks, }[★末尾★:99] →連続生成で冬服と夏服を交互に選ぶ 補足:例の[●●:99][★★:99]の記述は分岐点を分かりやすくするため。 補足:なお@を入れると「組み合わせ生成」のパターンからは外れる。
詳しい応用編→「Befor and After」を作る
~ ランダム指定 組み合わせ生成でもランダムのままにする
組み合わせ生成する際に~指定要素だけ常にランダムな状態を維持して生成させる。
※組み合わせパターンから外れる。基本の仕様は前述
~チルダ:ランダム設定 組み合わせ生成でもランダムのまま生成する {~A|B|C...} または __~wildcard__ など これによりに、組み合わせ生成をするときもランダムで出力する。※パターンからも外れる 例:組み合わせ生成で {red|blue|green|yellow} {~dress|shirt}, →前半4パターン組み合わせ・後半2パターンランダム 出力例1枚目 red shirt, 出力例2枚目 blue dress, 出力例3枚目 green dress, 出力例4枚目 yellow shirt, (〆終了) ※組合せ生成でも、~ランダムの部分は出力の度に変化する。
補足:組み合わせ生成かつ一部のランダムを固定して連続生成したい!
「連続生成で、一部のランダムを最初に選び、それを一連の出力全てに適応したい」という場合は
後述する変数=!オプションを併用する。
例:${color=!{~red|blue|green}} ${color} 例:${color=!__~color__} ${color} このように変数設定で${*変数*=! {~***} }、または${*変数*=! __~*wildcard*__ }のように記述された分岐は 「最初にランダム指定を固定化して、一連の連続生成では同じ変数プロンプトを使う」という処理になる。
なお変数=!でのランダムプロンプトの固定自体は、通常の連続生成でも使える。
${} 変数
Dynamic Promptsには高度な機能として、"同じ記述"を使いまわせる変数設定がある。※実態はconst定義である
${変数名=内容} : 変数指定 ${変数名} : 上記で指定した変数を引用する ${変数名:デフォルト値} : 変数を引用する・変数指定が無かった時はデフォルト値にする 例:${color=red} ${color} clothes, ${color} sweater, ${color} skirt, ${color} socks, 出力例: red clothes, red sweater, red skirt, red socks, 例:(color変数指定忘れ→)${color:grey} clothes, ${color:grey} sweater, ${color:grey} skirt, ${color:grey} socks, 出力例: grey clothes, grey sweater, grey skirt, grey socks,
※変数内容もデフォルト値も設定されてない変数を使ってしまうとコンソールでエラーが流れる。
テンプレートやワイルドカードなどで変数を使う場合はデフォルト値を設定しておこう
補足:${変数名=内容}の変数定義は「どこにおいても一律に有効」で同じ変数名は後ろ側で上書き
記述例 ${color:grey} hair, ${color=red} ${color:grey} shirt, ${color=blue} ${color:grey} skirt, ${color=green} ${color:grey} socks, ${color=yellow} こうした記述があった場合 1.プロンプト読み込みの前に、まず全ての${x=y}の読み込み処理が行われる(記述はプロンプトから削除される) 同じ変数は最後に代入した変数が有効になる。 (例の場合最終的に最後に書かれた${color=yellow}だけが有効となるとなる) 2.その後プロンプト読み込みで${x}を設定された変数yに置き換えられる 例の結果は yellow hair, yellow shirt, yellow skirt, yellow socks, となる(※厳密には各改行は残る)
変数in変数定義 定義の中に変数を入れることはできる
${hair_color:grey} hair, ${shirt_color:grey} shirt, ${skirt_color:grey} skirt, ${socks_color:grey} socks, ${hair_color= ${shirt_color}} #↓の変数 ${shirt_color= ${skirt_color}} #↓の変数 ${skirt_color= ${socks_color}} #↓の変数 ${socks_color= ${color}} #↓の変数 ${color=red} この記述の場合、最後の${color=red}から各変数へ色が継承され red hair, red shirt, red skirt, red socks, の結果になる。変数は適宜引用して処理される。
※ただし定義へ変数を入れる場合、下記の =! 指定・先処理はできない。
またwildcard内で${変数}、${変数:デフォルト値}で設定された変数を呼び出すことはできるが、
処理の関係から変数定義、${変数名=内容}は、wildcard内には記入不可という処理になっている。(←調査の仕方が悪かったというか既に使用例を書いてた)
処理順序の関係から、"wildcard内の変数定義は、呼び出す先(子側)の内容にしか反映されない"という仕様になっている。
例 __varcolorred__, ${color:blue} #プロンプト ↓ wildcard varcolorredの内容 → ,${color=red} 上記の入力では(プロンプトの変数が先に処理され)結果は blue となる
例2 __varcolorred__, __varcolorget__, #プロンプト ↓wildcard varcolorred → ,${color=red} varcolorget → ,${color:blue} 上記の構成でも(変数はそれぞれで処理され)結果は blue となる
例3:wildcardからwildcardを呼び出す場合は適応される __varcolorset__, #プロンプト ↓wildcard varcolorgeset → ,${color=red} __varcolorview__ varcolorview → ,${color:blue} この場合「$colorをredに設定して次のカードを呼び出す→color=redのため red で呼び出される」 入れ子が何重になっても呼び出した側から設定された変数は有効
=! ランダム入り変数の固定化
変数の中にランダムプロンプトを設定した場合は通常そのものが提供され「変数を呼び出すたびにランダム選択をする」。
例:${color={red|blue|green}} ${color} clothes, ${color} sweater, ${color} skirt, ${color} socks, 実質の記入状態 : {red|blue|green} clothes, {red|blue|green} sweater, {red|blue|green} skirt, {red|blue|green} socks, 出力例: blue clothes, red sweater, green skirt, red socks,
1つに固定したい場合は「=!~~」と記述することで予め中身のランダムを選択した変数にでき全体を統一できる。
例:${color=!{red|blue|green}} ${color} clothes, ${color} sweater, ${color} skirt, ${color} socks, 例:${color=!__color__} ${color} clothes, ${color} sweater, ${color} skirt, ${color} socks, 出力例: blue clothes, blue sweater, blue skirt, blue socks, 例:${color=! __color__ , {red|blue|green} } =!は、中身のランダムを全て先に処理して統一する。
ただしこの「予め中身のランダムを選ぶ」という処理は、連続生成開始よりも前に処理が行われる。
つまり上記例として ${color=!__color__} ${color} clothes, ${color} sweater, ${color} skirt, ${color} socks, 1度の連続出力中はずっと同じものが選ばれ続ける 出力例1枚目: green clothes, green sweater, green skirt, green socks, 出力例2枚目: green clothes, green sweater, green skirt, green socks, 出力例3枚目: green clothes, green sweater, green skirt, green socks, 出力例4枚目: green clothes, green sweater, green skirt, green socks, …(新しい出力では結果が変わりうるが、1度の連続生成中はずっと同じ) この記述では連続出力最中のランダム性が無くなる。
※1枚画像内の統一性&連続生成中のランダム性は両立できないみたい
補足:LoRAの挙動について
Dynamic Promptsの各構文でも、LoRA指定は使うことができる。
{}分岐やワイルドカードにLoRA指定を書くと
- LoRA指定のある記述が選ばれた場合はLoRAを読み込んで生成する
- また選ばれなかった分岐にあるLORAは読み込まれない状態で生成する
ワイルドカード
実用例
Dynamic Promptsには分岐するリストをテキストファイルなどに並べておいて、それを呼び出せる"ワイルドカード"機能がある。
要素の数、文字数が多くなるような場合はファイルにまとめてしまった方が簡単。
ファイルを置く場所は「webuiフォルダ\extensions\sd-dynamic-prompts\wildcards」辺り
(例) # colored_hair.txt 内(通常はtxt形式で編集する) red hair blue hair green hair yellow hair white hair →改行ごとに分けられたプロンプトで実質 {red hair|blue hair|green hair|yellow hair|white hair} という情報になる。 # プロンプト記入例 __colored_hair__ →colored_hair.txt内の要素からランダムに1つ選ぶ
なおネットには色んなワイルドカードが配布されているので、それを利用する手段もある→としあき製カード
wildcards内にはフォルダを作ってそこに入れてもいい。
__フォルダ名/ファイル名__ : フォルダに格納されたファイルを呼び出す clothes/tops.txtや作者名/XXX.txtなどのように分かりやすくフォルダ分けしておくと困りにくい
※ただしファイル内でワイルドカードを指定している場合にフォルダ位置を変えてしまうと指定が外れてしまう。
一応指定場所のワイルドカードが見つからない場合は*/再探査をして、指定カードが見つかれば処理されるが、特殊な処理のため思わぬ不具合には要注意。
など、ワイルドカードは1行でもよく、シンプルなものも作れる。
またwaildcardsのファイル形式にはYAML形式を使うこともできる。
やや記述法が特殊になるが、複数のファイルやフォルダ構造を1つのファイルにまとめられ、
ワイルドカードを多数つくりたい時はYAML形式だと作成・管理がしやすい。
ワイルドカードと構文について
ワイルドカード内でも通常の構文ルール、オプション指定構文も一部有効となる。
※「重みづけ::」構文は{}として書かなければ使えない。{}で書けば使えるが、リスト化されない。
※なお全く同じ記述を並べて数で重みづけを再現するのは通常ダメで非推奨(詳細設定を変更すれば有効にはできる)
(例) ワイルドカード内でも{}は使える # season.txt内 summer {autumn|fall} winter spring 記入:__season__ 出力:1/4で春,夏,秋,冬を選び→秋の場合はautumn|fallのどちらかを出す 実質の記入状況:{summer|{autumn|fall}|winter|spring}
指定個数のピックアップはワイルドカード指定でも用いることができる
(記入例) {2$$__wildcard__} →指定ファイル内の要素から2つを並べる(同じ要素は重複しない) 「ワイルドカード単体・余計な文字列無し」ならリストとして処理される
注意点※ワイルドカードで$$オプションを使う場合は「ワイルドカード単体・余計な文字列無し」が絶対条件 ×{2$$__wildcard__,} →{2$$ {*|*|*...}, }と同義→$$の分岐先が1個で、1個しか出ない。 その他悪例 △{2$$__wildcard__|__wildcard__} →{2$${要素}|{要素}}と同義。(同じ要素が重複することあり) ×{3$$__wildcard__|__wildcard__} →{3$${要素}|{要素}}と同義で、分岐先2個なので合計2個しか出ない。 ×{3$$__wildcardA__|__wildcardB__} →同上、2つの指定ファイルから1つずつ、合計2個並べるだけ。 ※この記述で異なるワイルドカードを統合するといったこともできない
「異なるワイルドカードの要素を統合し揃えたランダムにしたい」という場合はグロビングを使う。
(使用例) ${color:gray} clothes, ${color:gray} sweater, ${color:gray} skirt, ${color:gray} socks, 上記の内容を持つワイルドカードcolor_clothes.txtを用意して下記のようにプロンプトを入れる。 例:${color=yellow} __color_clothes__ 例:__color_clothes(color=yellow)__ (※${}ではなく()。この指定方法では現状ランダムプロンプトは使えない) 出力例:yellow clothes, yellow sweater, yellow skirt, yellow socks,
※エラー回避のためワイルドカード内はデフォルト値は入力しておくこと。
(補足:応用例) ${color=__color__} __color_clothes__ →color.txt内から服ごとに1つずつランダム指定 ${color=!__color__} __color_clothes__ →color.txt内から1つ選び、全ての服に割り当てる
ちなみにwildcard指定自体にも変数が有効。
${face=smile} →予め変数を設定する __faceset/${face:*}__ →facesetフォルダ内の指定変数のワイルドカードからランダム選出する。(変数指定が無いなら*指定でフォルダ内全グロビング) 上記例では__faceset/smile__から引用でき、${face=}部分での変更ができる。
注意点として「ワイルドカードで全く同じ記述の分岐は、通常1つに統合される」(設定(setting)で変更可能)
(例) # from.txt 内 straight-on straight-on straight-on straight-on straight-on from above from above from below from below from behind 通常の実質の記入状況→{1::straight-on|1::from above|1::from below|1::from behind} このように同じ記述を5:2:2:1と複数並べて重みづけを再現しようとしても 通常「1:1:1:1」の各1つ扱いで処理される。 これは組み合わせ生成などでも同様で、 ワイルドカード読み込みで全く同じパターンは1つに圧縮されてしまう。 同じ記述を複数並べてより多く選ばれやすくしたい場合は… # weight_from.txt 内 straight-on[1:999] straight-on[2:999] straight-on[3:999] straight-on[4:999] straight-on[5:999] from above[1:999] from above[2:999] from below[1:999] from below[2:999] from behind 上記のように、全ての記述を少しずつ変える方法がある。 もしくは(リストとしては使えなくなるが){}を使う必要がある。
重みづけは使えないという説明があるが使えないのは1行の頭に5::などと付ける方法 # random_from.txt 内 {5::straight-on|2::from above|2::from below|1::from behind} 上記の場合なら、5:2:2:1の割合で出力してくれる。 ※この場合、ワイルドカードそのものは単一・分岐無しの扱いとなる。 # 無効例※この指定は無意味 5::straight-on こうした記述はただの「n::指定」という文字列として出力される。 2::from above 重みづけとしては全く機能しない 2::from below 1::from behind
ワイルドカードからワイルドカードを呼び出す
ワイルドカード内では{}構文だけでなく、__ワイルドカード__構文も使える。
つまりワイルドカード内から別のワイルドカードを指定することも可能。(入れ子・ネスト指定)
例
__clothes_tops_winter__:clothes_tops_winter.txtのカード 内容→{sweater|winter coat|duffel coat|coat, scarf|winter clothes|down jackets|winter uniform}
__clothes_tops_summer__:clothes_tops_summer.txtのカード 内容→{t-shirts|shirts|camisole|sundress|tank_top|sleeveless shirt|tube top}
__clothes_topsallseasons__:clothes_topsallseasons.txtのカード 内容 __clothes_tops_winter__ __clothes_tops_summer__
↓
例:上記から「__clothes_topsallseasons__」を指定することで「冬/夏を半分の確率で選び→その中から選ぶ」
例:入れ子×入れ子
__color__ :color.txtのカード 内容→{red|blue|green|yellow} など
__clothes_tops__:clothes_tops.txtのカード 内容→{__color__ sweater|__color__ shirt|__color__ coat|__color__ jacket}
__clothes_bottoms__:clothes_bottoms.txtのカード 内容→{__color__ shorts|__color__ skirt|__color__ jeans|__color__ leggins}
__clothes__:clotes.txtのカード 内容→__clothes_tops__, __clothes_bottoms__ 例:上記から「__clothes__」を指定するだけでランダムなコーディネートを出力できる
※ワイルドカードをフォルダに入れるなどファイル位置を変えてしまうと、指定が外れてしまうことになる点に注意
一応指定場所のワイルドカードが見つからない場合は*/再探査をして、指定カードが見つかれば処理されるが、特殊な処理のため思わぬ不具合には要注意。
統合指定・グロビング
ワイルドカードは「*」を使ってグロビング指定、「複数のワイルドカードをひとまとめにする指定」が可能。
例
__clothes_tops_winter__ clothes_tops_winter.txtの内容 sweater winter coat duffel coat coat, scarf winter clothes down jackets winter uniform
__clothes_tops_summer__ clothes_tops_summer.txtの内容 t-shirts shirts camisole sundress tank_top sleeveless shirt tube top
プロンプト記述:__clothes_tops_*__ 処理:「clothes_tops_~~」で始まる全てのワイルドカードを1まとまりのワイルドカードにして処理する。 実質の記入状況:{sweater|winter coat|duffel coat|coat, scarf|winter clothes|down jackets|winter uniform|t-shirts|shirts|camisole|sundress|tank_top|sleeveless shirt|tube top} 応用例:「{3$$__clothes_tops_*__}」と入力すると指定ワイルドカード全ての要素から3つを選び出す。
入れ子構造の結合(前述の例:__clothes_topsallseasons__)ではファイル別ランダム→個別要素ランダムという処理のため、子の1ファイル内の要素を多数取り出すことはできない。
一方でグロビングは指定ファイルの全要素を合わせた1つのワイルドカードとなるため、多数の要素を取り出せる。ただし数の多い所が数相応に選ばれやすく偏る。
Tips.グロビング指定は間に入れたり・複数入れることもできる 例えば以下のようなフォルダ/カード構造であった場合 facetype: smile_weak1: "light smile," smile_weak2: "light smile, frown," smile_strong: "smile, happy," sad_weak1: "tears," sad_weak2: "sat," sad_strong: "crying, streaming tears," __facetype/*__,では全ての組み合わせを統合するが、 __facetype/*weak*__,ならweakの入った4パターンを統合できる。 各名前付けはこうした検索性も考えながら使おう。
グロピングはYAML形式で多数のワイルドカードを作ったときに最も有効活用できる。
__ワイルドカードが見つからない時の処理__
ちなみに「指定したワイルドカードが見つからない場合」は__*/指定カード__で処理される。
頭に*/のグロビング
=「いずれかのフォルダ階層内にある同じ指定名に適合する全てのワイルドカードをグロビング出力する」
という処理になっている
例えばwildcards/フォルダAにcolor、wildcards/フォルダBにもcolorというワイルドカードがあるが、 wildcardsフォルダ階層にはcolorのワイルドカードが無い場合に__color__のカードを指定すると __*/color__でのグロビング探査を行い、フォルダA/colorとフォルダB/colorのカードを合わせたワイルドカードを作って出力する
1行ワイルドカード
ワイルドカードは大量のリスト・複雑な指定に適しているが、単純な使い方をしてもいい。
中身が1行でもワイルドカードとして使うことができる。
特によく使うが長い指定要素などは、ワイルドカード化しておくと、XXX.txtなら__XXX__で単純に呼び出せる。
例えば、長ったらしいが調整するつもりのない品質プロンプトなんかは、
1行にまとめてワイルドカードqu.txtに入れておけば、プロンプトでは__qu__と入れるだけでテキストで管理しつつもプロンプト入力がすっきりする。
また内容と名前をちょっと変えたqu2などのカードも用意すれば、__qu2__とちょっと書き換えるだけでプロンプトを切り替えたりできる。
他にも「another's」みたいなややこしく入力も手間な単語を__a__に短縮してしまうなんて使い方もありえる。
なお非常に単純なワイルドカードはYAML形式ファイルにまとめると効率的に作成・管理できる。
YAML形式ワイルドカード・1ファイルで複数カード作成
ワイルドカードは、YAMLファイルからも設定できる。
YAMLファイル最大の長所は多数のワイルドカードを1ファイルの記述で作成・管理できるという点。
細かいワイルドカードをいっぱい作りたいときはYAML形式の方が圧倒的に楽。
DLしてきた.yamlの使い方
- wildcardsフォルダへyamlファイルを入れると中身が読み込まれる
- yamlファイルをテキストソフトで開いて中身を確認してもいい
テキスト形式のデータファイルなので読める- 中身の「名前:」の名前部分がワイルドカード名になってる
.txtの場合ファイル名だが、.yamlは中身で定義してる - 階層化されてる場合はフォルダ名/txt名と同じように設定する
- ※yamlはデータ形式として結構繊細で、下手にいじると読み込まれなくなるので注意。
- 中身の「名前:」の名前部分がワイルドカード名になってる
かんたんにtxtからYAMLへ移行する手順
- 新しいテキストファイルを開く
- 新しいテキストファイルにYAML形式にしたいtxtファイルの「ファイル名」+「:」をまず書く
- 「名前:」の下にtxtファイルの中身(カードの内容)を張り付ける
- 張り付けた全ての行の先頭(左端)へ「- 」(ハイフン+半角スペース)を入れてデータ化する
(color.txtファイル) red blue green
↓基本こうするだけ(新しいファイル) color: - red - blue - green
※{}や[]を頭から使ってる行などは「- "{A|B|C} XXX"」みたいに「""」で挟んだりする必要があるなど、微妙に細かい記入ルールがある。細かいルールは後記 - 新しいテキストファイルを「適当な名前.yaml」でwildcardsフォルダへ保存する。
これで元のcolor.txtと同じワイルドカードを持つYAMLファイルができる。
(元々のcolor.txtは外へ移動しておく) - YAMLファイルが読み込まれたら __color__ でYAML内のワイルドカードを呼びだせる
そしてyaml形式の大きな特長は1つのファイルで多数のワイルドカードを作成できるところ。
さらに別のワイルドカードをYAML形式にしたいなら同じファイルに「カード名:」~「- 内容」を何個でも追記できる。
(適当な.yamlファイル) color: - red - blue - green hair_length: #YAML形式ではシャープで内容に影響しないコメントを記入できる - long hair - medium hair - short hair angle: - straight-on #正面 - "from {above|below}" # 統合し確率を下げる - from {side|behind|front} # ""と{}のルールは{}や[]が要素の先頭からの時だけ必須
この内容を持つYAMLファイルを読み込めば1つのファイルから
__color__ でcolorのワイルドカード
__hair_length__ でhair_lengthのワイルドカード
__angle__ でangleのワイルドカード
複数のワイルドカードをそれぞれ呼び出せる。
こうして複数のワイルドカードを1ファイルへ統合できるのがYAML形式
特に同系統だが多数のワイルドカードを細かく管理したい場合はYAML形式がやりやすい
応用編としてYAML形式でフォルダ階層を用意したい場合は
フォルダ名: カードA: #左端に半角スペースを追加することで↑フォルダの中にカードを配置する - AA - AB - AC カードB: - BA - BB - BC フォルダB: カードC: - CA カードD: - DA
というようにデータを階層化すると
__フォルダ名/カードA__、__フォルダ名/カードB__、
__フォルダB/カードC__、__フォルダB/カードD__
というようにフォルダ階層を再現できる。なお階層設定は何層でも増やせる。
「YAML形式ってtxt形式と何が違うの?」「YAMLって何ができるの?」
YAML形式は、比較的シンプルなデジタルデータ用のファイル形式である。
やや長くなるがワイルドカードの実例として…
#適当な名前.yaml (yaml形式のワイルドカードではファイル名は使わない) #▼以下はコピペして使える #はコメント記法 basic_color: #基本色 - red - orange - brown - yellow - green - aqua - blue - pink - purple - black - grey - white #拡張色 extra_color: [navy,ultramarine,indigo,blue,aqua,cobalt,blue-green,turquoise,cerulean,green,emerald,lime,malachite, ivory,beige,marigold,yellow,peach,orange,amber,brown,crimson,scarlet,red,pink,magenta,purple,violet,viridian, black,grey,white,copper,bronze,silver,golden,pastel,iridescence,rainbow] # 補:リストは - で揃えて並べるか、 [,]でまとめる。どちらでも良いが記法、構文ルールには要注意 # 補:上記のカードの指定記法は __basic_color__ と __extra_color__ ※ファイル名は不要 background: bg_simple_color: simple background, __basic_color__ background, bg_color_patterned: patterned background, __extra_color__ background, __background/pattern__ background, pattern: [argyle,checkered,grid,plaid,polka dot,striped,sunburst,floral,heart,snowflake,sparkle] # 補:上記のカードはフォルダ階層が作られ、以下のような配置となっている # __background/bg_simple_color__ # __background/bg_color_patterned__ # __background/pattern__ # → __background/bg_*__ このグロビング指定で{シンプル|パターン}で背景を用意できる #衣服 basic_clothes: outfit: # __basic_clothes/outfit/*__ ひとそろえ f_school_a: school uniform, serafuku f_school_b: school uniform, blazer f_school_c: school uniform, cardigan, white shirt f_school_d: school uniform, buttoned dress f_school_s: school uniform, collared shirt, white shirt, tie f_school_v: school uniform, sweater vest, white shirt m_school_g: school uniform, gakuran f_dress_a: dress f_dress_e: long dress, evening gown f_dress_h: long shirt, dress, hoodie f_dress_s: sundress, frilled dress f_dress_c: china dress f_dress_j: kimono f_dress_o: coat dress, short dress, short coat casual: casual clothes outer: jacket: ["jacket, hoodie","gym jacket","vest"] coat: ["fur coat","long coat","trench coat","raincoat"] jacket_open: open jacket, __basic_clothes/outer/jacket__ coat_open: open coat, __basic_clothes/outer/coat__ f_tops: [sweater,T-shirt,shirt,camisole, sleeveless sweater, off-shoulder sweater] f_bottoms: [skirt,long skirt,shorts,pants,"{overall pants|overall shorts|ovarall skirt}"] f_set: > #←これで↓は単一カード __basic_clothes/f_tops__, __basic_clothes/f_bottoms__, f_set_outer: | #同上。これは単一カード(改行含む) __basic_clothes/f_tops__, __basic_clothes/f_bottoms__, __basic_clothes/outer/*__, #▲ここまでコピー
上記の内容の.yamlファイル1個をwildcardsフォルダへ入れるだけで
以下のフォルダ構造を含む大量のワイルドカード群を「1つのファイル」だけで追加することができる
__basic_color__ 基本色のワイルドカード __extra_color__ 拡張色のワイルドカード __background/bg_simple_color__ 単色背景(basic_color引用)のワイルドカード __background/bg_color_patterned__ 模様つき背景(extra_color,pattern引用)のワイルドカード __background/pattern__ 背景用の模様のワイルドカード __basic_clothes/outfit/*__ このフォルダ階層に15枚の1行ワイルドカード __basic_clothes/outfit/*_school_*__ 制服7パターン __basic_clothes/outfit/*_dress_*__ 制服以外7パターン __basic_clothes/outfit/casual__ カジュアル指定 __basic_clothes/outer/*__ このフォルダ階層に4枚のワイルドカード __basic_clothes/outer/jacket__ 4パターンのジャケットのワイルドカード __basic_clothes/outer/cost__ 4パターンのコートのワイルドカード __basic_clothes/outer/jacket_open__ 開いたジャケット(上記引用)のワイルドカード __basic_clothes/outer/coat_open__ 開いたコード(上記引用)のワイルドカード __basic_clothes/f_tops__ 6パターンの上の衣服のワイルドカード __basic_clothes/f_bottoms__ 5パターン(内1つ3パターン)の下の衣服のワイルドカード __basic_clothes/f_set__ 上下の衣服(上記2カード)を一緒に出すワイルドカード __basic_clothes/f_set_outer__ 上下の衣服+上着(上記3カード)を一緒に出すワイルドカード
txtでは多数のファイルやフォルダにまたがる構造も1ファイルで完結できる。
これがYAML形式ワイルドカードの最大の特長である。
なので細かいワイルドカードを大量に作るときにYAML形式でやるのが効率的。
特にフォルダ階層名/ファイル名の設定次第で*グロビングでの統合管理も活用しやすい。
YAML形式ワイルドカードの使い方
txt形式ファイル同様、waildcardsフォルダへYAML形式ファイルを入れるだけで、勝手に読み込んでワイルドカードを設定してくれる。*2
- カード名はYAMLファイル内で指定したマップ名「名前:」が使われる(YAMLのファイル名は使わない)
- YAMLファイルの最上位層の「名前:」が、同じフォルダのtxtファイル名と同じ扱いになる。
同じ階層でカード名が重複してる場合は、YAML側で内容が上書きされる(YAML同士でも上書き処理になる) - ※YAML形式の内容はwebui上のワイルドカード管理画面からは編集できない。
プログラムデータ用のファイル形式なので細かくやるときはVSCodeとかを使うと編集しやすい。
プログラミング向けのソフトだと特に重要な半角スペースの管理を非常にしやすくなる。
- YAMLファイルの最上位層の「名前:」が、同じフォルダのtxtファイル名と同じ扱いになる。
YAML形式ファイルのワイルドカードでは、YAML形式の配列・マップとして記入する。
【 半角スペースの扱いが非常に重要 】
#▼ここからサンプルコピー可能
# YAML形式でのwildcards記述例
#←シャープで読み込まれないコメントが入れられる #・初歩 wildcard_name: - Alice - Bob - Carl, David #「名前:」がファイル名.txtに相当し上記は__wildcar_name__で呼び出せる → {Alice|Bob|Carl, David}の3分岐として扱われる #リストは通常「 - 内容」のリストで並べる。 #[任意の半角スペース]ハイフン[半角スペース]内容 #【※半角スペースが非常に重要※】 #「頭側の半角スペースは同じ階層で統一する」「中に入ってる内容は親の階層より半角スペースを増やす」
#ワイルドカード同様の構文も使える
wildcard_sample: # __waildcard_ample__ で呼び出し - shirt, skirt - sweater, jeans, cap - "cardigan, shorts, thighhighs" # "" で囲ってもいい - "{red|blue|green} dress" # "" で囲うと頭から{}も使える #上記記述で # (waildcard_sample.txt) #shirt, skirt #sweater, jeans, cap #cardigan, shorts, thighhighs #{red|blue|green} dress #(#除き)このように並べたtxtファイルと全く同じ扱いになる。 #どちらも{shirt, skirt|sweater, jeans, cap|cardigan, shorts, thighhighs|{red|blue|green} dress}と同じ扱い
#※リスト内で{}や[]を使うときは注意が必要。yaml側の構文扱いになってしまい処理が異なる。
#※ "" で囲う場合は\エスケープ処理の関係に要注意。
weighting_sample: - "{4::long sleeves|1::short sleeves|0.5::sleeveless}" #重みづけは「"{}"」を使う 【※{}[]は扱いに注意】
double_sample: - __wildcard_sample__, __weighting_sample__ #YAMLでもワイルドカード内から他のワイルドカードを呼び出せる - torn clothes, __wildcard_sample__, __weighting_sample__
single_sample: unworn __wildcard_sample__ #補足:1行のワイルドカードは - を省略し、「名前: 要素」と書いてもいい。※半角スペースを忘れずに
# リストの[]型配列指定
#リストの特殊な記法として [内容A,内容B,内容C...] =角かっこ+カンマでの書き方もできる。 outdoors: [city,urban,beach,park,street,plaza,alley,"playground,garden"] # (内容に,を使うときは""で囲う) #上記1行で{city|urban|beach|park|street|plaza|alley|playground,garden}の中身を持つリストになる indoors: [room,living,hotel,library,"indoors,entrance,door", #この方式では不規則に改行して並べてもいい loaded interior,Messy room,on floor ] #改行する時も , の区切りを忘れずに #※【「 []」←左の半角スペース必須】 #細かい単語を大量に羅列する際は[,,,]でまとめた方がすっきり書ける
#階層化 フォルダ構造を作る
#※【半角スペースの扱いが非常に重要】 ※スペース位置で良かったりダメだったり
face: # ↓の頭にスペースを入れてズラして「名前: 」を置くとフォルダ階層化ができる(適宜ずらせば多層にもできる) smile: # __face/smile__で呼び出し - smile - grin - smug sad: # __face/sad__で呼び出し - sad - cry - frown "double": __face/sad__, __face/smile__ # __face/double__で呼び出し #※【同じ階層に並べる要素は、行頭のスペースを統一する】 ※ズレると読み込み失敗したり hair: allin: __hair/color__ hair, __hair/length__ hair, __hair/style__ # __hair/allin__ でランダムな髪を出す length: [short,long,medium,very short,very long] color: [aqua,black,blonde,blue,brown,green,grey,orange,pink,purple,red,white] style: [bob cut,curly hair,straight hair, wavy hair,ponytail,twintails,hair bun,braid] ornament: #__hair/ornament/*__ でランダムな頭飾りをつける wear: [hat,bucket hat,straw hat,top hat,cap,baseball cap,deerstalker, ushanka,fur hat,helmet,beanie,tenugui,turban] acce: [crown,tiara,visor cap,veil,mini hat,hair bow,hair ribbon, hairband,headband,headdress,hairpin] #適宜ずらすことでこのように階層構造を作れる。
# #蛇足としてYAMLの構文としては有効でもDynamic promptsでは無効な指定というものもある。
#Tips:階層化とグロビングの活用 # データを階層化させておけば、*のグロビングでひとまとまりのワイルドカードにもできる。 action: fighting: kick: high: leaning back, high kick, mid: kicking, leg, foot lift, low: stomping, feet, knee up, arms: pun: punching, clenched hands, slap: slapping, hand up, open hand, posing: legs: high: standing split, leg up, mid: standing, knee up, leg lift, toe: standing, tiptoes, crossed legs, apart: standing, legs apart, open stance, bow: standing, open stance, tiptoes, spread legs, crouch, sonkyo: squatting, tiptoes, spread legs, up straight, knee: kneeling, legs apart, arms: up: varm: arms up, Victory pose, stretching, headtop: arms up, hands on head, head: arms up, arms behind head, spread: spread arms, outstretched arms, hold: cross: crossed arms, pray: own hands clasped, own hands together, hand: hands_open: hands up, open hands, hands_closed: hands up, clenched hands, peace: hand up, peace sign,v, hip: uphip: hand on own hip, arm up, hips: hands on own hips, down: hide: arms behind back, thigh: hands on own thighs, knee: hands on own knees, #例えば、このように単体設定カードばかりのデータでも、 #「__action/posing/legs/*__」と記入すればaction/posing/leg内のカードを1つのリストにしたワイルドカードにでき、 #「__action/posing/arms/up/*__」と記入すればaction/posing/arms/up/内を1つのリストにしたワイルドカードにできる。 #これにより多数のプロンプト構造をグループで分けながらも、ランダムプロンプトでまとめながら便利に使える。
#個々の情報量が多い場合は上記の様に階層化しつつ、要素も個別に「名前: 」をつけておくと管理もしやすくなる。
# (非推奨){}マップを使った階層化
#オススメはしないが[]配列だけでなく{}マップのインライン形式指定が可能 #下記の「""」で囲っていない{}はランダムプロンプトの{}ではなく、json系統のオブジェクト(マップ)記述の{} hand: # __hand/*__ で適当な手の動き { opened: [open hand,open hands,cupping hands,steepled fingers], closed: [clenched hand,clenched hands,fist pump,thumbs up], sign: [peace sign,"double v",index finger raised,pointing], onup: ["hands on own __ob/upbody__","${s=,} hand on own __ob/upbody__"], onlo: ["hands on own __ob/lobody__","${s=,} hand on own __ob/lobody__"], hold: ["crossed arms","{own hands clasped|Praying|Praying,own hands clasped}"] } #上記のような指定も可能なのだが…{}では階層の視認性が非常に悪くなるため非推奨。 ob: # 体の対象を取る 変数を用いてsの切り替え upbody: [head,face,"cheek${s:s}",chest,"arm${s:s}"] lobody: ["hip${s:s}","leg${s:s}","knee${s:s}"]
#ちなみにYAMLのワイルドカードでも当然変数設定は使える。
#特殊な記法として「1要素が長くなりすぎて読みづらい!」という場合は、複数行を使って1つのデータを書く方法がある。
name: jugem_1: jugem, jugem, gokou no surikire, kaijarisuigyo no, suigyoumatu unraimatu huuraimatu, kuu neru tokoro ni sumu tokoro, yabura kouji no bura kouji, paipo paipo paipo no shuringan, shuringan no gurindai, gurindai no ponpokopie no ponpokona no, chokyumei no chosuke. #↓「名前: >」(または配列「 - >」)で宣言して改行すると複数行に1要素の内容を書ける ※高さ(スペースの数)は一段以上増やす jugem_2: > jugem, jugem, gokou no surikire, kaijarisuigyo no, suigyoumatu unraimatu huuraimatu, kuu neru tokoro ni sumu tokoro, yabura kouji no bura kouji, paipo paipo paipo no shuringan, shuringan no gurindai, gurindai no ponpokopie no ponpokona no, chokyumei no chosuke. # 上記のjugem_1もjugem_2も全く同じ定義で、_2も一つの要素となる。 #「名前: >」宣言の場合は改行は「一行目 二行目 三行目」と半角スペースが挟んで1行の単体データになる。 #「名前: >」宣言を「名前: |」宣言にすると改行を保持した単体データになる。※あくまで単一データ # 1要素で非常に大きくなるときは、こうした定義を使って読みやすくデータを整えよう。
# ちなみにこの宣言をした場合は、数列も{}や[]や""も文字列として扱われるため、 jugem_ran: > #※↓改行してから続きを書く・改行後の高さは1段以上高く揃える {1-$$ $$ jugem| jugem| gokou no surikire| kaijarisuigyo no| suigyoumatu| unraimatu| huuraimatu| kuu neru| tokoro ni| sumu tokoro| yabura kouji no| bura kouji| paipo| paipo| paipo no| shuringan| shuringan no| gurindai| gurindai no| ponpokopie no| ponpokona no| chokyumei no| chosuke} # この指定方法の場合なら""を使わず冒頭から{}ランダムプロンプトなどを指定してもいい。 # ※ただし読み込まれる行では「#」も通常文字列扱いとなり、データとして読み込まれてしまう # 蛇足だが、実は""でも中に改行を入れることができる。 # ""は>定義とほぼ同じでありつつ、スペースの高さは合わせなくていいが、邪道な使い方。
#▲ここまでサンプル
なおワイルドカードの管理画面でカード内容が読み込めてない場合は記述にミスがある。
注意したい細かいルールについてはYAML形式データの細かい記入ルールを参照。
補足としてYAMLファイルをフォルダに入れた場合は(txtのワイルドカード同様)フォルダ階層も指定することになる。
上記例のファイルを例えば「wildcards/toshisdフォルダ」の中に入れた場合は「__toshisd/outdoors__」「__toshisd/face/sad__」というようにフォルダを指定する。
※ただしYAML内同士でも、ファイル内でワイルドカードを指定している場合にファイルのフォルダ場所を変えてしまうと指定が外れてしまう。
一応指定場所のワイルドカードが見つからない場合は*/再探査をして、指定カードが見つかれば処理されるが、特殊な処理のため思わぬ不具合には要注意。
非常に多くの要素を細かく組み合わせるワイルドカードの場合はYAML形式でひとまとめにできるとファイル管理は楽になる。
YAML形式でファイルを編集する際はVSCodeやサクラエディタみたいなプログラミング向けの編集ソフトのほうがやりやすい。
YAML形式データの細かい記入ルール・ワイルドカード作成時の主な注意点
YAMLはかなり繊細なデータ形式なので、細かい表現の処理が非常にめんどくさい。
ワイルドカードとして使う場合に注意が必要な点を挙げておく。
※内容にスペースを忘れないこと! 同じ範囲のスペースは統一すること! あとスペースは常に半角スペース!
spece1: - risuto wo # - の直後は"間に半角スペース" - tukurutoki ha - haihunn no - aida ni zettai space spece2: zettai ireru # : の直後で単一指定する時も"間に半角スペース" spece3: - onaji kaisou ha - "kanarazu" - onaji takasa ni #※同じ階層では先頭に入れるスペースの数・高さを揃える(ズレると読み込めない) #※なおTabスペース(インデント)でスペースをいれると機能しない。
新しいワイルドカードの宣言の頭にはスペースを入れないこと!
newwaildcard: A: newA B: newB C: newC #こうした後に新しいワイルドカードを追加したいとき #↓頭にスペースを入れてしまうと、↑のグループ扱いになる。(※あるいはズレてると読み込めない) extentwaildcard: - A - B - C
#データ上では[]配列宣言、{}マップ宣言となってしまう #プロンプトで使うなら「""」で囲うか、|や>の改行構文を使って文字列化が必要 array1: [A,B,C] #※配列となる array2: - A - B - C # array1と2は同義{A|B|C}のリスト指定 array3: - [A,B,C] #←※Dynamic Promptでは除外(配列内配列扱いのため) - {D|E|F} #←※Dynamic Promptでは除外(配列内オブジェクト扱いのため) - G,H,I #上記ではG,H,Iだけが読み込まれる # []{}を要素として使うときは not_array1: [A:B:1] #→出力が A:B:1 になってしまい、スケジュール構文にならない not_array2: "[A:B:1]" #頭から[]{}を使うときはこう not_array3: > {A|B|C} #もしくはこうしてもいい not_array4: from {A|B|C} # 蛇足:要素の頭が[]{}以外なら""で囲わなくてもよかったりする not_array5: from [side:behind:0.1] # "" で囲わなくてもいいが、囲った方が安全にはなる # error_array: [ from above, from [side:back:1]] #←こういうのでダメになる(不正な配列定義でファイル読み込み失敗) not_error_array: [ from above, "from [side:back:1]" ] #""で囲えば問題ない #蛇足 not_array6: (A,B,C) # ちなみに()はシステム構文ではないので""いらない # error_array_B: "hagehage \(hogehoge\)" #←ただし要注意例としてこれはダメ(ファイル読み込み失敗) not_errorr_array_B1: hagehage \(hogehoge\) #こうするか not_errorr_array_B2: "hagehage \\(hogehoge\\)" #こうするか not_errorr_array_B3: > #↓こう hagehage \(hogehoge\) #する 詳細は後記
#当然だが、その他YAMLで用いられている記号を使う場合にも要注意(だいたい冒頭に使うとダメになる) # 一部の例 not_error_obj1: :3 #これは大丈夫 # error_obj1: >_< #※>が改行対応構文記号のため 冒頭には不可 # error_obj4: !, spoken exclamation, #!は特殊記号のため、冒頭には不可
YAML形式上では問題ないらしいが、Dynamic Promptではエラーになる例として
# error_obj2: ${hoge={hage|piyo}}, ${hoge}${hoge} # 冒頭に$記号を使っているとDPではエラーになる # error_obj3: ,piyopiyo # 冒頭に,カンマ記号を使っているとDPではエラーになる not_error_obj2: "${hoge={hage|piyo}}, ${hoge}${hoge}" #これらは対処が必要 not_error_obj3: > ,piyopiyo # ""か、>か|の改行での文字列化をすればエラーは回避できる
# yaml形式自体では配列の中に配列やマップを入れる書式もできるのだが、 # Dynamic Promptsのwildcardの処理では対応していない。 array4: - A in array4 - B in array4 - [C,D,E] #※配列 in配列 ※致命的なエラーにはならないがWildcardの処理では読み込まれない - - F#※↓配列 in配列 ※致命的なエラーにはならないがWildcardの処理ではは読み込まれない - G - H - I - object_in_array: J #※オブジェクト in配列 ※致命的なエラーにはならないがWildcardの処理ではは読み込まれない # array4で呼び出されるのは{A in array4|B in array4}のみ、object_in_arrayなどを呼び出すことはできない※ # ※致命的なエラーにならないだけでログとしてエラーを吐く状態になったりする # ※グロビング*を使っても呼び出せない。
Dynamic Prompts用のYAMLの入力データは文字列(string形式)でないとダメ!
#Dynamic PromptsでのYAML読み込みでは文字列形式以外の内容データが除外されてしまう。 #数値のみや、boolean値は死。 # "" で囲っておけば文字列になるので適宜囲っておこう。 ※\(hogehoge\)などの文言の場合は要注意! 123: - 456 - 789 - mushisareru #名前の宣言が数値のみなので上記の指定はDynamic Promptsでは無視される "234": #数値を""で文字列にして読み込ませる - "567" #これは入る - 2girls #文字列なので入る - 890 #←これはDynamic Promptsでは無視される #数列以外ではシステム的な言語である、booleanもNG。 on: - on bed - on floor #名前が「boolean値(true,false,on,off,yes,no※大文字小文字問わず)」のため、上記onはDynamic Promptsでは無視される。 "no": #booleanにあたる文字列を使う場合は数値同様""で文字列にする。 - no pants - no shirt #特にon,off,no辺りは知らずにうっかり使いうる単語なので要注意
補足:マップ宣言の例
map1: { inside_array1: A, inside_array2: B, inside_map: {inside_array3: [A,B,C]} } map2: inside_array1: A inside_array2: B inside_map: inside_array3: - A - B - C # 上記map1とmap2の中身の構造は全く同じではある # ※{}マップや[]配列では頭のスペース揃えは必要ないが、要素の分かれ目は読みづらくなる。 # 書きやすい形・読みやすい形で書くように。 # 配列に関しては[]の方が良い場合もある。 color_array1: [red,blue,green,yellow,cyan,magenta,purple,white,gray,black,golden,silver] color_array2: #↑の配列を並べて書こうとすると… - red - blue - green - yellow #以下いっぱい...と、長くなるので、短い単語を多数羅列するときは[]配列の方が詰めて書ける
\エスケープ処理と""指定の問題について \(hogehoge\)などの注意点
※\(hogehoge\)などの注意点*3
\でエスケープ処理をする場合、""との関係で面倒なことになることがある。*4
#\(作品名\)など\を使うとき、""で囲わない時はそのままでよい chara1: hugohugo \(hogehoge\) #問題ない
#↓※''そのまま""で囲ってしまうと問題が発生する'' # chara2: "hugohugo \(hogehoge\)" #←こう書くと(\非対応文字列で)【ファイル読み込み自体が失敗する】 cahra3: "hugoghugo \\(hogehoge\\)" #これでchara1と同じ扱いになる(\\が読み込み時に\として扱われる) #""書式の中では、\を\\と重ねて書く必要がある。
#上記の問題は()以外の例や、\を記述したい場合などにも発生する。
face1: :D #これは「:D 」(口を開けた笑顔)と出力されるが #プロンプトが[ __face1__ :100]だと[ :D :100]という記述になり、スケジュール構文に組み込まれてしまう。 face2: \:D #そのためこのようにスケープ処理をつけておいた方が良いが #face3: "[ \:D :1]" #このように""で囲ってしまうと先述したように【ファイル読み込み自体が失敗する】 face4: "[ \\:D :1]" #""で囲った中で\を使う場合は\\2本重ねて書かなければならない #face5: \>\: #「>:」(キリッとした眉) 一部の組み合わせではそのままだと【ファイル読み込み自体が失敗する】 face6: "\\>\\:" #""無しでエラーになる一部の組み合わせは、""で囲ったりしないと使えない face7: > #もしくは改行指定(=""を使わず文字列化)をして \>\: #という風に書いても致命的なエラーを回避できる
#なお「\m/」のようにプロンプト要素自体に\を扱いたい場合… choujikuu_cinderella_hand_1 : \m/ #※当然だが、これではプロンプト側が\を認識しない choujikuu_cinderella_hand_2 : \\m/ #プロンプトに\を認識させるには\\が必要 choujikuu_cinderella_hand_3 : "\\m/" # そのまま""で囲うとファイル読み込みはされるが、プロンプトで認識されない choujikuu_cinderella_hand_4 : "\\\\m/" # ""で使う場合はこうなる。
#ちなみに… hageniko: | {red|green|blue} hagehage \(hagehage\), \\m/ , #|や>を使った改行対応構文も対象全体が文字列扱いとなるため""を使わずこちらで済ませる手段もある
(高度応用編)シーン型リスト
Dynamic Promptsは「単語のリストを作ってランダム出力する」のが基本の使い方だが、
「1シーンとして作ったプロンプトをリストに入れる」という使い方も使い方もできる。
特にワイルドカードは「色リスト」「髪型リスト」「キャラ名リスト」など単語の羅列が最も単純な使い方だが、
ワイルドカードで各シーンの流れをリスト化して並べて連続生成させることで、
「一回の生成で一連のストーリー画像を生成する」という使い方もできる。
あるいは、普段作っているシーンの状況指定部分をワイルドカードへ詰めて呼び出したりといった使い方もある。
YAML形式でまとめると階層でグループ分け&グロビングや特定シーンの呼び出しなんかもしやすい。
なお要素の多いワイルドカード・多数のワイルドカードはYAML形式で構築すると管理も作成も階層設定もしやすい。
またYAML形式ファイルの編集にはVSCodeやサクラエディタみたいなプログラミング向けの編集ソフトを使おう。
プログラミング向けソフトだと行頭の半角スペースを自動で差し込んでくれたり、行頭の半角スペースの調整もしやすい。
シーンリスト・シリーズ型ワイルドカード
ワイルドカードには、シーンの流れを並べてつかうこともでき、
一連のシーンをまとめたシリーズ型のワイルドカードで組み合わせ生成をすれば、
「一回の連続生成で一連のストーリーを順番に画像生成する」という応用ができる。
# 応用例:シリーズ型ワイルドカード .yaml形式 whole_day: #__whole_day/*__, ←*グロビング指定することで↓階層全てのカードをひとまとめにしたワイルドカードになる。 morning: #__whole_day/morning/*__, ←これで組み合わせ生成をすれば書いた順番で「睡眠→目覚め→朝ごはん→玄関→通学路→教室」の流れの生成もできる。 early_morning: | # __whole_day/morning/early_morning__, ←個別にシーンを呼び出してカードファイル側に書きながら生成の確認ができる。 shirt, sleeping, closed eyes, lying, on bed, under cover, blanket, inside blanket, early morning, before dawn, night, dark room, morning: | # __whole_day/morning/morning__, #「名前: |」指定なので↓にひとまとまりのプロンプトを書ける。また|指定なのでデータとして改行も保持される。 shirt, waking up, sitting, one eye closed, yawning, stretching, arms up, on bed, bed room, under cover, blanket, inside blanket, morning, sunlight, window, breakfast: | # __whole_day/morning/breakfast__, shirt, food on table, holding food, food in mouth, breakfast, upper body, eating, smile, living, morning, sunlight, window, entrance: | # __whole_day/morning/entrance__, school uniform, shirt, bow, upper body, leaning forward, looking at viewer, smile, open mouth, holding bag, school bag, house entrance, door, sunlight, school_road: | # __whole_day/morning/school_road__, school uniform, shirt, bow, from side, looking at viewer, walking, upper body, smile, hand up, open hand, open mouth, holding bag, school bag, outdoors, street, urban, in_school: | # __whole_day/morning/in_school__, school uniform, shirt, bow, upper body, smile, arms up, open hand, open mouth, on desk, classroom, window, (many girls:1.2), crowd,
シーン型カードを並べたシリーズ型ワイルドカード利用のちょっとした補足として
Tips.ワイルドカード内の組み合わせオプションを使う
__~カード名__,{~A|B|C} :チルダ指定すると「組み合わせから外してランダムにする」 __@カード名__,{@A|B|C} :@を入れると「組み合わせから外して順番ループ型にする」 ※ただし、ワイルドカードの中(組み合わせの中)だと常に切り替えてくれるわけではない。
(ワイルドカード内は最初に読み込んだ状態を維持したまま組み合わせ生成を続けるっぽい?)
Tips.組み合わせ1シーンあたりの生成枚数を増やす
後ろ側に増やしたい枚数分の分岐を持った{}やワイルドカードを指定すればいい。 例えば、↓を最後尾に入れることで組み合わせ1シーンあたりの生成を10枚に増やせる。 [{1|2|3|4|5|6|7|8|9|10}:9999]
シーン型分岐プロンプトと変数の応用
上記例だと例えば衣装の系統を変更したい場合、ワイルドカードを編集し直さなければならないが、
変数を使うことで、プロンプト側から一部を変更できるようにするといった構造も作れる。
#例: in_school: | # __in_school__, ${clothesset:school uniform, shirt, bow}, #指定が無ければ←の衣装にする upper body, smile, arms up, open hand, open mouth, on desk, classroom, window, (many girls:1.2), crowd,
#プロンプト側 ${clothesset=coat, winter school uniform, hat, glove} __in_school__
このような構成にすることでワイルドカードの一部を変更できるようにすることができる。
細かい応用例としては
running: | #__running__, (running:1.3), street, urban, from above, [(bouncing breasts,unaligned breasts:1.2):${bigbreasts:9999}], #通常除外する sweat, sweatdrop, (flying sweatdrops, speed lines, motion lines:1.5), #プロンプト記入時、${bigbreasts=0}にすることで胸を揺らす(※貧乳でも胸が膨らむ)
#プロンプト側 ${bigbreasts=0} (big breasts:1.2), __running__,
こうして同じワイルドカードを使いつつ、一部の特徴に細かく対応するといった仕組みも作れる。
もっと単純なシーン分岐「Befor and After」
@循環オプション指定でも軽く例に出していたが、
単純なシリーズ型リストとして最小2パターンだけ作る応用もある。
生成回数2回設定用 (@連続生成応用例)
${maincolor=!red}[←テーマカラー:999] 1girl, {@[●前編●:99] black hair, short hair, ear, school uniform, black blazer, socks, ,,, ${maincolor:black} head ribbon, ${maincolor:black} Pouch,,, full body, light smile, parted lips, standing, own hands together, knees together feet apart, (simple background, white background:1.4), |[●後編●:99] ${maincolor:black} hair, long hair, ponytail, magical girl, ${maincolor:black} dress, magical dress, frilled dress, ${maincolor:black} ribbon, thighhighs, elbow gloves, tiara, wrists ribbon, ,,, ${maincolor:black} head ribbon, ${maincolor:black} Pouch,,, full body, wind lift, \>\:, smile, standing, crossed legs, arm apart, hand up, (simple background, patterned background, heart background, white backgorund, ${maincolor:black} backgorund:1.2), }[★末尾★:99]
@指定された{}分岐の中身は、連続生成だと順番に切り替えて生成する。 上記では{@ 制服|魔法少女フォーム }の2パターン順番に生成する。
このように分岐と@連続生成オプション(または組み合わせ生成オプション)を応用すると1度に2つのシーンを生成でき、
また連続生成ならグリッド画像として「各シーンを合わせた1枚の画像」も作成されて手動での画像結合の手間も省ける。
(WebUIから出力されたグリッド画像)
ちなみに@を使わず「組み合わせ生成オプションのシード値固定で2連続生成する」と、
(プロンプトが近いなら)似たベースから変化させた2枚の画像を連ねて生成したり…といった使い方もできる。
…比較画像の生成自体はスクリプトの「X/Y/Z plot」などでも可能だが
plotでは大量の要素を細かく切り替えた画像を作るのには不向きで比較情報も入ってしまい、画像作りには適さない。
パターンを増やしてグリッド画像としてもっと多くを1度に並べることも当然もできる。
グリッドの1列の画像数はWebUIの設定画面(画像/グリッド画像の保存)から変更しよう。
生成オプション・設定
生成画面のオプションとWebUIの設定画面にも設定がある。
生成オプションでは全ての組み合わせを生成するという設定が可能
他にも生成オプションとしてMagic Prompt(呪文の魔法)という自動プロンプトがあったりする(検証できず)
設定画面の方では細かい処理上の設定ができる。
組み合わせ生成・Combinatorial Generation
生成オプション「組み合わせ生成(Combinatorial Generation)」をオンにすることで
「通常ランダムとなる分岐の組み合わせを順次生成する」ということができる。
例えば{red|blue|green} shirt,で組み合わせ生成をすれば、
「red shirt,」「blue shirt,」「green shirt,」という3枚の画像が生成される。
また{red|blue|green} {shirt|dress},で組み合わせ生成をすれば、
・「red shirt,」「red dress,」
→「blue shirt,」「blue dress,」
→「green shirt,」「green dress,」の計6枚の画像となる。
※後ろ側の分岐から切り替えて組み合わせを抽選する
注意点として{2$$A|B|C}といった指定の場合は前後入れ替えのパターンも含めて生成してしまう。
例では「A|B」「A|C」「B|A」「B|C」「C|A」「C|B」の6パターンとなり、要素が増えると組み合わせは爆発的に増える。
n×n×n...では少ないパターン同士でも合わせると組み合わせは非常に膨大になる。
5x5x5でも全通りで125枚になってしまうように、組み合わせ生成をする際は生成数に要注意。
細かい活用法として連続生成をする際に使えるオプション指定がある(組み合わせ生成・連続生成用オプション指定)
補足として、基本のシード値は通常の連続生成同様、連番生成となる。
オプション設定下の「高度な設定」でシード固定をオンしておくと全て同じシード値で生成してくれる。
簡易的にパターンの比較生成を行いたい場合は、固定で出力しよう。
組み合わせ生成の応用として、大量の要素を使ったリストを使えば「連続したシーンの生成」なんかもできる。
大規模なリストはワイルドカード、特にYAML形式ワイルドカードを使うと作りやすい。
※ただしワイルドカードが読み込めない状態で組み合わせ生成を実行するのは危ないかも(筆者が一度やらかして使用メモリが増加し続ける状況に陥ったのでwebuiを閉じて対処した)
WebUI設定画面(setting)からの設定
WebUIの設定画面側から、Dynamic Promptsの細かい設定ができる
「{}」や「__」の構文文字列の変更(変更非推奨)、プロンプトの別途書き込みなど。
生成関係としては
- プロンプトの空白を無視:※プロンプト全体へ及ぶ。オンにするとプロンプト自体が詰まる。
- Disable de-duplication of wildcards before processing.
ワイルドカードの分岐の重複削除をやめる:通常では「全く同じ分岐は複数書かれていても1つ扱いにする」のを、オンで別扱いにする。(オフの場合、全く同じ記述を並べる形での個数調整はできない) - Disable sorting of wildcards before processing.
ワイルドカードの分岐のソートをやめる:通常では内部的に分岐を整理しているのをやめる - Shuffle wildcards before use for more random outputs
ワイルドカードをシャッフルする:内部的にランダムな分岐を一度シャッフルしてランダム性を高める
なお組み合わせ生成、@生成などには影響しない模様
ComfyUIでの設定方法
WebUIのような設定画面は用意されていないが、Dynamic Promptsの実体ファイルを直接書き換えることで無理矢理設定が可能。
venv\lib\python3.12\site-packages\dynamicprompts\wildcards\wildcard_manager.py の41行目以下に前述の設定項目がある。
self._sort_wildcards = True self._dedup_wildcards = True self.shuffle_wildcards = False
としあき製ワイルドカード一覧
その1
その2
おしゃれ着せ替えワイルドカード(2023/4/3版)
338 無念 Name としあき 23/04/03(月)04:13:49 ID:utwJBEf6 No.1082998966 del そうだねx6
私もそのおしゃれ着せ替えワイルドカード愛用させてもらってる!
それの固定キャラ用に髪型指定とかrealsticとかを抜いたバージョンを
fsn2.txt
226無念Nameとしあき23/03/27(月)23:42:36 ID:fqYA/u1o[3]No.1080928331No.1080928331 ngそうだねx14
おしゃれ着せ替えWildcard作りました
fsn.txt
適当に名前を変えてWildcardに指定するといろんな服に着替えるよ
例→ fsn.txt
プロンプト→ __fsn__
あとは好きなLoraなりワードなり追加してね
ファッション雑誌みたいになるよ
(編注: 1girl, とsolo, は除去しておきました)
メガネワイルドカード
135無念Nameとしあき23/03/31(金)21:18:47 ID:6Kpnok2oNo.1082139113そうだねx3
>たておつ
>メガネはやれ
wildcard置いときますね
fu2060925.txt
人物構図ワイルドカード
153 無念 Name としあき 23/04/02(日)21:18:48 ID:pob9eGfE No.1082895617 del そうだねx4
>肝心のワイルドカード自体もテーマが決まってればAIで雑に作れちゃうから楽でいいよね
>…あれこれ画像生成するために俺必要ないのでは
便利すぎませんか!
wild_composi.txt
動物ワイルドカード
439 無念 Name としあき 23/04/03(月)09:10:52 ID:PKo4X3Ds No.1083022662 del そうだねx2
赤雑だけどお世話になったのでChatGPTに動物の名前を出してもらったやつを置いときますね
これと着ぐるみパジャマを合わせるといいのかも?
wild_animals.txt
ブラのワイルドカード
137 無念 Name としあき 23/04/03(月)19:56:20 ID:ilNVsOYE No.1083164642 del そうだねx7
wild_bra.txt
wildcardの話題が出てたのでブラのwildcardを共有
色と形の組み合わせセット
色のカードと形のカードの2個でも同じように出るんだけど
braの単語がこっそり顔にも影響しちゃうのでセットにして作りました
よかったらどぞ
職業ワイルドカード
31 無念 Name としあき 23/04/06(木)21:00:41 ID:AqEyfn2M No.1084125823 del そうだねx12
たておつ
ChatGPTくんに適当に職業リスト化してもらったよ
wild_job.txt
(__このwildcard__ form girl)とかで遊んでね
民族衣装+地名ワイルドカード
58 無念 Name としあき 23/04/07(金)14:20:09 ID:YhCRN2DE No.1084320689 del そうだねx10
wild_national_cos.txt
GPTちゃんに世界の民族衣装と関連する地名を聞いてtxtにしてみたよ
全然出ない衣装もあるけど良かったらwildcardで遊んでみてね!
スポーツ競技ワイルドカード
94 無念 Name としあき 23/04/07(金)14:57:37 ID:FE2mep1c No.1084327989 del そうだねx8
たておつ
ChatGPTくんに五輪種目を中心にスポーツ競技リストアップしてもらったよ
wild_sports.txt
wildcardで遊んでみてね
厨二病ワイルドカード
105 無念 Name としあき 23/04/08(土)21:06:15 ID:Fxj891zU No.1084807897 del そうだねx4
wild_tyuuni.txt
ChatGPTくんの考える厨二病英単語リストだよ
wildcardの味付けにどうぞ
エジプト神ワイルドカードv2
298 無念 Name としあき 23/04/12(水)20:36:13 ID:gUxbd72. No.1086119244 del そうだねx2
wild_egypt2.txt
効果があるんだか無いんだかエジプト神wildcard
ついでにおすすめプロンプトloincloth, (choli, lehenga:1.2)
131 無念 Name としあき 23/04/09(日)22:40:47 ID:rBG0joQo No.1085243009 del そうだねx5
Atum Osiris Nephthys
Anubis Horus Ra
Medjed Bastet Shu
Geb Nuit Tefnut
Ammon Hathor Cleopatra
となっております
wild_egypt.txt
wildcardも置いとくね
神様100柱ワイルドカード
342 無念 Name としあき 23/04/10(月)00:15:40 ID:rBG0joQo No.1085277526 del そうだねx6
wild_100gods.txt
chatGPTくんに神様100柱リスト化してもらったよ
何柱反応するかわからないけど置いとくね
背景ワイルドカード
283 無念 Name としあき 23/05/06(土)17:24:55 ID:H0z9ZbjI No.1093855571 del そうだねx8
__ftbClothingset__
とそれなりに同居できるように確認しながら背景のワイルドカード作った
試してくれ
https://mega.nz/folder/keVFWBZD#n0FKWYF-XGoo469YHe1Wkg
表情、構図、姿勢のワイルドカード
176 無念 Name としあき 23/05/08(月)15:56:22 ID:m3anW6Is No.1094568467 del そうだねx1
>構図のワイルドカードってどんなのですだっけ?
https://wikiwiki.jp/sd_toshiaki/Extensions#va95c4c1
ここのDynamic Promptsの説明を読むのだ
ちなみに構図のワイルドカードはなかった気がするので
俺が作った適当なものを…と思ったが
どこにアップしたらいいのやら
186 無念 Name としあき 23/05/08(月)16:06:16 ID:m3anW6Is No.1094570249 del そうだねx5
>zipにして「ふたば@あぷ」
こんな感じでOK?
fu2171179.zip
期待はするなよ
あとは煮るなり妬くなり魔改造するなりお好きに
ワイルドカード作成・利用に使うツールについて
最低限の作成ならtxtファイルを作るだけなので、標準のメモ帳ソフトでも事足りる。
YAML形式のファイルを扱う場合は、対応したプログラミング編集支援系のソフトを利用した方が良い。
現在一般的な「VSCode*5」辺りを使うのが一番便利。
記述のミス、エラー部分もだいたい教えてくれる(※[,,,]の配列記述とかが関わるとうまく教えてくれないこともあるみたい)
既に作られたワイルドカード、yaml形式ファイルから内容を引き出したい時用のやつ
WebUIのDynamic Promptsのワイルドカードファイルを読み込ませるとリスト表示&コピーボタンを用意するHTML
https://mega.nz/folder/4N9EQRLY#bueku5VWGFje4gLeLj6Ofw
yaml形式でまとめられたプロンプトリストにも使える。