You prompt a woman in a red hat next to a blue car and the model paints a woman in a red hat next to a red car. Or a wooden chair and a metal table comes back as two wooden objects. This is attribute bleeding (also called concept bleeding or attribute leakage), and it is one of the most common multi-subject failures in Stable Diffusion 1.5, SDXL, and the Flux family. The root cause: the text encoder compresses the whole prompt into one shared context, and the cross-attention map cannot reliably decide which adjective binds to which noun, so an attribute spreads onto every nearby object.
Fastest fix: put each attribute right next to its noun, wrap each attribute-subject pair in a weight like (red hat:1.3), and split the two subjects with BREAK. That alone clears most two-subject bleed. If you have three or more subjects, jump straight to Regional Prompter or ControlNet — no amount of prompt wording will separate them reliably. On Flux 2 (single VLM prompt, shipped late 2025), the opposite advice applies: write one clean sentence in natural prose, not comma-separated tags.
Which bucket are you in?
| Symptom | Most likely cause | Go to |
|---|---|---|
| Two subjects, one color jumped to both | Attributes too far from their noun, no weighting | Steps 1-2 |
| Materials swapped (wood/metal merge) | Cross-attention averaging on SD 1.5 / SDXL base | Steps 1-2 |
| 3+ subjects, attributes scrambled | No spatial constraint | Steps 3-4 |
| Bleed only on SDXL with no refiner | Base-only cross-attention is fuzzier | Cause 4 |
| Bleed on Flux with comma-tag prompt | Wrong prompt style for T5 / VLM | FAQ + Step 1 note |
| Prompt over ~60 tokens | CLIP context compression | Step 5 |
Common causes
Ordered by hit rate, highest first.
1. Attributes sit too far from their noun
In a red hat and a blue car, the tokens red, hat, blue, car all live in the same shared text context (the 77-token CLIP window on SD 1.5 / SDXL). The cross-attention map degrades as the number of differently-colored objects grows, and whichever attribute appears first often “wins” across the image. The classic research example is a pink sunflower and a yellow flamingo coming back with the colors swapped.
How to spot it: count the subjects in your prompt. Two or more subjects with different colors or materials inside one sentence almost always bleeds, especially when the adjective is separated from its noun by other words.
2. No attention weighting on the binding pair
The model treats red hat and red, hat very differently. A comma can break the bind; without a weight bump on the pair, the model just averages the colors across the scene.
How to spot it: your prompt has no parentheses or weights around the attribute-subject pairs.
3. Prompt is too long
Past roughly 60-70 tokens, CLIP-based encoders compress context and distant tokens lose attention precision, so they bleed more aggressively.
How to spot it: paste your prompt into a token counter (Automatic1111 / Forge shows the count next to the prompt box, e.g. 30/75). Over ~60 tokens for the core scene is your problem.
4. SDXL base without the refiner
SDXL base alone is more prone to bleeding than SDXL base + refiner. The refiner pass at low denoise re-sharpens cross-attention and cleans up some bleed.
How to spot it: run the same prompt and seed with the refiner enabled vs disabled. If bleeding drops with it on, you needed the refiner.
5. No regional control on a busy scene
With 3+ distinct subjects, no prompt wording will reliably separate attributes — the cross-attention maps degrade as targets increase. You need a spatial constraint (regional prompting or ControlNet segmentation).
How to spot it: three or more subjects, each with its own color and material.
Shortest path to fix
Work top to bottom and stop when the bleed is gone.
Step 1: Anchor the attribute and weight the pair
First, move every adjective directly in front of its noun and keep the pair together. a red hat ... a blue car binds far better than red, blue, a hat, a car. Then wrap each attribute-subject pair in parentheses with a weight. SD 1.5, SDXL, Automatic1111, Forge, and ComfyUI (with a weighting node) all support this colon-weight syntax:
(red hat:1.3), woman wearing it, standing next to (blue car:1.3)
The weight amplifies those tokens together as a unit so cross-attention treats them as bound. Weights between 1.1 and 1.4 work best; above ~1.5 the subject starts to distort or over-saturate. In ComfyUI the same effect comes from the prompt-weighting syntax in the CLIP Text Encode node.
Flux note: Flux.1 (dev/Pro/Schnell) uses CLIP-L plus a T5 text encoder, and Flux 2 (2026) uses a single VLM-driven prompt. Flux ignores
(...:1.3)weight syntax in the T5/VLM path — it reads natural language. For Flux, fix bleed with sentence phrasing instead (see FAQ), not numeric weights.
Step 2: Split subjects with BREAK
Automatic1111, Forge, and ComfyUI (with the matching node) support BREAK, which closes the current text chunk and starts a fresh one, so the encoder pads to a new 75-token chunk between segments:
(red hat:1.2), woman portrait, soft daylight
BREAK
(blue car:1.2), parked behind her, glossy paint
Each BREAK block gets its own chunk, so red is far less likely to bleed across into car. One caveat: BREAK separates chunks, not image regions — it does not control where each subject lands, and stacking too many can occasionally split a subject from its own attribute. Use it for two or three subjects; beyond that, move to Step 3.
Step 3: Regional prompting (paint where each subject goes)
For tougher scenes, constrain each subprompt to a region of the canvas:
- Regional Prompter — the original hako-mikan/sd-webui-regional-prompter for Automatic1111, with a maintained Forge port (
sd-forge-regional-prompter). Splits the canvas by columns/rows and assigns a different prompt to each region. - ComfyUI regional — use
Conditioning (Combine)plusConditioning (Set Mask), or an Impact-PackRegionalPrompternode, to bind each subprompt to a spatial mask. - Attend-and-Excite — a sampling-time method that forces attention to actually attend to each subject token; available as a node/extension for stubborn two-subject cases.
Regional Prompter example, split into left and right columns:
woman portrait, soft daylight
ADDCOMM
(red hat:1.3), woman, urban street
ADDCOL
(blue car:1.3), parked, glossy paint
ADDCOMM text applies to the whole image; ADDCOL starts a new column region. (Older syntax uses ADDBASE for a base prompt and BREAK between regions — both still work; pick whichever your version documents.) Using ADDCOL or ADDROW anywhere auto-enables region mode.
Step 4: ControlNet segmentation for hard layouts
When subjects must occupy fixed regions:
- Sketch a quick segmentation map (woman on the left = one flat color, car on the right = another) in any paint tool.
- Load it into ControlNet with the
segpreprocessor (ADE20K-style palette). - Set ControlNet weight to 0.7-1.0.
- Layer regional prompting on top so each segmented area gets its own attribute prompt.
This pairs spatial control (where each subject sits) with attribute control (what each subject looks like), and is the most reliable route for product shots and group scenes.
Step 5: Shorten, then split into two passes
If the core prompt is over ~60 tokens, cut it — move style words to a short suffix. For the most stubborn bleed, generate the scene in two passes so each subject gets full attention budget in its own context:
- Generate the first subject alone.
- Outpaint or inpaint the second subject into the scene.
Because each subject is generated in isolation, there is no shared context for an attribute to bleed across.
How to confirm it’s fixed
Don’t trust a single render. Re-run the corrected prompt across 4 fixed seeds (keep the same seed list before and after so the change is the only variable). The fix is holding when:
- The bound color/material appears on the correct subject in at least 3 of 4 seeds.
- The other subject keeps its own attribute (no swap, no merge).
- Tightening the weight from 1.2 to 1.3 sharpens the bind rather than distorting the subject.
If 2+ of 4 seeds still bleed, you are under-constrained for the scene’s complexity — move down a step (weights -> BREAK -> regional -> ControlNet) rather than rerolling seeds.
Prevention
- Default to attention weights on any prompt with 2+ subjects that have different colors or materials, and keep each adjective adjacent to its noun.
- Keep the core scene under ~60 tokens; push style words to a separate suffix.
- Save a Regional Prompter preset for your common “left subject + right subject” split.
- For product photography with multiple SKUs, render each SKU separately and composite in Photoshop / Affinity rather than fighting the binding.
- On Flux, prompt in natural prose; reserve tag-style + weights for CLIP-based SD 1.5 / SDXL.
- Test new prompts at 4 seeds; if 2+ bleed, restructure the prompt instead of rerolling.
FAQ
Why do colors swap between two objects instead of just bleeding?
Same root cause. When the cross-attention map can’t bind cleanly, it may attach the wrong adjective to a noun — the documented pink sunflower / yellow flamingo swap. Anchoring each adjective to its noun and weighting the pair fixes both bleed and swap.
Does this happen on Flux too, and is the fix the same?
Flux bleeds less than SD 1.5 / SDXL because its T5 (Flux.1) or VLM (Flux 2) encoder reads context better — but it still bleeds with keyword-style prompts. The fix is different: write one coherent sentence (A woman in a red hat stands beside a glossy blue car) instead of comma tags, and skip numeric weights, which the T5/VLM path ignores.
Does negative-prompting the wrong color help?
Sometimes, as a band-aid. Adding red car to the negative prompt can push the car off red, but it often dulls or shifts the color globally and doesn’t fix the binding. Prefer weighting or regional control; use negatives only to nudge a near-miss.
What weight is too high? Above ~1.5 on a single attribute-subject pair you usually get over-saturation, halos, or anatomy drift. Stay in 1.1-1.4 and add a second technique (BREAK or regional) instead of pushing the weight higher.
BREAK isn’t separating my subjects — why?
BREAK separates token chunks, not image regions. It reduces cross-token bleed but does not control placement, and too many BREAKs can split a subject from its own attribute. For real spatial separation use Regional Prompter or ControlNet (Steps 3-4).