🔖 S42 CutFlow Watermark
Stamp your footage without leaving the graph — text, logo, or full anti-theft tile
- clip
- watermark_image
- clip
- frame_count
- info
If you're generating video in ComfyUI for anything beyond a personal toy, eventually you need to brand it - and the last thing you want is to export a render, open an NLE, add a watermark, and re-encode. S42CF_Watermark burns text or an image logo straight onto your IMAGE batch before it ever leaves the node graph. It's deterministic, batch-safe, and about as simple as these things get.
It's one of the Text & Overlays nodes in S42 CutFlow, and it's the end-of-chain stamp: generate → edit → watermark → save. Same node handles the "I'm sending this preview to a client" job via its tile mode, which is the anti-theft classic.
How it works
Everything is rendered with PIL. In text mode it draws your string at font_size × scale with proper anti-aliasing and drops it onto each frame. In image mode it takes the first frame of your connected watermark_image - and if that image has an alpha channel it's preserved, so a transparent PNG logo stays transparent instead of sitting in a white box.
The six position options cover the corners, center, and tile. Tile is the interesting one: it repeats the watermark across the whole frame at margin spacing - the standard way to make preview footage useless for reposting while keeping it viewable.
Inputs that matter
clip- the footage.mode-textorimage. Text is the zero-setup path; image is for a real logo.text- what gets drawn (default "© 2026").position- corners, center, ortile.opacity- 0.3 default; 0.1–0.2 for "I want to see it but it shouldn't distract," up toward 0.8 if you genuinely want it to annoy.scale/font_size/margin- sizing and placement.watermark_image(optional) - only used inimagemode; first frame only.
Outputs
clip (watermarked frames) → your video combine node. frame_count is a passthrough you can ignore unless downstream nodes need it. info is the summary string every CutFlow node emits.
Installing it
Same as the rest of the pack: ComfyUI Manager → search S42 CutFlow → install, or git clone https://github.com/GeekyGhost/S42-CutFlow into ComfyUI/custom_nodes/, install requirements, restart. PIL ships with ComfyUI, so no extra dependencies for this node.
Gotchas
Two small traps. First, image mode with nothing connected silently falls back to text rendering - the node doesn't error, it just draws your text string instead, which is easy to miss if you were expecting a logo. Second, it uses only the first frame of watermark_image, so don't feed it an animated badge expecting motion. And a workflow tip: since every node here is deterministic, one watermark config stamps a hundred renders identically - perfect for batch jobs, annoying if you forget it's in the chain and "can't figure out where this © came from."
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | IMAGE | Video clip to watermark. | |
| mode | COMBO | text | 'text' = render text as watermark. 'image' = use connected image as watermark. |
| text | STRING | © 2026 | Watermark text (used in 'text' mode). |
| position | COMBO | bottom_right | Watermark placement. 'tile' = repeat across entire frame. |
| opacity | FLOAT | 0.300–1 | Watermark opacity. Lower = more subtle. |
| scale | FLOAT | 1.00.1–5 | Scale multiplier for watermark size. |
| font_size | INT | 248–200 | Font size for text watermark. |
| margin | INT | 200–200 | Margin from edges in pixels. |
| watermark_imageopt | IMAGE | Watermark image (used in 'image' mode). First frame used. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| clip | IMAGE | — |
| frame_count | INT | — |
| info | STRING | — |