Fusion Regions
Give every subject the whole reference, not its slice
- fusion_input
- masks
- layout
- fusion_input
Here's the problem this node exists for, and you've probably hit it. You feed an edit model one reference photo with two people in it, and you ask for both of them in a new scene. The reference is a single image with a spatial layout, and the model carries that layout onto the canvas - so the left subject takes the left half of the reference and the right subject takes the right half, and neither one gets the whole of it. Left girl gets an eye and a shoulder. Right guy gets a collar.
Fusion Regions is the fix, and it's a weird one to look at because it does its work on pixels rather than on conditioning. It sits on the fusion_input pipe, between your image collector and the fusion encode node, and rebuilds the reference as a canvas-shaped frame where the entire reference is fitted into each region's box. Whole copy per subject, exactly where that subject stands.
Why pixels, and not tokens
The Fusion group in this pack blends multiple references inside the conditioning: each source gets encoded through a Qwen3-VL vision tower and their visual tokens get mixed under a weight field. The obvious move there would be rearranging tokens after the fact, and the author's own note explains why that doesn't work - the vision tower and language model have already read the tokens in their original positions, so a rearranged grid is out of distribution, while an encoded layout is just an image. Re-laying the reference out before the encoder sees it keeps everything in distribution.
Outside the regions the frame is transparent, and the fusion encode already reads alpha as "no source is here", so the background takes nothing from the references. That's the default. outside set to full frame keeps the whole reference underneath instead - which is what you had before this node existed, so it's also your A/B.
The inputs that matter
Required: fusion_input (the pipe), and fit - contain (whole reference, box left partly empty, the default), cover (fill the box, cropping), or stretch (distort to the box). contain is right most of the time; cover is for when the region is wider than a person and you'd rather lose the edges than the scale.
Then padding (0.05 default, 0 to 0.5): it grows each region's box by a fraction of its size so the copy isn't clipped to the tightest outline of the mask. Masks hug silhouettes; a face mask leaves no room for hair. 0.05 to 0.15 is the useful range.
mirror is the fun one - none, right side, or left side - flipping copies on one half of the frame so two subjects face each other instead of both facing camera-left. It flips text, logos and one-sided details too, so it's a choice, not a default.
There are three more that reach forward into the encode: pattern (whole frame vs per region), content (per copy vs shared) and prompt_reads (the layout vs one copy). All three change the output, so all three are opt-in. The one to know about is prompt_reads = one copy: with copies tiled across the frame, a prompt like "four men" gets read against a frame that already shows one man per region, and an edit model treats that as extra people to keep. Switching to one copy reads each reference whole while the layout still decides placement - that's the fix when you get more subjects than you asked for.
Optional: masks (one MASK per region as a batch - use the same batch you'd give Regions from Masks, and its size sets the frame's aspect, so match your canvas) or layout, which is Region Grid's fusion_layout output. layout wins over masks and replaces mirror, carrying per-cell mirroring that a plain mask batch can't express. One output: fusion_input, straight into the fusion encode.
Installing it
Manager → search Nynxz → ComfyUI-NynxzNodes, or comfy node install comfyui-nynxz-nodes. From source:
cd ComfyUI/custom_nodes
git clone https://github.com/Nynxz/ComfyUI-NynxzNodes
cd ComfyUI-NynxzNodes
pnpm install && pnpm build
Restart after. That pnpm build is not decoration - the repo gitignores the built web/ folder, so a bare clone gives you the Python nodes with none of the pack's custom panels. The registry install ships it built.
No model downloads for this node, but it's only useful inside a Fusion workflow, and Fusion needs a Qwen3-VL text encoder (qwen3vl_4b / qwen3vl_8b): Krea 2 and Mage-Flow at 4B, Qwen Image 2.1 and Ideogram 4 at 8B. No encoder, no fusion.
Troubleshooting
Frame size surprises are the common one. The output frame is capped at 1536 on its longest side internally, because the encode node resizes again anyway - so building it huge buys nothing. The aspect comes from your masks, so if the copies look squeezed, check that the mask batch matches the canvas you're actually sampling.
Two failures that are really one: a region whose copy looks cropped to a hard rectangle is usually padding too low, and a subject bleeding into its neighbour is usually a mask that's touching the edge of the next mask. Raise padding for the first, put a gap in the masks for the second.
And the honest one: this is an experimental corner of an experimental group, for a specific encoder family. If your model isn't Krea 2, Qwen Image 2.1, Ideogram 4 or Mage-Flow, you're in the wrong part of the graph - Fusion does nothing at all without a Qwen3-VL encoder in front of it.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| fusion_input | NYNXZ_FUSION_INPUT | — | |
| fit | COMBO | contain | How a reference fills each region's box. contain = the whole reference, the rest of the box left empty; cover = fill the box, cropping; stretch = distort to the box. |
| padding | FLOAT | 0.050–0.5 | Grow each region's box by this fraction of its size, so the copy isn't clipped to the tightest outline of the mask. |
| outside | COMBO | empty | What the frame holds outside every region. empty = nothing, so the background takes nothing from the references; full frame = the whole reference stays underneath, as without this node. |
| mirror | COMBO | none | Flip the copies in regions on one half of the frame, so two subjects face each other. For choosing each copy's flip, wire Region Grid's layout (`2~`) instead. Mirroring also flips text, logos and one-sided details. |
| pattern | COMBO | whole frame | How the encode's blend pattern is laid out. whole frame = one pattern over the whole grid, as before this option existed; per region = the pattern repeated inside each region and mirrored with its copy, so every copy gets the same mix of references. Changes the output. |
| content | COMBO | per copy | How the encode's content_mode treats the copies. per copy = each copy weighted by what the vision tower read in it, which drifts slightly between a copy and its mirror; shared = the first copy's weights reused in the others, flipped with them, so mirrored copies blend as exact mirrors. Only matters when content_mode is on. |
| prompt_reads | COMBO | the layout | What the encode reads your prompt against. the layout = the tiled frame, as before this option existed; one copy = each reference whole, while the layout still decides placement. Try one copy when a prompt that counts subjects gives more than it asks for. Changes the output. |
| masksopt | MASK | One mask per region, as a batch — the same batch Regions from Masks takes. Its size sets the frame's aspect, so it should match the canvas. Or wire `layout` instead. | |
| layoutopt | NYNXZ_FUSION_LAYOUT | Region Grid's fusion_layout: the copies' boxes plus which are mirrored, set per cell there (`2~`). Takes precedence over `masks`, and replaces `mirror`. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| fusion_input | NYNXZ_FUSION_INPUT | — |