Runtime44 Image Overlay
Paste one image onto another — your watermark machine
- image
- overlay
- overlay_mask
- Image
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, orendfor each axis. These pick the anchor point, not the final position.center/centerdrops the overlay dead in the middle;end/endpins it to the bottom-right. - x / y - pixel offsets from that anchor. So a watermark pinned bottom-right with
x = -20, y = -20sits 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.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| overlay | IMAGE | — | |
| overlay_mask | MASK | — | |
| align_x | COMBO | 3 options: start, center, end | |
| align_y | COMBO | 3 options: start, center, end | |
| x | INT | 0-9223372036854776000–9223372036854776000 | — |
| y | INT | 0-9223372036854776000–9223372036854776000 | — |
| scale | FLOAT | 1.000–100 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| Image | IMAGE | — |