IMG To IMG Conditioning (Creepybits)
Img2img in one node — no more three-node conditioning acrobatics
- positive
- negative
- vae
- image
- positive
- negative
- latent
img2img is the workhorse technique for restyling an existing image - start from a real render, add noise, and let the sampler rebuild it guided by your prompt. The core ComfyUI way of wiring that up is fiddly: you encode your image with the VAE, then apply the encoded latent to your positive and negative conditioning so the model knows what it's transforming. Three nodes and a couple of easy-to-miss connections.
IMG To IMG Conditioning collapses all of that into one box. Feed it your positive and negative conditioning, a VAE, and the source image, and it hands back the two conditioning streams with the image data already baked in, plus a clean blank latent for the sampler. It's the same math, bundled.
How it works
The mechanism is standard SD-family conditioning concat. The node encodes your image through the vae, then injects that encoded latent as concat_latent_image into both the positive and negative conditioning streams. It also crops the image to a multiple of 8 first (diffusion models work in 8-pixel chunks - a 1001×777 image would otherwise break), centering the crop. The latent output is a zero tensor the same shape as the encoding, ready to feed the KSampler's latent input.
The result: a single node that produces everything your img2img sampler needs.
Inputs and outputs
Four inputs, three outputs:
positive/negative- your CLIP-encoded conditioning, exactly as you'd build them normally.vae- the VAE matching your model.image- the source image you want to transform.- Outputs:
positive,negative(both now carrying the image's latent), andlatent(blank, sampler-ready).
Wire those three into a KSampler and you're done. Set the sampler's denoise to control how much of the original survives - that's the real "how much change" dial, and this node doesn't touch it.
Where the common mistakes live
The classic beginner error is connecting a source image that's already wildly off from your prompt's subject and expecting the structure to survive. As the KB's img2img notes make clear, plain img2img keeps general composition, not specific subjects - you'll get a different cat on a different rock, in roughly the same layout. That's not the node failing; that's the technique.
Second: this conditioning-concat approach is a Stable Diffusion / SDXL idiom. Flux and other newer architectures don't build img2img conditioning this way, so don't reach for this node in a Flux graph expecting it to work the same.
Installing it
It's part of ComfyUI-Creepy_nodes:
- ComfyUI Manager: search "Creepy_nodes" and install.
- Manual:
cd ComfyUI/custom_nodes git clone https://github.com/Creepybits/ComfyUI-Creepy_nodes.git
Restart ComfyUI. No extra dependencies - it's pure tensor logic on top of ComfyUI's own VAE encode.
Troubleshooting
If the output looks nothing like your input image, check your denoise - near 1.0 is effectively a full regeneration, and people blame the node for what is actually a sampler setting. And if you see an aspect-ratio mismatch error, it's usually the 8-pixel crop behaving differently than you expected; the node handles it silently, so the symptom is just "my image got slightly cropped." If that matters, pre-crop your image yourself to the exact ratio you want.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| vae | VAE | — | |
| image | IMAGE | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | — |