Image Watermark
Batch text + logo watermarking with real control
- image
- watermark_image
- image
- summary
When you're churning out a batch of promo frames or client previews, slapping a visible credit on each one is a chore you should never do by hand. MKRImageWatermark is the pack's visible watermark node: it stamps text (with or without a background bar), overlays an optional logo, and handles whole batches in one pass. If the pack's invisible watermark nodes are for provenance you can't see, this one is for the brand mark you want the viewer to see.
How it works
You hand it an image batch, and it stamps every frame consistently: same text, same position, same size, same opacity. The text rendering has the controls you'd expect - text, text_size, text_color, text_bg_color, and text_bg_opacity (default 0.35), so you can get a legible label on any background by giving it a dark bar to sit on. position is one of five presets (bottom-right, bottom-left, top-right, top-left, center) with a margin in pixels. watermark_opacity (default 0.8) sets how strong the whole composite is.
The logo path is where it gets interesting. Connect a watermark_image and it's scaled to logo_scale (a fraction of the frame size, default 0.2) and rotated by logo_rotation_deg, then composited alongside or instead of the text. The logo is resized relative to the base image, so the same settings scale correctly across frames of different sizes - which is the kind of detail that makes batch watermarks actually usable instead of per-image fiddling.
Inputs that matter
image- required. The whole batch gets stamped.text- required-ish: if bothtextandwatermark_imageare empty/absent, the node returns the input unchanged with a warning rather than doing nothing silently.watermark_image- optional logo overlay.- Everything else - size, color, position, opacity, scale, rotation - is cosmetic, and the defaults are sane for a bottom-right credit at 28 px.
Outputs
image- the watermarked batch, same dimensions, same batch count.summary- frame count, whether text and/or logo were used, and position. Handy for confirming a batch actually got stamped.
Installing it
Part of the pack:
# ComfyUI Manager: search "MKRShift Nodes", install, restart.
# or:
cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes
# restart ComfyUI
No extra dependencies, no models. Text rendering uses Pillow's built-in fonts, so there's nothing to download.
Gotchas and honest limits
A few practical notes. First, if the node warns "No text or watermark_image provided, returning input unchanged," that's your cue - it's not broken, you just didn't give it anything to stamp. Second, since it processes the whole batch identically, position presets are relative to the frame - fine for a consistent look, but if your frames have very different aspect ratios, the watermark's visual weight will drift (bottom-right on a square frame sits differently than on a 16:9 one). There's no per-frame smart placement here; for that you'd composite manually.
And the honest caveat about visible watermarks generally: they protect against casual copying, not against anyone with ten minutes and a crop tool. This node makes the mark look professional and consistent - the rest is on your licensing terms. For a mark people won't even see, that's what MKRInvisibleImageWatermark is for.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| text | STRING | — | |
| text_size | INT | 288–512 | — |
| text_color | STRING | #FFFFFF | — |
| text_bg_color | STRING | #000000 | — |
| text_bg_opacity | FLOAT | 0.350–1 | — |
| position | COMBO | bottom_right | 5 options: bottom_right, bottom_left, top_right, top_left, center |
| margin | INT | 240–2048 | — |
| watermark_opacity | FLOAT | 0.800–1 | — |
| logo_scale | FLOAT | 0.200.02–1 | — |
| logo_rotation_deg | FLOAT | 0.0-180–180 | — |
| watermark_imageopt | IMAGE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| summary | STRING | — |