ComfyUIのリージョナルプロンプト実践:複数人物をSet Area・RegionalPrompt・Cutoffで分ける

"ComfyUIのコアソースには、ConditioningSetArea、ConditioningSetAreaPercentage、ConditioningCombineの引数とlatent領域への変換処理が定義されています。"
1024x768の画像で、左に赤い服の短髪の女性、右に青いジャケットの男性を置きたいとします。生成すると、赤が右のジャケットへ移り、青が左の髪へ入り、服と髪色が混ざりました。これはseedやモデル性能の問題ではありません。CLIPのtext encoderは文全体を文脈として読むため、“red hair, blue jacket”のredがjacketへ、blueがhairへ影響することがあります。領域条件ノードはpromptの作用範囲をlatent上で制限できますが、embeddingには全体文脈が残ります。対策は、ConditioningSetArea + Combineによる座標領域、Cutoffによる属性結合、Impact Pack Regionalによるmask領域サンプリングの3つです。それぞれ用途と限界が異なります。
複数人物のpromptが混ざる理由
CLIPは文全体の文脈を符号化する
Stable DiffusionのCLIP text encoderは単語を完全に独立して符号化せず、文全体を文脈として扱います。“blue hair, yellow eyes”ではembedding生成時にtoken同士が関係するため、blueがeyesへ影響する場合があります。ConditioningSetAreaは条件をlatentの領域に限定しますが、embedding自体は全体文脈から作られるため、青が目へ移る可能性は残ります。領域promptは左の赤が右へ影響するような空間的な混ざりを減らせますが、blueがeyesへ影響するtokenレベルの属性混ざりまでは防げません。
3種類の混ざり
| 種類 | 典型的な症状 | 対策 |
|---|---|---|
| 空間的な混ざり | 左の赤い服が右へ影響し、前景の青が背景へ入る | 領域条件(Set Area / RegionalPrompt) |
| 属性の混ざり | ”blue hair, yellow eyes”でblueがeyesへ影響する | 属性結合(Cutoff) |
| 顔の不一致 | seedを変えると同じ人物の顔が変わる | FaceID / LoRA(ここでは扱いません) |
選択表:問題 → 方法 → ツール → 向かない場面
| 問題 | 推奨方法 | ノード | 向かない場面 |
|---|---|---|---|
| 左右の人物を分ける | 標準の座標領域 | ConditioningSetArea + ConditioningCombine | 複雑なmask。座標計算が必要 |
| 色や服装が混ざる | 属性結合 | Cutoff BasePrompt + Set Region + Regions To Conditioning | 座標分割。READMEではSDXL 0.9で効果が弱いためSDXLは実測が必要 |
| 複雑なmask領域 | mask領域サンプリング | Impact Pack: RegionalPrompt + CombineRegionalPrompts + RegionalSampler | Impact Packが必要で、ノード欠落が起こる場合がある |
| 単純な色分けmask | 簡略領域ノード | Inspire Pack: Regional Conditioning By Color Mask | Impact PackまたはIPAdapter Plusに依存 |
| 姿勢がずれる | 姿勢制御 | ControlNet(OpenPose / Canny / Depth) | 属性の混ざりは解決しない |
| 顔が一致しない | 同一性の固定 | FaceID / ReActor / LoRA | 領域promptは解決しない |
組み合わせは、領域promptで位置を決める → OpenPoseで姿勢を決める → strength 0.3〜0.5のglobal conditioningで雰囲気を統一する、という順序が実用的です。OpenPose、ControlNet、IPAdapterの位置は領域と手動で合わせます。ノードは「左のOpenPose人物が左のprompt領域」と自動では判断しません。
標準ルート:ConditioningSetArea + Combine
座標パラメーター
| パラメーター | 意味 | 単位 | 範囲 | 補足 |
|---|---|---|---|---|
| x / y | 領域左上の座標 | ピクセル | 0 - MAX_RESOLUTION | 原点は左上 |
| width / height | 領域の幅と高さ | ピクセル | 64 - MAX_RESOLUTION、step 8 | latentへ書く際に8で割るためUIのstepは8 |
| strength | 領域条件の重み | 浮動小数 | 0 - 10、初期値1.0 | 重複領域の重みはサンプリング時に正規化 |
stepが8なのは、ConditioningSetArea.append()がlatent areaへ(height // 8, width // 8, y // 8, x // 8)と書き込むためです。512x512の画像はlatent空間で64x64になるので、座標を8の倍数に合わせます。ピクセル計算を避けたい場合は、0〜1を入力するConditioningSetAreaPercentageを使えます。
promptからsamplerまでの接続
1024x768を左右の人物に分ける例です。
手順1:左側promptの領域
- 左側人物のprompt → CLIP Text Encode(conditioning出力)
- Conditioning → ConditioningSetArea(x=0, y=0, width=512, height=768, strength=1.0)
- 領域情報付きconditioningを出力
手順2:右側promptの領域
- 右側人物のprompt → CLIP Text Encode(conditioning出力)
- Conditioning → ConditioningSetArea(x=512, y=0, width=512, height=768, strength=1.0)
- 領域情報付きconditioningを出力
手順3:conditioningを結合
- 左側Set Area出力 → ConditioningCombine(入力1)
- 右側Set Area出力 → ConditioningCombine(入力2)
- Combine出力 → KSamplerのpositive条件
任意手順:背景のglobal conditioning
- 背景prompt → CLIP Text Encode
- Conditioning → ConditioningSetArea(x=0, y=0, width=1024, height=768, strength=0.3-0.5)
- 他の領域conditioningと結合し、低strengthで雰囲気を統一
重要なのは、strengthが「透明度」ではなく「ノイズ予測の重み」だという点です。領域が重なると、複数のconditioningの重みはサンプリング前に正規化されるため、合計を手計算する必要はありません。
重複領域とstrengthの調整
領域が重なる場合、strengthでconditioningの混合比を調整します。重みは自動で正規化されます。前景人物はstrength=1.0、背景のglobal conditioningはstrength=0.3〜0.5から始めます。背景を下げれば人物への干渉は減りますが、完全には消えません。2人のpromptに競合する色があると、CLIPの全体文脈を通じて影響する可能性があります。
属性結合ルート:Cutoff
向いている場面と仕組み
“blue hair, yellow eyes”でblueがeyesへ影響するのが典型例です。Cutoffは属性の影響をprompt内の指定した部分に限定します。target tokenを隠してembeddingを再生成し、その方向を利用して属性関係を分離します。
Cutoffは座標ベースの領域promptではなく、位置ではなくtoken間の関係を扱います。ノードはCutoff BasePrompt、Cutoff Set Region、Cutoff Regions To Conditioning、Cutoff Regions To Conditioning (ADV)で、conditioning > cutoffにあります。
SDXLの注意点:READMEではSDXL 0.9で良い結果が得られなかったとされています。現在のSDXLやFLUXでは実測が必要で、万能な安定策としては扱えません。
インストールと使い方
インストール:
- ComfyUI-Managerで
ComfyUI_Cutoffを検索 - または
git clone https://github.com/BlenderNeko/ComfyUI_Cutoffをcustom_nodesへclone - インストール後にComfyUIを再起動
基本フロー:
- BasePromptに”blue hair, yellow eyes”などの完全なpromptを入力
- Set Regionで”blue”を”hair”へ結び付けるように属性を定義
- Regions To Conditioningでconditioningを出力
- 必要ならそのconditioningをSet Areaへ渡して位置を制限
制限と注意
Cutoffは座標分割には向きません。token属性を結び付けますが、「左は赤い服、右は青い服」という位置は決めません。属性と空間の両方を分けたい場合は、Cutoffで属性を結び付けた後、Set Areaで領域を制限します。
SDXLでの効果は不確実です。READMEはSDXL 0.9で弱い結果を示しており、現在の版も確認が必要です。SDXLを主に使うなら、簡単な色のworkflowで試してから採用してください。
mask領域サンプリング:Impact Pack Regional
RegionalPromptとRegionalSamplerのノード
| ノード | 入力 | 出力 | 説明 |
|---|---|---|---|
| RegionalPrompt | mask + advanced_sampler + variation_seed/strength/method | REGIONAL_PROMPTS | maskとsamplerを結び付け、領域promptを作る |
| CombineRegionalPrompts | 複数のREGIONAL_PROMPTS | REGIONAL_PROMPTS | 複数の領域promptを結合する |
| RegionalSampler | base_sampler + REGIONAL_PROMPTS + overlap_factor + restore_latent | latent | 各stepで領域サンプリングを適用する |
| RegionalSamplerAdvanced | RegionalSamplerの入力 + step制御 | latent | denoiseではなくstepで制御できる |
パラメーター:
overlap_factor:領域外側の遷移範囲を制御restore_latent:領域サンプリング中にmask外のbase latentを復元し、外側への余分なノイズを減らす
RegionalSamplerは各stepで領域サンプリングを実行します。一方、TwoSamplersForMaskは全体をサンプリングした後にmaskで結合します。前者は各領域の過程をより細かく制御できます。
インストールとトラブルシューティング
インストール:
- ComfyUI-Managerで
ComfyUI Impact Packを検索 - インストール後にComfyUIを再起動し、ブラウザを更新
よくある問題:
- ノードが赤い、または不足 → workflowの読み込みと不足ノードのインストール
- Python依存関係の問題 → 後続のComfyUIトラブルシューティングとメンテナンスを参照
簡略ルート:Inspire Pack Regional Conditioning(任意)
Set Areaの座標を計算したくない場合は、色分けmaskで簡略化できます。Inspire Packには次のノードがあります。
| ノード | 説明 |
|---|---|
| Regional Prompt Simple (Inspire) | 領域prompt入力を簡略化 |
| Regional Prompt By Color Mask (Inspire) | 色分けmaskで領域を定義 |
| Regional Conditioning Simple (Inspire) | 領域conditioningを簡略化 |
| Regional Conditioning By Color Mask (Inspire) | 色分けmaskでconditioning領域を定義 |
| Regional IPAdapter Mask / By Color Mask / Encoded Mask | IPAdapter関連の領域ノード |
一部のノードはImpact PackまたはIPAdapter Plusに依存します。使用前にREADMEの依存関係を確認してください。
左半分が赤、右半分が青のような色分けmaskがあり、ピクセル座標を手計算したくない場合に向いています。
組み合わせの境界と2回目のpass
ControlNet、IPAdapter、LoRAとの組み合わせ
| ツール | 制御対象 | 解決しない問題 |
|---|---|---|
| 領域prompt(Set Area / Regional) | 位置とpromptの割り当て | 同一人物の維持、属性混ざり(Set Areaでは解決しない) |
| ControlNet(OpenPose / Canny / Depth) | 姿勢と構造 | 属性混ざり、位置への割り当て |
| IPAdapter | 参照画像によるスタイルや構図への影響 | 領域分離、同一人物の固定(IPAdapterは全体スタイルへ影響) |
| FaceID / LoRA | 同一人物やスタイルの維持 | 領域prompt、属性混ざり |
実用的な順序は、領域promptで位置 → OpenPoseで姿勢 → 低strengthのglobal conditioningで共通の雰囲気、です。OpenPose、ControlNet、IPAdapterの位置は領域と手動で揃えます。「左の人物」を自動で結び付けることはできません。
2回目のpass・upscale・inpaintで色が混ざる場合
2回目のpass、upscale、顔の修復で領域条件を使わないと、モデルが全体の一貫性を再び優先し、最初に分けた髪色や服の色を混ぜることがあります。area compositionの例でも、2回目に領域promptがないと髪色が統合される点が示されています。
後段でも領域条件を使うか、ローカルなInpaintで直すかを判断します。最初にSet Areaで分けた場合、upscale時にも領域を再設定し、全体の一貫性のために人物分離が崩れないようにします。
次の手順と関連記事
リージョナルプロンプトは複数人物構図の一部です。姿勢制御、同一人物の維持、参照画像、高解像度の修復には別のツールが必要です。
公開済み:
- workflowの読み込みと不足ノードのインストール:custom nodesの導入と不足ノードを解決
- Stable Diffusion promptテンプレートガイド:1つのpromptで複数人物を説明しにくい場合の基礎
- ComfyUI ControlNetガイド:領域promptの位置制御と組み合わせて姿勢と構造を制御
- ComfyUI LoRAガイド:人物やスタイルを維持し、複数LoRAの混ざりと領域promptの混ざりを分けて対処
IPAdapter、FaceIDと顔の一貫性、LoRA学習、高解像度の修復、Inpaintingは別記事で扱います。領域promptと組み合わせることで、複数人物の不確実性をさらに下げられます。
Set Areaで左右の人物領域を作る方法
1024×768のキャンバスを左右に分け、それぞれのpositive conditioningを割り当て、低strengthの全体条件で雰囲気を統一します。
⏱️ 目安時間: 20 分
- 1
ステップ 1: 最終キャンバスを設定する
latentまたはEmpty Latent Imageを1024×768に設定し、すべての領域座標をこの最終サイズから計算します。 - 2
ステップ 2: 左側人物のpromptを書く
左側人物専用のCLIP Text Encodeを用意し、色、服装、髪型はこのローカル分岐だけに書きます。 - 3
ステップ 3: 左側領域を設定する
左側conditioningをConditioningSetAreaにつなぎ、x=0、y=0、width=512、height=768、strength=1.0にします。 - 4
ステップ 4: 右側領域を設定する
右側人物用に2つ目のCLIP Text EncodeとConditioningSetAreaを作り、x=512、y=0、width=512、height=768、strength=1.0にします。 - 5
ステップ 5: ローカル条件を結合する
領域情報付きの2本のconditioningをConditioningCombineで結合し、KSamplerのpositiveへ接続します。 - 6
ステップ 6: 低strengthの全体条件を加える
照明や背景を統一する場合は全画面conditioningを追加し、ローカル分岐を上書きしないようstrength 0.3〜0.5から始めます。 - 7
ステップ 7: 姿勢制御を合わせる
2人の立ち位置やポーズにはOpenPose、Depth、Cannyを追加し、左右の領域とposeを手動で合わせます。 - 8
ステップ 8: 後段のサンプリングを確認する
upscale、2回目のpass、inpaintの前に、色や属性が戻らないよう領域条件を引き継ぐか判断します。
FAQ
x、y、width、heightはピクセルですか、割合ですか?
Set Areaの座標を8の倍数にする理由は?
Cutoffはリージョナルプロンプトですか?
RegionalPromptとSet Areaはどう選びますか?
領域が重なるときstrengthはどう調整しますか?
OpenPoseに2人いるのにpromptを割り当てられないのはなぜですか?
ノードが赤い、または見つからない場合は?
7分で読めます · 公開日: 2026年8月28日 · 更新日: 2026年8月28日
ComfyUI と Stable Diffusion シリーズ: 入門、workflow、モデル選び、prompt
検索からこのページに来た場合は、前後の記事もあわせて読むと同じテーマの理解がかなり早く深まります。



コメント
GitHubアカウントでログインしてコメントできます