Nodes/Runtime44 ComfyUI Nodes/Runtime44 Image Overlay
ComfyUI Node

Runtime44 Image Overlay

Paste one image onto another — your watermark machine

By runtime44·Created 2 years ago·Updated 2 years ago· 42
Runtime44 Image Overlay
  • image
  • overlay
  • overlay_mask
  • Image
align_x
align_y
x0
y0
scale1.00

Runtime44 Image Overlay pastes one image on top of another, and its intended job per the README is watermarking - though it's equally good for logo drops, title cards, and compositing a rendered element onto a background. It does this in pixel space with PIL, which means no latents, no models, just two images in and one image out.

The whole point of doing this in-graph rather than in a photo editor is that it's part of your workflow. Watermark every render at save time, consistently, with the same position every run. That's the kind of thing that's trivial to forget when it's a manual step and effortless when it's wired in.

The input trap you need to know about

This node has a mask input, and its convention is inverted from what you'd expect. The overlay's alpha channel is computed as 1 - mask - so where the mask is black, the overlay is fully opaque, and where the mask is white, the overlay becomes transparent. If you feed it a normal white-on-black watermark mask (the ComfyUI convention where white means "keep"), your text gets punched out of the image rather than stamped onto it.

The practical fix: to paste an overlay exactly as-is, feed an all-black (empty) mask. Only bother masking if you specifically want parts of the overlay to show through - and if you do, remember that black shows and white hides here.

The inputs that matter

Beyond image (the base) and overlay (what gets pasted), there are three placement controls:

  • align_x / align_y - start, center, or end for each axis. These pick the anchor point, not the final position. center/center drops the overlay dead in the middle; end/end pins it to the bottom-right.
  • x / y - pixel offsets from that anchor. So a watermark pinned bottom-right with x = -20, y = -20 sits 20px in from the corner.
  • scale - resize the overlay before pasting (1.0 = original size, LANCZOS downscale/upscale).

The output is a single Image, sized to the base image. One note: the overlay keeps its aspect ratio when scaled, but there's no "fit" mode - you set the scale and it obeys.

Installing

It's part of Runtime44 ComfyUI Nodes, found under the "image/postprocessing" category:

cd ComfyUI/custom_nodes
git clone https://github.com/runtime44/comfyui_r44_nodes
cd comfyui_r44_nodes
python -m pip install -r requirements.txt   # or: uv pip install -r requirements.txt

Restart ComfyUI, or just search "Runtime44" in ComfyUI Manager. It's plain PIL under the hood, so it doesn't need the pack's heavy CUDA wheels - though pip install -r requirements.txt will fetch them regardless, which is mildly annoying on a CPU-only box.

Two closing notes. For a text watermark, render the text to an image first (any of the text nodes floating around ComfyUI, or a transparent PNG from your editor) and feed that in with a black mask. And a fair warning for video work: this pastes the same overlay frame at the same spot every frame, which is exactly what you want for a static watermark and exactly what you don't want if you were hoping for tracking.

Categoryimage/postprocessing

Inputs (8)

NameTypeDefaultDescription
imageIMAGE
overlayIMAGE
overlay_maskMASK
align_xCOMBO3 options: start, center, end
align_yCOMBO3 options: start, center, end
xINT0-9223372036854776000–9223372036854776000
yINT0-9223372036854776000–9223372036854776000
scaleFLOAT1.000–100

Outputs (1)

NameTypeDescription
ImageIMAGE