Add Text Watermark For Image ๐
Burn a text watermark onto your images
- images
- IMAGE
Stamp arbitrary text onto an image - a handle, a URL, a "preview" label, a channel name - directly inside your ComfyUI graph. AddTextWatermarkForImage overlays a text string on each image in a batch, with control over size, color, position, alignment, and an outline so it stays readable. It's the simple, do-it-in-the-workflow answer to "I want my name on these before I post them."
Part of ComfyUI-MieNodes (ComfyUI_MieNodes), MieMieeeee's utility pack, in the Image Operator group. The pack's author is a content creator, and a batch text-stamp is exactly the kind of thing you want when you're publishing a lot of images.
Why you'd use it
The point is to keep watermarking inside the pipeline instead of exporting everything and running a separate pass in Photoshop or a script. Generate, watermark, save - one graph. Because it works across a batch, you can label a whole run in a single queue. And since the position is given as a percentage of the image, one setting places the text sensibly regardless of resolution.
The text field accepts full strings (and non-Latin text - the default is literally Chinese for "watermark text"), so this isn't limited to a single word. Use it for a signature line, a site URL, a "sample / not for redistribution" tag on previews, or episode/scene labels on video frames.
Two caveats worth stating plainly. First, this is a visible, burned-in overlay - it's meant to be seen. It's not a steganographic or tamper-proof watermark and won't survive a determined crop. Second, it edits the pixels, so the output carries the text permanently; keep an un-watermarked branch if you want a clean version too.
The inputs and outputs that matter
The ones you'll actually set:
images(IMAGE) - the batch to stamp.text(STRING, multiline) - what to write. Multiline, so you can do more than one line.font_size(INT, default 48) - size in pixels; scale it to your image.position_x/position_y(FLOAT, 0โ100, default 50/95) - placement as a percent. 50/95 is bottom-center.align(left/center/right, default center) - text alignment, which matters once you have multiple lines.
The styling defaults are fine to leave alone: color_r/color_g/color_b (0โ255, default white) and outline (default true) with outline_width (default 3) - that outline is what keeps light text legible over light images.
Output is IMAGE - the watermarked batch.
Installing it
ComfyUI Manager โ search ComfyUI-MieNodes โ install โ restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/MieMieeeee/ComfyUI-MieNodes
then restart. No model download. Nodes appear under the ๐ MieNodes menu.
Common issues
Text you can't read over a bright image. Keep outline on and give it enough outline_width - that contrasting border is doing the heavy lifting. If your text is white-on-white anyway, switch the color to something darker with the color_r/g/b inputs.
Text spilling off the edge. font_size is absolute pixels, not a percentage, so a size tuned for a 512px image will be huge (and may clip) on a 2048px one, and vice versa. Scale the font to the image, and pull position_x/position_y in from the extremes if a long line runs off.
Non-Latin characters render as boxes. Rendering depends on a font that actually has the glyphs. If your text shows tofu boxes, it's a font-coverage issue on the machine running ComfyUI, not a bug in the node.
It's a signature, not security. Anyone can crop or paint it out. Use it to label and brand, not to lock down ownership.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | โ | |
| text | STRING | ๆฐดๅฐๆๅญ | โ |
| font_size | INT | 488โ512 | โ |
| position_x | FLOAT | 50.000โ100 | โ |
| position_y | FLOAT | 95.000โ100 | โ |
| color_r | INT | 2550โ255 | โ |
| color_g | INT | 2550โ255 | โ |
| color_b | INT | 2550โ255 | โ |
| outline | BOOLEAN | true | โ |
| outline_width | INT | 30โ20 | โ |
| align | COMBO | center | 3 options: left, center, right |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | โ |