Pixiv Fanbox
プロンプトの一部をランダム化 「Dynamic Prompts」の基本と応用
Published 05/22/2024, 03:32:19 PM · Edited 06/24/2026, 01:47:44 PM

<記事内容の要約>
・{red|blue|yellow} のような記法でプロンプトの一部をランダム化し、表情・服色・髪型・背景などのバリエーションを効率よく大量生成できる「Dynamic Prompts」の紹介記事
・少数の候補はDynamic Prompts、多数の候補はWildcard、と使い分けることで、プロンプト欄を肥大化させずにランダム生成の幅を広げられる
・組み合わせ生成、採用頻度の調整、MagicPrompt、シード設定、Wildcardとの入れ子運用もマスターすることで、「放っておくだけで好きな画像だけがどんどん生成されていくガチャ」をローカル生成で作れるようになる
こんにちは、スタジオ真榊です。この記事では、ローカル用の拡張機能「Dynamic prompts」を使って、プロンプトの一部をランダム化する方法について解説します。(これまでの記事内容を2026年5月現在のものに刷新しました)
例えば眼鏡の色を指示する部分だけランダム化することで、このように毎回色が違う画像を生成することができます。うまく組み合わせれば、キャラクターを固定しながら、ポーズや表情、シチュエーション、背景などにバリエーションを出すことが可能です。
さらに、DynamicPromptsには「wildcard」機能が同梱されています。こちらはwildcardフォルダに保存しておいたテキストからプロンプトを呼び出せる機能で、DynamicPromptsによる特殊記法と組み合わせるとさまざまな応用がききます。
ローカル画像生成の最も便利なところは、外出中でもずっと画像を生成し続けられるところ。プロンプトの一部ランダム化はバリエーション豊かな画像を狙った通りに大量生成するのに必須の技術ですので、できるだけ早めに使い方を覚えておきましょう。
目次
ダイナミックプロンプトの基本
【一覧からインストールする場合】
【URLからインストールする場合】
・基本は{Aword|Bword|Cword}
・採用頻度を操作するには
・高度なランダム設定
「Wildcard」との違い
魔法の言葉
高度な設定
・シードをプロンプトからリンク解除
・固定シード
・画像を生成しない
実際の使い方
<ランダム化がうまくいかないときは>
応用:Wildcardと組み合わせたH画像量産法
ダイナミックプロンプトの基本
SDwebUIやForgeのExtension画面で拡張機能「sd-dynamic-prompts」をインストールすることで、txt2imgやimg2img画面で特殊なプロンプト記法やwildcard機能が使えるようになります。
DynamicPromptsはWebUIの拡張機能リストの中にあるので、webUIの日本語化のときと同様、下記のどちらかの手順でインストールするだけでOKです。
【一覧からインストールする場合】
①拡張機能(Extensions)タブから拡張機能リストを開き、読み込みボタンをクリック。
②リスト下方にある「wild card」の欄の「Install」ボタンをクリック(見つからない場合は検索欄の下の「スクリプト」のチェックを外す)
③拡張機能リストの左隣の「インストール済」タブから「適用してUIを再起動」
④成功していれば、「設定」タブの左隣あたりに「Wildcardの管理(Wildcards Manager)」タブが現れる
【URLからインストールする場合】
①拡張機能(Extensions)から「URLからインストール」のタブを開く
②「拡張機能のリポジトリのURL」欄に「https://github.com/adieyal/sd-dynamic-prompts」と入力
③インストールボタンを押す。インストールが終わったら、拡張機能リストの左隣の「インストール済」タブから「適用してUIを再起動」
④成功していれば、「設定」タブの左隣あたりに「Wildcardの管理(Wildcards Manager)」タブが現れる
インストールが成功していれば、Controlnetなどが表示される部分にこのようなメニューが追加されます。特にデメリットがないので、「Dynamic Prompts有効化」には常にチェックを入れておいて大丈夫です。
・基本は{Aword|Bword|Cword}
Dynamic Promptsがオンになっていると、{ }と縦棒「|」を組み合わせて複数のプロンプトを記述することで、これらのうちどれかを毎回ランダム選択するようAIに指示することができます。例えば、{red|blue|yellow|purple}-framed eyewearのように利用すると、さきほどのように毎回赤/青/黄/紫の眼鏡のうちどれかが4分の1の確率で選ばれることになります。
「|」で区切ればいくつでもタグを増やせるので、例えば「black hair,black eyes|blue hair,blue eyes|red hair,red eyes」のように複数タグを並列した記述もできます。(smile:1.3)のような強調構文との併用ももちろん可能ですので、表情をランダム化しつつ強調したいなら({smile|angry|embarrassed|sad}:1.3)のように記述すればOKです。
どのタグが選ばれるかは完全にランダムですが、採用結果はSeed値に基づいて決められていることを覚えておきましょう。たとえDynamicPromptsをふんだんに使われたプロンプトでも、前回とSeed値が同じなら全く同じタグが選ばれ、同じ画像が生成されます。
・「組み合わせ生成」で総当たりが可能
完全ランダムの状態だと、4枚同時生成の中に赤が三つ選ばれてしまうような偏りが自然と生じますが、DynamicPrompts欄の「組み合わせ生成」にチェックを入れると、記述した内容から考えられる組み合わせが総当たりされます。下手にオンにすると数百枚の連続生成が始まりかねないので、ここはよく機能の中身を理解しておいてください。
まず、組み合わせ生成がオンになると、DynamicPromptsで記述されたのと同じ順番に一つずつ採用されます。先ほどの例なら、4枚同時生成で必ず「赤/青/黄/紫」の順に生成されるというわけです。
ただし、これは「順番に生成する」機能ではなく、「あり得る組み合わせを全て順番に生成する」機能なので、ランダム化されているタグが複数個所あると、4x5x3...とどんどん掛け合わされて、とんでもない数の生成数になってしまいます。これを防ぐために、「最大生成数」の設定があります。
たとえば、{smile|angry|sad|surprised},{standing|sitting|lookingback},{day|evening|night}だと4×3×3=36通りですが、最大生成数が8なら、最初の8通りだけ生成されます。ランダム指定を複数入れた状態で「組み合わせ生成」をオンにすると、生成枚数が一気に膨れ上がってしまいますので、初回は必ず「最大生成数」を小さめに設定しておきましょう。デフォルトの「0」だと、そのまま全ての組み合わせで総当たりが始まります。
さらに、これから行うことになった組み合わせ生成を何回繰り返すか、「組み合わせのバッチ」欄で決められます。考えられる組み合わせが36通りある状態で最大生成数を8に設定すると、先頭の8通りまでが順次生成されますが、「組み合わせのバッチ」を2にすると、この8通りを2周して16枚画像を生成することができます。ちなみに、普段画像生成をする際に何枚同時生成するかを選ぶ欄がありますが、そちらを4枚にしていると、4枚ずつ4回生成して16枚を出力する動きになります。
{|||}で記述するDynamicPromptsだけでなく、この総当たりはwildcardにも及びます。wildcardのテキストに100種類(つまり100行)のプロンプトが用意されていた場合、その全ての組み合わせ生成が始まりますし、{red|blue|yellow|purple} eyesと同時に記述していたら、x3で計300枚の画像が順次処理されていくというわけです。
・採用頻度を操作するには
採用結果に偏りを付けたい場合は、{white|white|black}のように、多く選択させたいタグの数を多めに表記する方法があります。こうしておけば、3分の2が白、3分の1が黒になるわけですね。もっと細かく採用頻度を決めたい場合は、{0.7::smile|0.2::angry|0.1::crying}のように二つのコロンを使って記述すると、それぞれのプロンプトが70%・20%・10%の確率で採用されます。(ちなみに数値は相対値ですので、合計が1にする必要はありません)
{ }内に空欄を増やす方法もあります。例えば、プロンプトの末尾に{||||v}と記述すると、5分の4は空欄が選ばれますが、5分の1の確率で「v」が追加されるので、「20%の確率でピース画像が混じるプロンプト」にすることができます。縦棒で区切った中に半角スペースなどを入れる必要はありません。
・高度なランダム設定
このほか、ややこしいのであまり実践では使いませんが、下記のような方法でより高度なランダム指定も可能です。
{2$$A|B|C}
3つのプロンプトのうち、どれか2つがランダムで選択される。同じ候補は重複して選ばれない。
{1-3$$A|B|C}
3つのプロンプトのうち、1~3つがランダムで選択される
{2$$and$$ A|B|C}
A, B, C のうちどれか2つが選択され、「and」で結合される。
「Wildcard」との違い
プロンプトをランダムで選択する別の方法として「Wildcard」があります。こちらもDynamicPromptsの機能の一つで、事前に用意したテキストファイルに列記してあるプロンプトの中から、毎回どれか1行をランダムに採用する機能です。「Dynamic Prompts」には始めからWildcard機能が同梱されているので、別々にインストールする必要はありません。
Wildcardの使い方は、下記記事をご参照ください。
例えば「用意した100種類の髪型プロンプトの中から毎回ランダムに一つ選ぶ」ようなことがしたい場合、{a|b|c}の記述法だとプロンプト欄に100種類もタグを書き連ねなければなりません。一方、Wildcardでは「__hairstyle__」と書くだけで再現できるメリットがあります。選択肢の数が少ない場合はdynamic promptsを使い、選択肢が多い場合はテキストファイルを用意してwildcardでランダム化…というように使い分けるとよいでしょう。
さきほどの組み合わせ生成とWildcardを併用すると、決まった順の「エロイラスト集」を作るようなことも可能です。例えば、pagesというテキストに
・1行目:ベッドに座って恥ずかしがっている女性キャラ
・2行目:ベッドの上で服を脱いで横たわる女性キャラ
・3行目:ベッド上で男性とキスする女性キャラ
・4行目:…
のように50枚分Hの流れを記述しておき、キャラクター情報とともにそのwildcardを呼び出して最大生成数50(0でも同じ)で生成すれば、同じキャラのHシーンの流れを総当たりで順次生成できるというわけです。
魔法の言葉
Dynamic Promptsには「魔法の言葉(MagicPrompt)」というメニューがあります。これは現在入力されているプロンプトをAIが参照し、自由にタグを追記してくれる機能で、本来別に開発された拡張機能が同梱されたものです。
チェックを入れて生成すると、初回はモデルダウンロードのため「WARNING:dynamicprompts.generators.magicprompt:First load of MagicPrompt may take a while.」とメッセージが表示され、少し時間が掛かります。
Magicpromptの最大長:MagicPromptが生成する追加プロンプトの長さのトークン上限です。デフォルトの100なら、100トークンまでの長さになります。長くすると情報量は増えますが、余計な画風語や構図語が混ざりやすくなります。
Magicpromptの創造性:MagicPromptのランダム性、自由度のこと。低いと現在のプロンプトに組み合わされやすいタグが選ばれ、高くすると意外なタグが選ばれるようになります。
Magicpromptモデル:MagicPromptに使う補完モデル。「Gustavosta/MagicPrompt-Stable-Diffusion」がデフォルトですが、他にもさまざまなモデルを選べます。初回使用時に数百MB~1.4GB程度のDL時間がかかります。
おまかせ:ランダムプロンプト生成にするものです。「I’m feeling lucky」的な機能で、あまり使いません。
Attention grabber:プロンプト内の一部に自動で重みをつける機能。(smile:1.3)のような重みづけを、DynamicPrompts側が各タグに自動で付けてくれます。Attentionの最小値・最大値で強度の範囲を決めます。
高度な設定
ここでは、プロンプトの再現性やプロンプト採用結果の事前チェック設定ができます。
・シードをプロンプトからリンク解除
通常、DynamicPromptsで採用するプロンプトとseedはひもづいています。つまり、同じSeedを選ぶと、毎回採用されるタグも同じになるので、Seed「1」で{smile|angry|sad|embarrassed}を4枚生成したらたまたま全部smileだった場合、プロンプトを変更しても毎回smileが採用される再現性が生じます。
「シードをプロンプトからリンク解除」はそういう事態を避けるためのもの。「プロンプトのランダム展開」と「画像生成seed」を別々に扱うことができます。
・固定シード
DynamicPrompts側のランダム選択に使うseedを固定する設定です。オンにすると、同じプロンプトならランダム採用結果も同じものになります。
たとえば、{smile|angry|sad|embarrassed}が毎回バラバラではなくなり、同じ条件なら同じ採用結果になりやすくなります。
・画像を生成しない
プロンプト採用結果だけ事前確認するための機能。オンにすると、画像は作らず、ランダム指示をもとにDynamicPromptsが最終的にどういうプロンプトにしたかを見ることができます。まず画像を作らずに展開結果を確認して、問題なければオフに戻して生成するような使い方ができます。
(※「固定シード」と「シードをプロンプトからリンク解除」を両方オンにすると、画像生成用のシードとプロンプト展開用のシードの扱いが変わるため、「同じ画像seedでプロンプトだけ変えて比較する」ような使い方になります)
実際の使い方
さて、実際にダイナミックプロンプトを使って固定シチュエーションのランダムキャラ生成を試してみましょう。今回はWAI IllustriousXL v16を使い、「いやな表情でスカートをめくっている美人メイドさん」シチュエーションをさまざまな表情・髪型・髪色・瞳色・服色・胸の大きさで生成してみたいと思います。プロンプトは以下の通り。
PP:1girl,{black|white|cyan|pink|green} dress,maid costume,from below,focus on panty,night room,sexy,lifted skirt by self,{angry|glaring|bad mood|expressionless},holding skirt,disgust,garter belt,detailed lace panty,{black|white|red|cyan|pink} panty,detailed stockings,embarassed,cinematic lighting,shiny skin,{red|brown|blue|black|blonde|silver|gradient} hair, {long hair|short hair|bob cut|twintails|low_twintails|forehead} hair,{blue|purple|cyan|silver} eyes, {large|medium|small} breasts, legs_together,fisheye lens, straight-on,masterpiece, best quality, very aesthetic, absurdres
この指定により、次のようなランダム効果が得られます。
{black|white|cyan|pink|green} dress
黒・白・シアン・ピンク・緑色のうちいずれかの色のメイド服
{angry|glarling|bad mood|expressionless}
怒る・睨む・不審な表情・無表情のいずれか
{black|white|red|cyan|pink} panty
黒・白・赤・シアン・ピンク色のうちいずれかの色のパンツ
{red|brown|blue|black|blonde|silver|gradient} hair, {long hair|short hair|bob cut|twintails|low_twintails|forehead} hair
髪型・髪色のランダム化
{blue|purple|cyan|silver} eyes
青・紫・シアン・銀色のうちいずれかの色の目
{large|medium|small} breasts
胸の大きさランダム化(もし平らな「flat chest」も入れたい場合は{large breasts|medium breasts|small breasts|flat chest}となります。「breasts」がカッコ内に入るところに注意)
こちらが生成結果。シチュエーションをきっちり固定しながら、キャラクターの容姿や表情のニュアンスを揺らすことができました。
このように「何が出てくるかはわからないけど、超好きな条件しか設定していないから、自分が超好きなものが出てくることだけは間違いない」という状況を作れるのがdynamic promptsの便利なところです。要するに、Hイラストの量産には不可欠ということですね。
<ランダム化がうまくいかないときは>
今回のようにたくさんランダム化すると、記述法のうっかりミスでランダムになっていない要素が混じってしまう場合がよくあります。そういう場合は、画面右下にある生成画像のプロンプト欄をチェックして、間違いがないか確かめましょう。
例えば、縦線で区切って{red|black|green}としなければいけないところを、間違えて{red,black,green}としてしまっていたり、{blue|purple|cyan|silver} eyesとしなければいけないところを{blue|purple|cyan|silver eyes}とカッコ内に入れてしまっていたりすると、期待した結果が得られません。
以下、R-18画像が掲載されます。閲覧時は周囲にご注意ください。
応用:Wildcardと組み合わせたH画像量産法
こちらのランダムプロンプトは、キャラクターを固定しながらH画像を量産したいときに使うものです。Wildcardと組み合わせているので複雑ですが、プレイ内容やフォーカス位置、シチュエーションや体位などを揺らすのが目的です。(※太字にしてあるところがwildcard)
1girl,__sex_emotion__, {on bed|}, explicit,{__play__,1boy, male focus, fat man, head out of frame,male pubic hair|__play__,1boy, male focus, fat man, head out of frame,male pubic hair|solo,nipples,pussy,__sexual_solo__|facing away,back view,sex,vaginal,penis,,from behind,looking away,ass focus,1boy,solo focus, fat man, head out of frame,male pubic hair},{full body|close-up|from side|breast focus|from below,ass focus},{2koma,instant loss, multiple views,black border|},shiny skin ,{dutch angle|},{v-shaped eyebrows|}, blush,eyelashes, underlighting,
後ろの方にある{2koma,instant loss, multiple views,black border|}は空欄を使う技法で、これによって50%で2コマ漫画(即堕ち2コマ)になります。Wildcardはそれぞれ「sex_emotion」で表情を、「play」でプレイ内容を、「sexual_solo」で単独Hポーズをランダム採用しています。
例えば、「play」のテキストの中身はこんな感じ。Wildcardの中にもさらにWildcardやdynamic promptを入れ子にしているので、多種多様な(しかし必ず自分の好きな)シチュエーションのHイラストが量産できるというわけです。同じ内容のものが複数行あるのは、多めに選ばれてほしいプロンプトです。
{pov,looking at viewer|||},sex,vaginal,__sex_position_limited__
{pov,looking at viewer|||},sex,vaginal,__sex_position_limited__
{pov,looking at viewer|||},sex,vaginal,__sex_position_limited__
{pov,looking at viewer|||},sex,vaginal,__sex_position_limited__
{pov,looking at viewer|||},imminent penetration
{pov,looking at viewer|||},after sex,cum in pussy,heavy breathing,veiny penis,cum pool,
bukkake,face,veiny penis,ejaculation,projectile cum
bukkake,face,veiny penis,ejaculation,projectile cum
{pov,looking at viewer|||},penis awe,heavy breathing,constricted pupils,veiny penis
{pov,looking at viewer|||},view between legs,veiny penis
{pov,looking at viewer|||},{fellatio|licking penis|:>=,sunken cheeks|kissing penis|hug and suck,hugging another's leg|oral invitation,uvula,open mouth wide,mouth focus,tongue out|standing fellatio,from side,hands on another's leg|},veiny penis,
{pov,looking at viewer|||},{fellatio|licking penis|:>=,sunken cheeks|kissing penis|hug and suck,hugging another's leg|deepthroat|oral invitation,uvula,open mouth wide,mouth focus,tongue out|licking testicle|standing fellatio,from side,hands on another's leg|},veiny penis
{pov,looking at viewer|||},{fellatio|licking penis|:>=,sunken cheeks|kissing penis|hug and suck,hugging another's leg|deepthroat|oral invitation,uvula,open mouth wide,mouth focus,tongue out|licking testicle|standing fellatio,from side,hands on another's leg|},veiny penis
{pov,looking at viewer|||},{handjob|buttjob|paizuri},veiny penis
{pov,looking at viewer|||},{handjob|buttjob|paizuri},veiny penis
{pov,looking at viewer|||},{handjob|buttjob|paizuri},veiny penis
{pov,looking at viewer|||},{handjob|buttjob|paizuri},veiny penis
from side,french kiss,arm around neck,faceless male,bald,leg_lock
from side,french kiss,arm around neck,faceless male,bald,
これに、例えば以下のような容姿のランダムプロンプトを足して生成してみます。瞳や胸の大きさ、コスチュームなどをランダムにする内容です。
容姿:{maid costume|sailor uniform|micro bikini|bunny girl},{red|brown|blue|black|blonde|silver|gradient} hair, {long hair|short hair|bob cut|twintails|low_twintails|forehead},{blue|purple|cyan|silver} eyes, {large|medium|small} breasts
こちらが生成結果。背景は矛盾しにくいように「simple background」だけにしています。
おおむね意図したように、2分の1の確率で2コマ絵になり、シチュエーションも想定した範囲内でばらけさせることができました。
衣装のランダム化をやめて、メイド衣装(maid costume)だけにするとこうなります。
このように、Dynamic PromptsとWildcardを組み合わせた真骨頂は、自分の推しキャラばかりをDynamicPromptで指定して、シチュも画角も正解しかないエロガチャを無限生成するところにあります。ランダム生成はローカル生成の強みを最大化する非常に便利な機能ですので、ぜひ使いこなしてみてください。
それでは今回はこのへんで。スタジオ真榊でした。
Attachments (21)

h54FN1EHOMvSiEHzHiCgmn9w.jpeg

eFx4T1kt5EB9W9gNA3o02lqy.png

d6d5D9atovtDD7k9f5y35n8D.jpeg

PUkfzwTMfwg0OEjGvpBhsE7X.png

AV7QC26ACKjox1qlNJcMK8hj.png

pohG47sc3MnSXdDnlOgY3Vhd.jpeg

ctKHwmKho89FKgx96AVoZVU0.jpeg

zpP4xRmvaC3Ey9LLX0PRvTHU.png

0jKZYJgM1vvuVgH30CVte7mA.jpeg

loy1nxREOuSGOFNNsunIfosg.png

TEjvcnuO7OVUwLSSv7zh29f1.jpeg

h1Dh1R0cOk0kHuzSBaBQFT4o.png

HFIsgjkhkW2vABolQ4KoQJEF.png

BmmtsxTnD4MXfrqMXqzDDJLd.jpeg

jy0es6YmiMafRMN97RIHRHi7.png

fiSL2HyMIf2pzDp6pH9ufPr2.jpeg

woYTRefkMqSqdZ3nRNuxIHU9.png

navZVQLLQqeOp0qUWaqmV9k3.png

ZFP0fkwuGTMeySQ1UqEzsJR0.png

2I2n8JFcGsyK4N3ZJ2s8Sgbm.png

QYL81lPSbJegQbkrjk05x4xL.png
