IPAdapter Regional Conditioning V2
The node behind the 'face and clothing consistent' workflows
- image
- mask
- positive
- negative
- IPADAPTER_PARAMS
- POSITIVE
- NEGATIVE
Back in 2023, the workflow that made IP-Adapter famous was "Face and Clothing Consistent Control" - reference image on the face region, prompt everywhere else, so a character stayed recognizable without the reference flattening the whole frame. This node is the engine of that workflow. IPAdapterRegionalConditioningV2 takes an image, a mask, and your text conditioning, and produces the pieces that let an apply node condition only inside the mask.
It does two things at once, and both outputs matter. First, it builds an IPADAPTER_PARAMS bundle - a small struct holding the image, mask, weight, weight type, and step range - that a params-aware apply node consumes to run IP-Adapter strictly within the masked region. Second, it takes your optional positive and negative CONDITIONING and attaches the mask to them with mask_strength set to prompt_weight, so the text prompt is likewise localized to the region. Feed those into a conditioning combine and your prompt stops fighting the reference in the areas it shouldn't touch.
The inputs that matter:
image+mask- the reference and where it applies. The mask is the whole show; a good mask is worth more than any weight tuning.image_weight(default 1.0) - how hard the image conditioning pushes inside the region.prompt_weight(default 1.0, up to 10) - how hard the text prompt pushes inside the region. Cranking this is how you let the prompt dominate a region while the reference owns another.weight_type- the full 15-way curve menu, includingstyle transferandcompositionfor region-specific jobs.start_at/end_at- step range for the regional conditioning.
Outputs: IPADAPTER_PARAMS (into an apply node that accepts params, like the Advanced or FromParams node), plus POSITIVE and NEGATIVE conditioning to combine into your sampler's conditioning inputs.
The classic wiring
LoadImage ──image──→ RegionalConditioningV2 ──IPADAPTER_PARAMS──→ IPAdapterAdvancedV2
LoadMask ──mask──→ │
TextEncode ──positive──→ ├──POSITIVE──→ ConditioningCombine → KSampler
└──NEGATIVE──→ ConditioningCombine
Multiple instances of this node can each produce params for a different region, and IPAdapterCombineParamsV2 merges them so you can condition face, hair, and clothing separately - one reference per region.
Honest limits
Regional prompting works best when regions are cleanly separated. Overlapping characters, touching subjects, and soft masks produce blending artifacts where one region bleeds into another - the KB's character-consistency notes call this the standing limitation of the whole approach. On SDXL-era anime models it's also a text-encoder limitation: attributes can't bind to a specific character when tags have no syntax for it. For a single character with a tight mask, though, this node is still the cleanest way to keep a face on-model without sacrificing the rest of the frame. And note the era: this is a legacy-SDXL tool. Nobody's building new regional character pipelines on it in 2026, but if your base model is SDXL and your workflow needs region control, this is the node.
Install
Part of chflame163/ComfyUI_IPAdapter_plus_V2, the V2 fork of cubiq's pack. Manager → search ComfyUI_IPAdapter_plus_V2, or:
cd ComfyUI/custom_nodes
git clone https://github.com/chflame163/ComfyUI_IPAdapter_plus_V2
Restart. No pip requirements.
Gotchas
The classic failure is a missing or wrong-size mask - the mask has to spatially match the image, or your region lands somewhere you didn't intend. And there's a subtlety in how this node differs from a plain attn_mask on an apply node: the attn_mask limits the image conditioning, while the positive/negative outputs here also localize the text conditioning. If your prompt is leaking into a region, that's the feature you forgot to wire up - feed this node's POSITIVE/NEGATIVE into your conditioning chain instead of the raw text encode.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| image_weight | FLOAT | 1.00-1–3 | — |
| prompt_weight | FLOAT | 1.000–10 | — |
| weight_type | COMBO | 15 options: linear, ease in, ease out, ease in-out, reverse in-out, weak input, +9 | |
| start_at | FLOAT | 0.0000–1 | — |
| end_at | FLOAT | 1.0000–1 | — |
| maskopt | MASK | — | |
| positiveopt | CONDITIONING | — | |
| negativeopt | CONDITIONING | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| IPADAPTER_PARAMS | IPADAPTER_PARAMS | — |
| POSITIVE | CONDITIONING | — |
| NEGATIVE | CONDITIONING | — |