⭐ Star Watermark
Text or logo watermarks, tiled or one-off, with a mask
- images
- watermark_image
- watermark_mask
- watermarked
- mask
Sooner or later you want your name on the output - branding, a batch of generations you're about to post, or just insurance against someone else claiming your renders. You can do that in an image editor, or you can do it in the workflow with ⭐ Star Watermark, which stamps text or a logo onto a whole batch of images before they hit your save node. It's part of the StarNodes pack, the big helper collection from the r/comfyui dev who builds nodes "for myself but maybe some of you can use them too."
What makes it worth reaching for over a Paint.net trip: it's deterministic, it reruns with every batch, and it hands you a mask of where the watermark actually landed - which opens up downstream tricks like only watermarking a region or using the mask in compositing.
The mode that matters
The single most important input is mode, and it's a trap if you skip it:
- text - renders your
textstring with a system font. Fine for a name, a handle, or a "Sample Watermark". - image - pastes a logo from the optional
watermark_imageinput (plus an optionalwatermark_maskif your logo has transparency baked in weirdly). This is the one you want for an actual brand.
Watch it: in image mode without a watermark_image connected, the node quietly falls back to a default text watermark. If you see "Watermark" stamped on your images, that's why.
The inputs a beginner actually sets
- position - ten choices including all corners plus
custom, which unlocks the x_offset / y_offset knobs for pixel-fine placement. - opacity - 0 to 1. 0.5 is a decent default for something visible but not obnoxious.
- repeat_pattern - tiles the watermark across the whole image. That's your "nobody crops this out" mode, beloved by stock-image sellers.
- rotation - handy for diagonal text on tiled watermarks.
Everything else is optional seasoning: font, font_size, font_color, bold/italic/underline, and the effect_outline / effect_shadow / effect_glow toggles for legibility. There's also adaptive_color (picks a contrasting color automatically) and insert_datetime for timestamping. blend_mode gives you normal, multiply, or overlay - overlay is a nice subtle option for logos on busy images.
Outputs
- watermarked - your image batch with the watermark composited in.
- mask - a black-and-white mask of the watermark placement (you asked for it via
output_mask; it's a dummy batch if not).
Installing it
ComfyUI Manager, search Starnodes, install, restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/Starnodes2024/ComfyUI_StarNodes
cd ComfyUI_StarNodes
pip install -r requirements.txt
It's under ⭐StarNodes/Image And Latent, and it's plain Pillow - the one dependency ComfyUI already ships.
Gotchas
- The font dropdown is built from your system fonts (it scans the Windows Fonts directory). On Linux/Mac the pick list is thinner - if your font isn't there, install it system-wide and restart.
randomize_per_batchshifts the watermark position per image in the batch - great for beating simple crop-detection, mildly annoying if you actually want identical placement.- Watermarking after upscaling is much cheaper than watermarking before - you only stamp the final resolution once.
One honest note: this is a visible watermark node. If your threat model is someone strip-mining your metadata, this won't stop them - nothing in a pipeline will. It's for making your work look claimed, not for DRM.
Inputs (27)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| text | STRING | Sample Watermark | — |
| mode | COMBO | text | 2 options: text, image |
| image_scale | FLOAT | 1001–500 | — |
| repeat_pattern | BOOLEAN | false | — |
| opacity | FLOAT | 0.500–1 | — |
| position | COMBO | bottom_right | 10 options: center, top, bottom, left, right, top_left, +4 |
| x_offset | INT | 10-10000–10000 | — |
| y_offset | INT | 10-10000–10000 | — |
| rotation | INT | 0-180–180 | — |
| blend_mode | COMBO | normal | 3 options: normal, multiply, overlay |
| output_mask | BOOLEAN | false | — |
| adaptive_color | BOOLEAN | false | — |
| randomize_per_batch | BOOLEAN | false | — |
| watermark_imageopt | IMAGE | — | |
| watermark_maskopt | MASK | — | |
| fontopt | COMBO | arial.ttf | 9 options: Arial Bold.ttf, Arial Italic.ttf, Arial.ttf, Courier.ttf, Times New Roman Bold.ttf, Times New Roman.ttf, +3 |
| font_sizeopt | INT | 321–1000 | — |
| font_coloropt | STRING | #FFFFFF | — |
| font_boldopt | BOOLEAN | false | — |
| font_italicopt | BOOLEAN | false | — |
| font_underlineopt | BOOLEAN | false | — |
| effect_outlineopt | BOOLEAN | false | — |
| effect_shadowopt | BOOLEAN | false | — |
| effect_glowopt | BOOLEAN | false | — |
| insert_datetimeopt | BOOLEAN | false | — |
| invert_maskopt | BOOLEAN | false | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| watermarked | IMAGE | — |
| mask | IMAGE | — |