テーマを切り替える

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

Easton editorial illustration: one large rounded ComfyUI-style node canvas with a coordinate grid, two simplified 2.5D character silhouettes isolated in red-left and blue-right regions

"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 + RegionalSamplerImpact Packが必要で、ノード欠落が起こる場合がある
単純な色分けmask簡略領域ノードInspire Pack: Regional Conditioning By Color MaskImpact 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 8latentへ書く際に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 BasePromptCutoff Set RegionCutoff Regions To ConditioningCutoff Regions To Conditioning (ADV)で、conditioning > cutoffにあります。

SDXLの注意点:READMEではSDXL 0.9で良い結果が得られなかったとされています。現在のSDXLやFLUXでは実測が必要で、万能な安定策としては扱えません。

インストールと使い方

インストール:

  • ComfyUI-ManagerでComfyUI_Cutoffを検索
  • またはgit clone https://github.com/BlenderNeko/ComfyUI_Cutoffcustom_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のノード

ノード入力出力説明
RegionalPromptmask + advanced_sampler + variation_seed/strength/methodREGIONAL_PROMPTSmaskとsamplerを結び付け、領域promptを作る
CombineRegionalPrompts複数のREGIONAL_PROMPTSREGIONAL_PROMPTS複数の領域promptを結合する
RegionalSamplerbase_sampler + REGIONAL_PROMPTS + overlap_factor + restore_latentlatent各stepで領域サンプリングを適用する
RegionalSamplerAdvancedRegionalSamplerの入力 + step制御latentdenoiseではなくstepで制御できる

パラメーター:

  • overlap_factor:領域外側の遷移範囲を制御
  • restore_latent:領域サンプリング中にmask外のbase latentを復元し、外側への余分なノイズを減らす

RegionalSamplerは各stepで領域サンプリングを実行します。一方、TwoSamplersForMaskは全体をサンプリングした後にmaskで結合します。前者は各領域の過程をより細かく制御できます。

インストールとトラブルシューティング

インストール:

  • ComfyUI-ManagerでComfyUI Impact Packを検索
  • インストール後に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 MaskIPAdapter関連の領域ノード

一部のノードは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時にも領域を再設定し、全体の一貫性のために人物分離が崩れないようにします。

次の手順と関連記事

リージョナルプロンプトは複数人物構図の一部です。姿勢制御、同一人物の維持、参照画像、高解像度の修復には別のツールが必要です。

公開済み:

IPAdapter、FaceIDと顔の一貫性、LoRA学習、高解像度の修復、Inpaintingは別記事で扱います。領域promptと組み合わせることで、複数人物の不確実性をさらに下げられます。

Set Areaで左右の人物領域を作る方法

1024×768のキャンバスを左右に分け、それぞれのpositive conditioningを割り当て、低strengthの全体条件で雰囲気を統一します。

⏱️ 目安時間: 20 分

  1. 1

    ステップ 1: 最終キャンバスを設定する

    latentまたはEmpty Latent Imageを1024×768に設定し、すべての領域座標をこの最終サイズから計算します。
  2. 2

    ステップ 2: 左側人物のpromptを書く

    左側人物専用のCLIP Text Encodeを用意し、色、服装、髪型はこのローカル分岐だけに書きます。
  3. 3

    ステップ 3: 左側領域を設定する

    左側conditioningをConditioningSetAreaにつなぎ、x=0、y=0、width=512、height=768、strength=1.0にします。
  4. 4

    ステップ 4: 右側領域を設定する

    右側人物用に2つ目のCLIP Text EncodeとConditioningSetAreaを作り、x=512、y=0、width=512、height=768、strength=1.0にします。
  5. 5

    ステップ 5: ローカル条件を結合する

    領域情報付きの2本のconditioningをConditioningCombineで結合し、KSamplerのpositiveへ接続します。
  6. 6

    ステップ 6: 低strengthの全体条件を加える

    照明や背景を統一する場合は全画面conditioningを追加し、ローカル分岐を上書きしないようstrength 0.3〜0.5から始めます。
  7. 7

    ステップ 7: 姿勢制御を合わせる

    2人の立ち位置やポーズにはOpenPose、Depth、Cannyを追加し、左右の領域とposeを手動で合わせます。
  8. 8

    ステップ 8: 後段のサンプリングを確認する

    upscale、2回目のpass、inpaintの前に、色や属性が戻らないよう領域条件を引き継ぐか判断します。

FAQ

x、y、width、heightはピクセルですか、割合ですか?
標準のConditioningSetAreaは最終キャンバスのピクセル座標を使います。ConditioningSetAreaPercentageは0〜1の割合を使います。
Set Areaの座標を8の倍数にする理由は?
ComfyUIはheight、width、y、xをそれぞれ8で割ってlatent areaへ書き込みます。8の倍数なら境界がlatentのグリッドに揃います。
Cutoffはリージョナルプロンプトですか?
違います。Cutoffは色や服装などtoken属性の関係を分離し、空間座標は扱いません。左右の領域にはSet AreaかRegionalPromptを使います。
RegionalPromptとSet Areaはどう選びますか?
左右や上下の単純な矩形なら標準のSet Areaを使います。複雑な形状、既存mask、ステップごとの領域サンプリングにはImpact PackのRegionalPromptとRegionalSamplerが向きます。
領域が重なるときstrengthはどう調整しますか?
ローカル人物は1.0、全体背景は0.3〜0.5から始めます。重なりが増えるほど副次分岐を下げ、seedを固定して比較します。
OpenPoseに2人いるのにpromptを割り当てられないのはなぜですか?
OpenPoseは姿勢、リージョナルプロンプトは位置への割り当てを制御します。どの骨格がどのprompt領域かは自動判定されないため、手動で合わせます。
ノードが赤い、または見つからない場合は?
ComfyUI-ManagerでImpact Pack、Inspire Pack、Cutoffをインストールまたは更新し、再起動してブラウザを更新します。残る場合はworkflowの版とPython依存関係を確認します。

7分で読めます · 公開日: 2026年8月28日 · 更新日: 2026年8月28日

コメント

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

Easton BlogEaston Blog