Nodes/SimpleSyrup/Attention Coupling Options
ComfyUI Node

Attention Coupling Options

Regional prompts that don't bleed into each other

By Artificial-Sweetener·Created 5 months ago·Updated 3 days ago· 4
Attention Coupling Options
  • options
  • options
◄regional_prompt_weight1.00►
◄region_mask_feather0►

If you've ever tried to put two characters in one frame with a prompt and watched their clothing, hair colour and general vibe swap places, you've met prompt bleeding. The usual fix in ComfyUI is masked conditioning - the model gets a different prompt inside the mask and the global prompt everywhere else. Attention Coupling is the other approach: split the cross-attention per region inside a single shared denoiser trajectory, so each region genuinely attends to its own text instead of being blended at the conditioning layer.

It's a real, established technique rather than something this pack invented - regional prompting tools in the A1111/Forge world shipped attention coupling before this, and you'll see it discussed around A8R8's regional prompting work. What SimpleSyrup does is give you a clean, minimal control surface for it, and the honesty of that surface is worth noting: this node has exactly two dials and no mask inputs, because the masks and prompts arrive somewhere else.

What this node actually holds

The concept here is strength and edge handling - nothing else. The region data goes on KSampler (SimpleSyrup): a global-first conditioning batch on positive (entry 0 is global; later entries pair with masks) and an ordered region_masks input. The pack's [SEP]-style prompt batch nodes and its conditioning batch builders are the way those batches get made. This node tells the sampler how hard the regions should push and how soft their boundaries are.

  • regional_prompt_weight - default 1, range 0 to 1. Tooltip version, which is as clear as it gets: 0 is global-only, 1 is regional-only inside solid masks. In overlaps, prompt contributions get normalized while regional LoRA deltas simply add, in declared adapter and region order. Mid values are the blend you tune per image.
  • region_mask_feather - default 0, in image pixels, up to 512. It softens the Attention Coupling and regional LoRA boundaries by blurring the mask edge. 0 preserves your authored mask values exactly, which is what you want with tight segmentation masks. Be careful with the top of that range: 512 pixels of feather on a 1024-pixel image is not a soft edge, it's a gradient across half the picture.

The output is the options socket, wired into another options node or the KSampler. Attention Coupling composes with the others: it has its own sampling services for the plain, tiled and contextual paths, so you can run regional attention on a tiled high-resolution canvas.

The trap, and it's the main one

Without both halves, nothing happens and nothing complains. That's not a bug - it's how the sampler decides whether you're doing a regional run at all. Feed it ordinary CONDITIONING and no masks and it bypasses Attention Coupling silently, and the same is true if you connect masks while the conditioning is still a single global entry. Your regional_prompt_weight then does absolutely nothing, which is a genuinely confusing way to lose an afternoon.

Half a request is an error, though, and the messages are good:

  • Conditioning batch, no masks → "Attention Coupling conditioning batches require region_masks."
  • Masks, no batch → "Attention Coupling region_masks require a CONDITIONING_BATCH on the positive or negative input."

The ordering rule matters as much as the count: masks pair with conditioning entries 1 onward, so mask 0 belongs to the second prompt. Misaligned mask order is the other classic regional-prompting failure, and the sampler uses declared order rather than trying to guess.

Two smaller things. regional_prompt_weight does not scale regional LoRAs - each hook keeps its own strength. And scheduled regional LoRA hooks come from ComfyUI Prompt Control if you have it installed; that integration is optional and the rest of the pack loads fine without it.

Install

Manager → Node Pack list → search SimpleSyrup → Install, restart. Or:

cd ComfyUI/custom_nodes
git clone https://github.com/Artificial-Sweetener/SimpleSyrup.git
cd SimpleSyrup
python -m pip install -r requirements.txt

That requirements file is not small (Ultralytics, ONNX Runtime, segment-anything, TorchLanc, Hugging Face Hub, keyring) because this pack also detects, segments and tags. You still need a current ComfyUI for the v3 nodes to show up, and if you're on a region-heavy workflow anyway, remember SimpleSyrup's SEGS are deliberately Impact-compatible - the same regions can move between detectors and detailers without being rebuilt.

CategorySimpleSyrup/Sampling/Options

Inputs (3)

NameTypeDefaultDescription
regional_prompt_weightFLOAT1.000–1Balances regional cross-attention against the global prompt from 0 (global only) to 1 (regional only inside solid masks); regional LoRA strength remains controlled by each hook.
region_mask_featherINT00–512Softens Attention Coupling and regional LoRA boundaries by this many image pixels; 0 preserves authored mask values.
optionsoptSIMPLE_SYRUP_SAMPLER_OPTIONSOptional preceding sampler options; bypass this node to omit its contribution.

Outputs (1)

NameTypeDescription
optionsSIMPLE_SYRUP_SAMPLER_OPTIONSCombined sampler options; connect another options node or KSampler.