Nodes/ComfyCollectorNodes/Image Inset (CCN)
ComfyUI Node

Image Inset (CCN)

Drag and drop up to three images onto a base canvas

By valkymaera·Created 4 months ago·Updated 10 days ago· 1
Image Inset (CCN)
  • image
  • embed1
  • embed2
  • embed3
  • compilation
  • base
lock_ratiotrue
embed1_x10.0500
embed1_y10.0500
embed1_x20.3300
embed1_y20.3300
embed2_x10.3600
embed2_y10.3600
embed2_x20.6400
embed2_y20.6400
embed3_x10.6700
embed3_y10.6700
embed3_x20.9500
embed3_y20.9500
loaded_image
debugfalse

Compositing in ComfyUI usually means math: crop this, resize that, paste it at these coordinates with a paste node and a mask. Image Inset skips the arithmetic. It gives you a visual canvas on the node itself where you drag rectangles to place up to three images onto a base image, and it composites them for you. It's the kind of QoL node that makes you wonder why this isn't the default way to do it.

The source image is never modified - you get two outputs, compilation (the composited result) and base (the untouched source pass-through). Each embedded image gets its own rectangle on the canvas, color-coded (red, green, blue) so you always know which rect belongs to which embed. Connected embeds are scaled to fill their rectangle and pasted in order 1 → 3, so blue lands on top where they overlap. Disconnected embeds simply get no rectangle and are ignored.

The inputs that matter

  • image - the base canvas. This is a normal image input: wire it in, or treat the node like a standard image loader and pick a file.
  • embed1 / embed2 / embed3 - up to three images to paste onto the base. Wire any subset.
  • lock_ratio - locks each embed to its incoming aspect ratio as you drag, so you can't accidentally squash a face into a different shape. Default on; turn it off for deliberate stretch.
  • The embed*_x1/y1/x2/y2 fields - normalized 0–1 rectangle coordinates. You don't set these by hand; the canvas widget writes them as you drag. They're resolution-independent, so a layout you design at one base size scales cleanly to another.

There's also loaded_image (the file picker when nothing's wired) and a debug toggle. It reads the input directory and lists image files, same as the core Load Image node.

What to know before you love it

Two honest gotchas. First, like the pack's Cropped Image, the canvas operates on a copy stashed in ComfyUI's temp folder - fine for execution, but it's cleared on restart, so don't expect the preview to persist as state. Second, RGBA embeds have their alpha dropped rather than composited: masks and cutouts are explicitly out of scope for now. If you need transparency-aware compositing, this isn't the node; if you're placing rectangular refs or products on a backdrop, it's perfect.

The README's showcase uses it exactly that way: scrub a video for the perfect frame, crop a replacement image, inset it over the original, and prompt the model to replace one thing with another. That workflow - visual placement instead of coordinate math - is where Image Inset shines.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/valkymaera/ComfyCollectorNodes

restart, or ComfyUI Manager → ComfyCollectorNodes. The canvas widget is part of the pack's JS, so make sure you restart fully after install (hard refresh the browser too if the canvas doesn't render). No model files, no extra Python deps.

CategoryComfyCollectorNodes/Image

Inputs (19)

NameTypeDefaultDescription
lock_ratioBOOLEANtrue
embed1_x1FLOAT0.05000–1
embed1_y1FLOAT0.05000–1
embed1_x2FLOAT0.33000–1
embed1_y2FLOAT0.33000–1
embed2_x1FLOAT0.36000–1
embed2_y1FLOAT0.36000–1
embed2_x2FLOAT0.64000–1
embed2_y2FLOAT0.64000–1
embed3_x1FLOAT0.67000–1
embed3_y1FLOAT0.67000–1
embed3_x2FLOAT0.95000–1
embed3_y2FLOAT0.95000–1
imageoptIMAGE
embed1optIMAGE
embed2optIMAGE
embed3optIMAGE
loaded_imageoptCOMBO2 options: none, example.png
debugoptBOOLEANfalse

Outputs (2)

NameTypeDescription
compilationIMAGE
baseIMAGE