Added explanation of the differences between standard selection syntax and PromptRandomChoice, including usage details and benefits.
ComfyUI-PromptRandomChoice
実行のたびに「プロンプトガチャ」を爆速で回す、超軽量なランダム選択ノードじゃ!
「背景や天気を適当に変えて、一晩中回しておきたいのう……」
そんなおぬしの願いを、実行時間 0.010s(注:作者環境で速いとき)という瞬速の魔法で叶えて進ぜよう!
背景・時間帯・天気などを別々にランダム化したい時に便利じゃ。
フロー内に複数個置いても、それぞれ独立して動くぞ。
特徴
-
実行ごとにランダム選択
- キューを雑に100件積んでも、毎回候補を選び直すぞ。
-
区切りは
|または実際の改行|と改行の両方を区切りとして扱うので、混在していても動くぞ。
-
候補の前後の
,と空白を自動で整理town,coffee shop,castle, fortress,のような書き方でも大丈夫じゃ。
-
プロンプト結合向けの返り値
- 選ばれた候補の前後に
,を付けて返すぞ。 - 例:
coffee shop→,coffee shop,
- 選ばれた候補の前後に
-
現在の選択結果をタイトル表示
- 実行時にノードタイトルが
Choice: coffee shopのように更新されるぞ。 - KSamplerのプレビューと見比べやすいのじゃ。
- 実行時にノードタイトルが
-
複数設置に対応
- 背景用、時間帯用、天気用など、複数ノードを置いてそれぞれ別々に使えるぞ。
導入方法
ComfyUIの custom_nodes ディレクトリで、以下のコマンドを打ち込むのじゃ!
git clone https://github.com/ruminar/ComfyUI-PromptRandomChoice.git
使い方
Prompt Random Choiceノードを置くoptions_textに候補を入れる (入力例を参照)- 必要に応じて
change_everyを選ぶ (NEW) prompt_textを文字列結合ノードなどでポジティブプロンプトへ足す- キューを好きなだけ積む
入力例
改行区切り (改行前の,は任意です)
town,
girl's room,
park,
lake,
flower garden,
castle, fortress,
forest,
grasslands,
sea,
snowy landscape,
mountain,
flower field,
starry sky,
coffee shop,
| 区切り
town|
girl's room|
park|
lake|
flower garden|
castle, fortress|
forest|
grasslands|
sea|
snowy landscape|
mountain|
flower field|
starry sky|
coffee shop|
選ばれやすさを調整したい場合
同じ候補を複数回書けば、そのぶん選ばれやすくなります。
day|day|day|sunset|night
昼を多めに出したい、たまに夕方や夜も混ぜたい、という時に便利じゃ。
仕様
|または実際の改行で分割\nという文字列は区切りとして扱わない- 各候補の前後の空白と
,を trim - 空候補は無視
- 有効な候補が1件も無い場合は空文字
""を返す - 候補があれば
,selected,を返す
出力
prompt_text- 例:
,coffee shop,(結合しやすいように、前後をtrimしてから,を付与します)
- 例:
標準選択記法 {day|night|morning} との違いについて
-
ComfyUI標準にも、プロンプト候補をランダムに切り替える構文として
{a|b|c}記法があります。
この記法は、CLIP Text Encodeでプロンプトが処理される段階で解決されます。 -
一方、
PromptRandomChoiceはその前段で候補を1つに確定し、選ばれた文字列だけを通常のSTRINGとして出力します。
そのため、選ばれなかった候補は下流へ流れません。- この性質により、選択候補の中にLoRAのトリガーワードをより安全に含めることもできます。
選ばれた候補だけが後続ノードへ渡されるため、標準の{a|b|c}記法よりも、候補の確定状態をワークフロー上で明示しやすくなります。- ※ ただし、LoRA自体のロードON/OFFを切り替えるものではありません。
ここでいう安全性は、選ばれなかったトリガーワード文字列が下流へ流れない、という意味です。
- ※ ただし、LoRA自体のロードON/OFFを切り替えるものではありません。
- この性質により、選択候補の中にLoRAのトリガーワードをより安全に含めることもできます。
-
区切り文字は、標準の
{a|b|c}記法と同じ|を使えます。
そのため、標準記法から{}の中身を抜き出してPromptRandomChoiceに持ってきたり、逆にPromptRandomChoiceの中身を{}で括ってプロンプト文字列へ戻したりできます。
出入り自由です。 -
また、画像生成の比較では、1回ごとにプロンプト候補が変わると、差分を判断しづらい場合があります。
PromptRandomChoiceではchange_everyを使うことで、同じ候補を数回維持してから次の候補へ切り替えることができます。 -
さらに、
PromptRandomChoiceの段階で確定した候補はノードタイトルに表示されます。- KSamplerのプレビューと見比べながら、現在どの候補が使われているかを確認できます。
change_every指定時には、Choice: lake (2/3)のように進捗も表示されます。
ライセンス
GPL-3.0(ComfyUI本体の掟に従っておるぞ!)