⌦ Regional Conditioning (Illustrious)
Different prompts for different parts of one image
- clip
- base_cond
- latent
- regions
- conditioning
- info
Ask one prompt for "a girl with red hair on the left and a girl with blue hair on the right" and you'll usually get two girls with hair colors that bled into each other, or one girl with half-red-half-blue hair. That's not a prompting skill issue - it's a structural limit of how conditioning applies globally across the whole canvas. Regional prompting exists specifically to fix it, and this node is where the Illustrious pack implements it.
The idea, and where it came from
Splitting an image into masked areas and giving each its own prompt is an old technique - Latent Couple and Regional Prompter on SD 1.5, Attention Couple on Forge, and now purpose-built nodes for whatever architecture is current, because the technique never ports cleanly between architectures and gets rebuilt each time. This node is that rebuild for Illustrious/SDXL. Demand for it has been remarkably stable for years - it's not a fad, it's a genuine gap that better prompt comprehension narrows but doesn't close.
How it works
You give it your base_cond (the global prompt everything starts from) and a latent so it can size masks correctly (H/8 × W/8, since masks operate in latent space). Then you feed it a regions list - built separately with IllustriousEmptyRegions → one or more IllustriousMakeRegion → chained through Append Region - and it layers each region's masked prompt on top of the base.
normalize_overlap matters more than it looks like it should: if two region masks touch or overlap, this keeps their combined weight from exceeding 1 in the overlap zone, which otherwise produces an over-driven, muddy blend right where two regions meet. mask_blur and mask_dilate feather and grow every region's mask before it's applied - without feathering, region boundaries tend to look pasted-in rather than blended, which is the signature failure of hard-masked regional prompting.
Worth knowing: you do not need to switch your VAE Encode to "regional" mode for this to work. The pack's own docs are explicit about that - keep VAE Encode on standard unless you're separately doing an inpaint. Regional Conditioning operates entirely on the conditioning stream, not on pixel encoding.
The inputs and outputs that matter
clip,base_cond,latent- required, the foundation everything else layers onto.regions(optional but the whole point) - anILLUSTRIOUS_REGIONSlist from the region-builder chain.normalize_overlap(default on) andmask_blur/mask_dilate- the edge-quality controls.
Output is conditioning - wire straight into your sampler's positive input - plus info, a diagnostic string.
Installing it
ComfyUI Manager: search "EasyIllustrious," install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/regiellis/ComfyUI-EasyIllustrious
pip install -r ComfyUI-EasyIllustrious/requirements.txt
No model downloads - this is pure conditioning math on top of your existing checkpoint.
Common issues
Characters still bleeding into each other. Check your masks cover the full canvas between them - any gap not covered by a region falls back to base_cond, which is exactly the global prompt causing the bleed in the first place. Two adjacent masks with a sliver of uncovered space in between will leak right through that sliver.
Regions look collaged, with a visible seam. Raise mask_blur. If that's not enough, the underlying craft here is scheduling - hard-masking a region for the entire denoise produces exactly this look; a region that only needs to matter early or late in the schedule should be built with a narrower start/end window on IllustriousMakeRegion, not just left masked at full strength for every step.
Nothing visibly regional is happening. Double-check the regions input is actually connected - it's optional at the schema level, so a missing wire fails silently rather than erroring, and you'll just get base_cond applied globally.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | CLIP used to encode regional prompts. | |
| base_cond | CONDITIONING | Base/global conditioning to start from. | |
| latent | LATENT | Latent (for sizing masks to H/8 x W/8). | |
| normalize_overlap | BOOLEAN | true | Normalize overlapping masks so combined weights per pixel don't exceed 1. |
| mask_blur | INT | 40–64 | — |
| mask_dilate | INT | 20–64 | — |
| regionsopt | ILLUSTRIOUS_REGIONS | Optional list of regions built via region builder nodes. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| conditioning | CONDITIONING | — |
| info | STRING | — |