Image Overlay [LP]
Image Overlay [LP] — ComfyUI Node Guide
- base_image
- overlay_image
- optional_mask
- IMAGE
Stamp one image onto another - a watermark, a logo, a sticker, a second layer you want composited in at a specific spot, size, rotation, and opacity - with an optional mask if you want the overlay's shape to be something other than its full rectangle.
What it is
This node's core functionality is credited in the README to efficiency-nodes-comfyui by jags111, with LevelPixel's version adding "an extended range of specified sizes for the final image, and also another standard image size" on top of that lineage. If you've used Efficiency Nodes' Image Overlay before, the shape of this one will feel familiar - same idea, wider knobs.
Where it fits: anywhere you need to composite two images together inside the graph rather than in an external editor - placing a logo on generated output, layering a UI mockup element onto a background, or building test patterns where a foreground needs to sit at an exact offset and rotation over a base.
Inputs and outputs
base_image(IMAGE) andoverlay_image(IMAGE) - the two images being composited, base underneath, overlay on top.overlay_resize- how the overlay gets sized before placement: None (use as-is), Fit, Resize by rescale_factor, or Resize to width & height.resize_method- the interpolation used when resizing:nearest-exact,bilinear, orarea.rescale_factor(FLOAT, 0.01–16, default 1, step 0.1) - only relevant whenoverlay_resizeis set to use it.width/height(INT, 0–32768, step 64, default 1024 each) - only relevant whenoverlay_resizeis set to "Resize to width & height."x_offset/y_offset(INT, -48000 to 48000, step 10, default 0) - where the overlay lands relative to the base, in pixels.rotation(INT, -180 to 180, step 5, default 0) - rotates the overlay before placement.opacity(FLOAT, 0–100, step 5, default 0) - how visible the overlay is. Worth flagging since it's the one setting that trips people up immediately: the default sits at 0, meaning fully invisible. If you drop this node in and the overlay seems to do nothing at all, that's not a bug - turn opacity up.optional_mask(MASK, optional) - constrain the overlay to a specific shape instead of its full bounding rectangle.
Output: IMAGE - the composited result.
Installing it
ComfyUI Manager: search "ComfyUI-LevelPixel" (listed as "Level Pixel"), install, restart. Manual install: cd ComfyUI/custom_nodes && git clone https://github.com/LevelPixel/ComfyUI-LevelPixel.git, restart ComfyUI. Nothing to download for this node - it's image compositing logic, no external models involved.
Common issues
The opacity-defaults-to-zero trap above is genuinely the first thing to check if this node "isn't working" - nine times out of ten the overlay is compositing exactly as intended, just at 0% visibility.
x_offset and y_offset have a very wide range (±48000), which means it's easy to type a value that's way off-canvas without immediately noticing - if your overlay vanished after adjusting position, check you didn't push it entirely outside the base image's bounds.
If overlay_resize is set to something other than "None" but your overlay's size isn't changing the way you expect, double check you're actually feeding the field that setting reads - "Resize by rescale_factor" ignores width/height, and "Resize to width & heigth" ignores rescale_factor; only one sizing path is active at a time based on that dropdown.
And optional_mask needs to match the overlay's dimensions for predictable results - a mask sized for a different image than the one you're actually overlaying is a common source of overlays landing or clipping in unexpected places.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| base_image | IMAGE | — | |
| overlay_image | IMAGE | — | |
| overlay_resize | COMBO | 4 options: None, Fit, Resize by rescale_factor, Resize to width & heigth | |
| resize_method | COMBO | 3 options: nearest-exact, bilinear, area | |
| rescale_factor | FLOAT | 1.00.01–16 | — |
| width | INT | 10240–32768 | — |
| height | INT | 10240–32768 | — |
| x_offset | INT | 0-48000–48000 | — |
| y_offset | INT | 0-48000–48000 | — |
| rotation | INT | 0-180–180 | — |
| opacity | FLOAT | 00–100 | — |
| optional_maskopt | MASK | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |