Qwen3-VL Ground
Ask the model where 'the sky' is, and fuse from what it finds
- clip
- fusion_input
- fusion_input
- debug
The default fusion in this pack blends reference images across a geometric pattern - a checkerboard, a grid, a random scatter. That works, but it doesn't know anything about what's actually in your images. Qwen3-VL Ground fixes that in the most direct way possible: it asks the model itself where a phrase is in each image, turns the answer into a region, and attaches those regions to the fusion input so the encode can compose your edit from named parts. "The sky" isn't a cell pattern anymore - it's where the model actually found the sky.
The wiring
This is the bridge this pack needs: Fusion Input → Qwen3-VL Ground → Fusion encode, and on the encode you raise region_strength above 0 for the regions to bite. The inputs:
clip- the same Qwen3-VL text encoder the Fusion encode uses.fusion_input- the collected references.phrases- what to take from each image, one per line, in image order. Blank or missing lines leave that image ungrounded, which means it stays a full-frame background in the blend.shape- rect or ellipse, how each box is rasterized into a region.feather- soft edge on each region (normalized units) so grounded areas blend rather than hard-cut. Default 0.1.strength- how hard a grounded region claims its area vs. a full-frame source. 1 = equal footing; above 1 (default 2) makes the grounded image dominate where it was found.max_tokensandseed- the generation budget and sampling seed (grounding runs deterministic regardless).
Two outputs: fusion_input (the input with regions attached, for the encode) and debug (the model's raw replies - wire it to a text node and you can see exactly what the model said it found, which is the first thing to check when a region looks wrong).
How it works
The mechanism is native Qwen3-VL inference plus a bbox parser: for each image it runs the grounding prompt ("Where is <phrase>?"), parses the model's box reply into normalized regions, and rides them along on the fusion input entries. Because it's the same encoder and the same token stream, the regions land in the same coordinate frame the encode reads.
Where people get burned
Phrase-to-image mapping is positional and literal - line 1 grounds image 1, so order matters, and a phrase the model can't find produces a degenerate box that can silently own a corner of the blend. That's exactly what Fusion Regions Preview is for: stick it on the ground node's output, look at the boxes before you generate. And keep region_strength on the encode in mind - a perfectly grounded region does nothing until that knob is above zero, which has tripped up more than one user.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/Nynxz/ComfyUI-NynxzExperimental
or search "Nynxz" in ComfyUI Manager, then restart. No pack dependencies - the real prerequisite is the Qwen3-VL CLIP and the fusion pipeline around it.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | The same Qwen3-VL text encoder the Fusion encode uses. | |
| fusion_input | NYNXZ_FUSION_INPUT | — | |
| phrases | STRING | the main subject | What to take from each image, one per line, in image order. A blank or missing line leaves that image ungrounded (full-frame background in the blend). |
| shape | COMBO | rect | Region shape rasterised from each box. |
| feather | FLOAT | 0.100–0.5 | Soft edge on each region (normalised units), so grounded areas blend rather than hard-cut. |
| strength | FLOAT | 2.00–8 | How hard a grounded region claims its area vs a full-frame source. 1 = equal footing; above 1 makes the grounded image dominate where it was found. |
| max_tokens | INT | 25616–2048 | Token budget per image for the grounding reply. |
| seed | INT | 00–18446744073709550000 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| fusion_input | NYNXZ_FUSION_INPUT | — |
| debug | STRING | — |