DaSiWa Watermark Overlay
A flicker-free watermark for image and video batches
- images
- IMAGE
Most watermark nodes are fine for a single still image and fall apart the moment you feed them a video batch - flickering, black frames on certain positions, or a watermark that looks pasted on rather than actually part of the frame. This one is built specifically for batches: it initializes every output frame from the source before blending the watermark region on top, which is the detail that kills the flicker other implementations have.
How it works
watermark_path pulls from PNGs you've dropped into the pack's watermark folder - it ships with example.png as a placeholder so the dropdown isn't empty on first install; drop your own logo in and it shows up the same way. position sets one of five anchor points (corners plus center), scale (0.01–1) sizes it relative to the frame, and rotation (0–359°) does exactly what it says.
The two features worth knowing about specifically:
Optical Padding. Ordinary padding measures from the watermark's bounding box, which looks wrong for anything that isn't a solid rectangle - a logo with lots of transparent margin ends up looking pushed further from the edge than a dense one at the same padding value. optical_padding adjusts placement by the watermark's actual visual center of mass instead, and optical_strength (0–1) controls how aggressively it corrects. Turn it on if your watermark has an irregular shape or a lot of transparent padding baked into the source PNG.
Splash Mode. fade turns on a fade-in at the start of a clip and fade-out at the end, sized by fade_margin (as a fraction of the total clip length) - the kind of thing you'd otherwise build with a separate opacity-ramp node chained in front of a static watermark.
randomize_position plus random_seed and random_switches gives you seeded corner-cycling: the watermark changes position across the batch instead of staying pinned to one spot, while position still determines where it starts. Useful for content where you don't want the exact same pixel region covered on every single frame.
The inputs and outputs that matter
imagesin, singleIMAGEbatch out - mid-pipeline node, chain it before your saver or Video Combine.watermark_path,position,scale,transparency(0–1) are the four you'll set on every use.resampling(bicubic default) controls the quality of the watermark's own scaling - bump the algorithm choice up if you're scaling a small logo up significantly and it looks soft.padding_x/padding_y- offset from the anchor position in pixels.
How to install it
ComfyUI Manager - search DaSiWa-Nodes, install, restart. Manual: clone into custom_nodes, pip install -r requirements.txt, restart. It runs as a stable CPU compositor by design, so no GPU dependency and no model to download - just drop a PNG watermark into the pack's assets folder before your first run.
The approach is credited as inspired by Artificial-Sweetener's comfyui-WhiteRabbit, if you've used that pack before and are wondering why some of this feels familiar.
Common issues & troubleshooting
Watermark flickers or shows a black frame on some frames. This is specifically the failure mode the "Stable Compositing" design avoids - if you're still seeing it, double-check you're on the current version of the pack rather than an older cached install, since this behavior is called out as a deliberate fix in the README.
Watermark looks off-position on transparent-heavy logos. Turn on optical_padding - this is exactly the symptom it's built to correct, and it's off by default so a lot of people miss it on the first pass.
Dropdown only shows example.png. That means no watermark PNG has been added to the pack's watermark directory yet - the dropdown reflects what's actually in that folder, it's not a hardcoded list.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| watermark_path | COMBO | 1 options: example.png | |
| position | COMBO | bottom-right | 5 options: bottom-right, bottom-left, top-right, top-left, center |
| scale | FLOAT | 0.200.01–1 | — |
| resampling | COMBO | bicubic | 5 options: bicubic, bilinear, nearest, area, nearest-exact |
| transparency | FLOAT | 1.000–1 | — |
| rotation | INT | 00–359 | — |
| padding_x | INT | 200–4096 | — |
| padding_y | INT | 200–4096 | — |
| optical_padding | BOOLEAN | false | — |
| optical_strength | FLOAT | 0.400–1 | — |
| random_switches | INT | 31–64 | — |
| fade | BOOLEAN | false | — |
| fade_margin | FLOAT | 0.100.01–0.5 | — |
| randomize_position | BOOLEAN | false | — |
| random_seed | INT | 00–2147483647 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |