こんにちは!悠です!
今回は「Stable Diffusion」で、プロンプトやLoRAの作用する領域を指定できる拡張機能「Regional Prompter」の使い方を紹介していきます。
主に複数のキャラクターの外見を細かく指定したり(左の子は青髪ロング、右の子は黒髪ショートなど)、左右のキャラでLoRAを使い分ける(例えば左の子には初音ミクLoRA、右の子には鏡音リンLoRAなど)時に使います。
以前紹介した「Latent couple extension」とLoRAの影響範囲を分離できる「Composable LoRA」を合わせたような、非常に便利な拡張機能になっています!
「Regional Prompter」の導入方法
Google Colaboratory版の場合
下記の方法で紹介している「maintained by Akaibu」のノートブックを使って、拡張機能「Regional Prompter」を導入していきます。
まだご覧になっていない方は、まず最初にこちらを準備しておいてください。


Google Driveからモデルデータを読み込むセルの下に新しくセルを作成し、下記のコードを入力します。
#Regional Prompterをインストール
%cd /content/stable-diffusion-webui/extensions/
!git clone https://github.com/hako-mikan/sd-webui-regional-prompter /content/stable-diffusion-webui/extensions/sd-webui-regional-prompter
%cd /content/stable-diffusion-webui
txt2imgの欄に「Regional Prompter」の項目が表示されていれば、導入は成功です。
ローカル版の場合
「Extensions」→「Install from URL」の「URL for extension’s git repository」に下記のURLを入力しInstallをクリックしましょう。
https://github.com/hako-mikan/sd-webui-regional-prompter
「Regional Prompter」の使い方
「Regional Prompter」の初期設定
「Regional Prompter」のタブを開き、Activeにチェックを入れ、Divide modeをHorizontal、Generation modeをAttentionにし、Use common promptにチェックを入れます。
Divide ratioによる区分の設定方法
Divide ratioに設定した値で、プロンプトが作用する領域を区切っていきます。
コンマ(,)で水平方向ごとの区分を、セミコロン(;)で鉛直方向の区分を行います。
最も簡単な2分割の場合を考えていきましょう。
水平方向に2分割する(左領域と右領域に分ける)には1,1を指定します(初期値)。

1,1
鉛直方向に2分割する(上領域と下領域に分ける)には1;1を指定します。

1;1
水平方向に4分割、鉛直方向に4分割する場合は次のようになります。
また、3,1,1と指定すると(60%、20%、20%)の配分になります。

3,1,1
次に水平方向と鉛直方向に複数区切る場合を考えていきます。
例えば領域を左上、右上、左下、右下に分ける場合は、1,1,1;1,1,1と指定します。

1,1,1;1,1,1
これは1,1,1;1,1,1と分けて考えることでわかりやすくなると思います。
赤字の部分が鉛直方向の比率、青字の部分が水平方向の比率です。
例えば1,2,1,1;2,1,3というdivide ratioを考えてみましょう。
これは、鉛直方向を1:2に分け、上部分を水平方向に2:1:1、下部分を水平方向に1:3に区分します。
visualize and make templateをクリックすることで、Divide ratioに設定した値を視覚化して確認できます。
プロンプトを領域ごとに指定する方法
領域を左上、右上、左下、右下に分けるDevide ratio = 1,1,1;1,1,1の場合を例にして考えていきます。

1,1,1;1,1,1
左上に窓、左下に猫を描き、右上に赤髪、右下にミニスカート(つまり、右側部分に赤髪ミニスカの女の子)を描いてみます。
領域と領域の区切りはBREAKでも構いませんが、visualize and make templateの下にあるtemplateを使うのがおすすめです。
プロンプトは下記の順番で記入していきます。
- コモンプロンプト:全領域に作用するプロンプト。品質向上系など。
- 左上(0領域):window
- 右上(1領域):red hair
- 左下(2領域):cat
- 右下(3領域):miniskirt
領域と領域の間はtemplateに表示されている構文で区切っていきましょう。次のようになります。
なお構文の前にコンマ(,)を入れてはいけません。
これで生成した画像は次の通りです。モデルにはMoijiMixを使用しています。
指定したプロンプトが各領域に反映されているのがわかりますね。
LoRAの作用する領域を指定する方法
「Regional Prompter」では、LoRAが作用する領域を指定することもできます。
ですので左側の女の子に初音ミクLoRA、右側の女の子に鏡音リンLoRAを適用するといったことができます。
基本的な設定は上項と同じですが、Generation modeをLatentに指定してください。
これで下記のようなプロンプトを使うことで、左右の領域に別々のLoRAを作用させることができます。
まとめ
以上が「Stable Diffusion」で、プロンプトやLoRAの作用する領域を指定できる拡張機能「Regional Prompter」の使い方でした。
「Latent couple extension」と「Composable LoRA」の2つを合体したような非常に便利な拡張機能ですので、ぜひ皆さんも試してみてくださいね!

ちなみに「Regional Prompter」には、記事で紹介した以外の機能も備わっています(マスクを使った領域指定など)。本当に多機能ですよね…
では、ここまで読んでいただきありがとうございました。
コメント
祭りなどの踊りでペア組ませると女性キャラLora使ってるせいか普通のプロンプトだと
パートナーが女性ならまだ良いんですけど男性の場合でも女性キャラLoraに引きずられて
女性キャラLoraの男装版にしか見えなくなる場合が多いのでRegional Prompter使ってみたんですが
Latentって左右に分ける場合左右ともLoraを使わないと駄目なんですかね
片方だけだと全体の絵柄がぼやけたような感じになってしまったのはなんででしょう?
Attentionを選んだ方が良いときとLatentを選んだ方が良いときの違いがよく分かりません
コメントありがとうございます!
Latentは複数のloraを違う領域に使いたい時だけ有効にした方がいいと思います!
それ以外の場合は全てattentionの方がいいはずです。
Readmeを見た感じ、Lora1つならattentionの方がいいと思われます。
ただloraは比重やモデルによっても効き目が変わるので、ぼやける原因が一概にlatentだけと言いきれないことが難しいですね…!
そうなんですね
thresholdについて書かれて無いのは弄っても意味が無いとか弄らない方が良いとか何でしょうか?
分からないからそのままにしてますが、出来れば弄って良いならこうするとどう変わるのか、
弄って駄目なら駄目な理由を短くていいから本文中に書かれているとありがたいのですが
thresholdに関しては私の場合、初期設定でも特に問題がなかったため触れておりませんでした!
readmeによると対象となるプロンプトによって変更するのが良いそうですね。
「髪は領域が曖昧になりがちなので小さな値が必要ですが、顔は領域が大きくなりがちなので小さな値が必要です。」
と書かれてあります。これだとどっちも小さな値でよくなる気が…誤植ですかね?
説明の通りだと何だったら数字を大きくした方が良いんだよという感じなのでthresholdについては
そのままで行こうと思います
ありがとうございました