SenseNova Reference Image
Your Source Image Isn't a ControlNet — It's Tokens in the Prompt
- positive
- negative
- Image-1
- Image-2
- positive
- image_condition
People new to SenseNova editing try to wire their source image in like it's a ControlNet, or worse, drop it into the latent slot. Both are wrong. SenseNova Reference Image is how the model actually eats a source image: it turns the picture into tokens inside the prompt itself. The image becomes part of the text conditioning the model attends to, with a label, an attention mask, and a defined role - which is why the order and the labels matter so much.
The workflow it belongs to: CLIP Text Encode → this node → KSampler (or the Edit Guider for custom sampling). It's the standard, one-or-two-image editing path - for 3 to 10 references, use the pack's SenseNova Reference Images (1-10) node instead.
Inputs and outputs that matter
- positive - your instruction conditioning. Wire the output of your text encoder in here.
- negative - the empty/negative conditioning.
- Image-1 (required) - the main/source image. In a garment edit, this is the person.
- Image-2 (optional) - second reference. In a garment edit, the clothing.
Outputs: positive (the instruction conditioning, now carrying the references) and image_condition (a conditioning that represents the reference image on its own).
How it works under the hood
Mechanically, this node does several careful things. It injects the image as a run of special image tokens (image-context tokens wrapped in start/end markers) plus Image-1 / Image-2 label tokens, positioned into the chat template, with a block-causal attention mask so the model reads each image as a coherent block rather than a random sequence of pixels. Each reference is smart-resized individually to fit a total pixel budget - feed it a 2048-wide photo, a tiny crop, anything; it normalizes and resizes per-reference rather than squashing them into one strip.
The role split between the two conditionings is the clever part: positive gets the references in condition mode (images as context), and the image_condition output carries the image-only conditioning that drives the edit. In the simple img_cfg=1 path you connect positive → KSampler positive and image_condition → KSampler negative. That's the whole trick that makes plain-KSampler editing work.
The gotchas
- One image per slot, not a batch. Each input accepts a single IMAGE. An IMAGE batch will error - the tooltips and validation are explicit.
- Order is contract. Image-1 is first, Image-2 second, and your prompt should refer to them by those exact labels ("make the person in Image-1 wear the clothes from Image-2"). Put the person in Image-1, the garment in Image-2, and don't tell the model to copy the mannequin from Image-2 - that's where garment-transfer edits go wrong. The pack's
SenseNova Structured Edit Promptnode is built to write this structure for you. - Legacy workflows that used the old
images.imagesocket names auto-migrate on import, so don't panic if an old graph looks slightly different.
Install
It's part of the Comfyui-SenseNova-U1.5-Wrapper-T8 pack: search "SenseNova U1.5 (T8)" in ComfyUI Manager, or git clone https://github.com/T8mars/Comfyui-SenseNova-U1.5-Wrapper-T8.git into custom_nodes/, then restart. No extra Python deps, no runtime downloads - the reference handling is all local math over your own images.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| Image-1 | IMAGE | Main/source image. In a garment edit, connect the person here. | |
| Image-2opt | IMAGE | Optional second reference. In a garment edit, connect the clothing here. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| image_condition | CONDITIONING | — |