Add Number Watermark For Image ๐
Stamp an incrementing number onto a batch
- images
- IMAGE
This node burns a number onto each image in a batch, counting up as it goes - image one gets "1," image two gets "2," and so on. It's not a copyright-watermark tool so much as an indexing tool: a fast way to label frames, grid tiles, or dataset images so you can refer to them by number later. If you've ever exported a batch and then squinted trying to figure out which one was "the third from that run," this fixes that.
Part of ComfyUI-MieNodes (ComfyUI_MieNodes), MieMieeeee's utility pack, in the Image Operator group. Fitting for the author, who's a video content creator - numbered frames are bread-and-butter for that kind of work.
Why you'd use it
The obvious case: you generate a batch and want each image visibly numbered so you can pick "give me number 7" without opening files one at a time. Contact sheets, seed-exploration grids, before/after sequences, storyboard frames - anything where the position in the batch is information you want on the image itself.
Because the number auto-increments from a starting value, it also works for stitching numbering across multiple runs: set start_number to where the last batch left off and the count continues. And since the position is specified as a percentage of the image, the same setting lands the number in a sensible spot whether your images are 512px or 2048px.
A quick honesty note: this is a burned-in overlay, not a robust or invisible watermark. It's meant to be seen and to help you organize, not to survive cropping or protect ownership. For labeling and indexing it's perfect; for "prove this is mine" it isn't the tool.
The inputs and outputs that matter
You only really touch a few of these; the rest are styling with sane defaults.
images(IMAGE) - the batch to number.start_number(INT, default 1) - what the first image is labeled. Set it to continue a count across runs.position_x/position_y(FLOAT, 0โ100, default 95/95) - where the number sits, as a percent of width/height. 95/95 is bottom-right.font_scale(FLOAT, default 1) - size.
The rest are appearance: color_r/color_g/color_b (0โ255, default white), thickness (default 2), and outline (default true) with outline_thickness (default 2) for a contrasting border that keeps the digits readable over busy images.
Output is IMAGE - the numbered batch, ready to preview or save.
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
The number's hard to read. Keep outline on - that dark border is what makes white digits legible over a bright or busy image. If it's still lost, bump font_scale and thickness, or move it to a calmer corner with position_x/position_y.
It ran but I only see one number. This numbers a batch. If you pass a single image you get a single number (your start_number). The incrementing only shows when there are multiple images on the wire.
It modifies the pixels. The number is baked into the output image, not a separate layer. If you want a clean copy too, branch the batch before this node so you keep an unnumbered version.
Off-image placement. position_x/position_y are percentages, so values near 100 push toward the edges; if a large font gets clipped at the corner, pull the position in a few percent or shrink the font.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | โ | |
| start_number | INT | 1-2147483648โ2147483647 | โ |
| position_x | FLOAT | 95.000โ100 | โ |
| position_y | FLOAT | 95.000โ100 | โ |
| font_scale | FLOAT | 1.000.1โ10 | โ |
| color_r | INT | 2550โ255 | โ |
| color_g | INT | 2550โ255 | โ |
| color_b | INT | 2550โ255 | โ |
| thickness | INT | 21โ20 | โ |
| outline | BOOLEAN | true | โ |
| outline_thickness | INT | 21โ10 | โ |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | โ |