π BV Regional SDXL Attention
The SDXL regional node that routes attention instead of praying at masks
- model
- clip
- regional
- lora_registry
- lora_bindings
- patched_model
- positive
- negative
If your regional characters keep bleeding into each other on an SDXL checkpoint, the fix isn't a bigger mask - it's a node that stops treating regions as outside-in painting and starts routing from inside the model. BV Regional SDXL Attention patches your cloned SDXL model and routes each region's text through cross-attention inside the U-Net, so a left-side region's prompt physically can't dominate pixels it shouldn't reach. This is the flagship regional backend for the SDXL family, and it's the one verified against the two checkpoints that actually matter for anime and pony work: WAI Illustrious SDXL and Pony Diffusion V6 XL.
How it works
The node takes model, clip, and regional, then does two things. First it encodes each text slot - Global, Background, and every region - separately. Then it patches the model so that during sampling, Global context stays available everywhere, Background text is limited to uncovered pixels, and each region's text is exposed only inside its rendered mask. joint overlaps expose every participating region to the pixels they share.
The backend is architecture-based rather than checkpoint-specific: if the model's SDXL-family, it should work, but the pack only verifies the two checkpoints above. Non-SDXL models are rejected outright instead of being patched speculatively - you'll get a clean error rather than silently weird output. That's a feature. The pack would rather refuse than guess.
The three knobs that matter
attention_strength(default 1.0) - how strongly routing applies. Start at 1.0.start_percent(default 0) andend_percent(default 0.5) - the sampling interval where routing is active. The README's recommended starting values are 1.0 / 0.0 / 0.5.
Here's the trap the README calls out explicitly: the active interval is not region strength, and Attention Strength 0 does not bypass the backend - it just hides the regional and Background slots while leaving Global active. If you want a true unpatched A/B run, bypass the node. People burn real time discovering this.
Outputs are patched_model, positive, and negative, feeding a standard KSampler. No BV-specific sampler needed.
What the A/B actually showed
The pack ran controlled comparisons - same document, seed, sampler, and settings - of SDXL Attention vs. untuned Native Conditioning on both Illustrious and Pony. The result was better out-of-the-box separation: contrasting hair and clothing stayed distinct, left/right placement held. The fair reading is in the caveat: Native Conditioning was untuned, so this is evidence attention routing separates better by default, not that masked conditioning can't be made to work. Prompt style and rendering quality remain checkpoint behavior, not backend guarantees.
Install
Search BV Node Pack in ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/BlackVortexAI/bv_nodepack.git
Restart, hard-refresh with Ctrl + F5. No extra Python deps, no model downloads - the patch operates on whatever SDXL checkpoint you already have.
The honest take
This is the node that justifies the pack's "attention routing, not segmentation" framing. It's genuinely the one I'd reach for on Illustrious/NoobAI/Pony when two characters share a canvas and keep swapping attributes. Just keep the expectations in line: it improves spatial prompt-to-region binding, it doesn't guarantee a pose, a depth order, or pixel-perfect interactions. If a composition is implausible, no attention routing is going to make it deterministic - you fix the geometry and the prompts first.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | β | |
| clip | CLIP | β | |
| regional | BV_REGIONAL | β | |
| attention_strength | FLOAT | 1.000β1 | β |
| start_percent | FLOAT | 0.0000β1 | β |
| end_percent | FLOAT | 0.5000β1 | β |
| lora_registryopt | BV_LORA_STACK_REGISTRY | β | |
| lora_bindingsopt | BV_REGIONAL_LORA_BINDINGS | β |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| patched_model | MODEL | β |
| positive | CONDITIONING | β |
| negative | CONDITIONING | β |