VELVET VICE — Final Watermark Overlay
Watermark the final frames, not every test render
- images
- images
Branding a video is a final-step problem, not a generation-step one. You don't want a watermark baked into every test frame you iterate on - you want it on the final export, once, on top of finished pixels. VelvetViceWatermarkOverlay is Velvet Vice's answer: a compositing node that drops an RGBA watermark onto your final 24/48 FPS frame stack immediately before the pack's encoder, with nine placements, scale, opacity, and independent margins. It's a small, honest, deterministic pixel operation - the kind of thing that should be a node, and here it's a good one.
How it works
It reads the watermark image from ComfyUI's input directory (or an annotated path), composes it over each frame using the alpha channel, and blends by your opacity setting before passing the frames on. Because the blend is a plain per-pixel operation on tensors, it's cheap and deterministic - no model pass, no inference, no re-roll luck. It's not a "generative" watermark or a metadata tag; it's actual pixels in the output, which is what you want when the point is that the mark is visibly there.
Positioning is nine-way (top-left through bottom-right, including dead center), computed from your margins rather than fixed pixel offsets - so the mark keeps the same relative distance from the edge regardless of frame dimensions, which matters when your clip is 1216×704 one run and 1280×768 the next.
The inputs
- images - your final frame batch, straight from decode/postprocessing.
- enabled - defaults to false, deliberately. The pack ships with the watermark OFF so you don't get branded exports unless you turn it on. Flip this and the file dropdown actually rescans your input directory for PNGs, WebPs, JPEGs.
- watermark_file - an enum populated from image files in
ComfyUI/input(it tries to keepVelvet_Vice_Watermark.pngat the top if present). Drop your own.png- ideally with real transparency - intoinput/and it'll show up in the list. - position - one of the nine exact spellings (
top-left,bottom-right,center, …). It's a plain string field, and anything unrecognized silently falls back tobottom-right, so typos are the classic mistake here. - scale (0.18) / opacity (0.65) - the two dials that matter. 0.18 of frame width is subtle; 0.65 opacity keeps it visible without screaming.
- margin_x (24) / margin_y (24) - independent horizontal/vertical offsets in pixels.
It outputs images - the same batch with the mark composited - which you wire into the Output Studio or any encoder.
Installing it
Part of the Velvet Vice LTX pack (registry velvet-vice-ltx). ComfyUI Manager → search "VELVET VICE - LTX", or:
cd ComfyUI/custom_nodes
git clone https://github.com/Velvet-Vice/velvet-vice-ltx
Restart ComfyUI and Ctrl+F5. No Python dependencies; it uses PIL and numpy, both already present in a normal ComfyUI. If you're upgrading from an older Velvet Vice install, don't merge the old node directory into the new release - reinstall fresh.
Common issues
- No watermark appears - either
enabledis still false (it ships off!), or the selected file doesn't exist ininput/and the node silently skips. Drop the file in the right folder and re-check the dropdown. - It lands in the wrong corner - you typed a position that isn't one of the nine exact values. Check the spelling; unknown values fall back to
bottom-right. - The mark looks harsh / covers the subject - that's the scale/opacity/margins doing exactly what they're set to. A watermark that "ruins" a frame is a settings problem, not a node problem.
- Hard edges on the mark - your PNG needs an alpha channel. A JPEG with no transparency composites as an opaque box at 0.65 opacity, which never looks right.
One honest note: this node brands pixels. The pack's license is itself a branded thing - free to use, but you can't resell or redistribute the workflow or the included assets. If you're building on this workflow for something you ship, keep that in mind, and keep the watermark toggle where the author left it: off, unless you mean it.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| enabled | BOOLEAN | false | — |
| watermark_file | COMBO | Velvet_Vice_Watermark.png | 2 options: Velvet_Vice_Watermark.png, example.png |
| position | STRING | bottom-right | — |
| scale | FLOAT | 0.180.02–0.8 | — |
| opacity | FLOAT | 0.650–1 | — |
| margin_x | INT | 240–2048 | — |
| margin_y | INT | 240–2048 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |