IPAdapter Regional Conditioning
A different reference in each region
- image
- mask
- positive
- negative
- IPADAPTER_PARAMS
- POSITIVE
- NEGATIVE
This is the node behind the trick that made IP-Adapter famous for character work: putting a different reference image in a different region of the frame. Left half gets one subject, right half gets another; or a masked area gets a specific style while the background gets a text prompt. It's how you build a two-character scene where each character stays on-model, and it was one of the highest-signal IP-Adapter workflows of the SD1.5 era.
The way it fits together is a little different from the plain apply nodes, so it's worth being clear. Regional Conditioning doesn't patch the model directly. Instead it packages up one region's worth of settings - an image, a mask, weights, timing - into an IPADAPTER_PARAMS bundle. You make one of these per region, combine the bundles, and hand the combined result to a batch-style apply that runs them all together. This node is the builder of a single region; the assembly happens downstream.
Inputs and outputs
You give it the reference image for this region plus a few dials:
- image_weight - how strongly this region's image reference pushes (default 1.0, range −1 to 3).
- prompt_weight - this is the interesting one. This node also carries text conditioning, so
prompt_weight(default 1.0, range 0 to 10) balances the image influence against a text prompt within the same region. You can blend "this reference picture" with "and also this text description" region by region. - weight_type - the full fifteen-curve menu, same as the Advanced node.
- start_at / end_at - the sampling window for this region.
The optional inputs are where the regional magic actually happens: mask defines where this region is (no mask means the whole frame), and positive / negative accept CONDITIONING so you can thread your text prompts through. It outputs three things: IPADAPTER_PARAMS (the region bundle you'll combine), and POSITIVE / NEGATIVE conditioning passed through for the rest of your graph.
Building the full workflow
One region alone isn't the point. The real pattern is: make several IPAdapter Regional Conditioning nodes, each with its own image and its own mask covering a different slice of the frame, combine their IPADAPTER_PARAMS outputs (the pack has a params-combining node for exactly this), and feed the result into the params-driven apply node. The masks are what keep each reference confined to its region so they don't bleed into each other. Get the masks clean and non-overlapping and you get clean regional separation; sloppy masks give you muddy boundaries.
This is more setup than a single-image IP-Adapter graph, and it's genuinely fiddly - but it's the tool when you need multiple subjects or multiple styles coexisting in one generation with control over placement. Pairs beautifully with ControlNet for locking the pose of each character while IP-Adapter handles who they are.
Installing the pack
ComfyUI Manager: Custom Nodes Manager, search "IPAdapter plus", install, restart. Manual: cd ComfyUI/custom_nodes && git clone https://github.com/cubiq/ComfyUI_IPAdapter_plus, restart ComfyUI. You'll need an IP-Adapter model in ComfyUI/models/ipadapter and the matching CLIP vision encoder in ComfyUI/models/clip_vision. Update ComfyUI if any node fails to load. SD1.5 and SDXL only - this regional workflow lives in the classic checkpoint world, not on Flux.
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 | — |