Nodes/Kimara.ai's Advanced Watermarking Tools/Kimara.ai Advanced Watermarker
ComfyUI Node

Kimara.ai Advanced Watermarker

A watermark that actually moves across your images

By kimara-ai·Created 2 years ago·Updated 6 months ago· 26
Kimara.ai Advanced Watermarker
  • image
  • logo_image
  • mask
  • IMAGE
move_watermark
move_watermark_step10
watermark_textMade by userxyz123
fontassets/fonts/DMSans-VariableFont_opsz,wght.ttf
font_variation
font_size16
logo_scale_percentage25
x_padding20
y_padding20
rotation0
opacity40

Every time you post a batch of generations you face the same chore: open them in an editor, paste your handle on top, export, repeat. This node does all of that inside the graph, for every image in the batch at once - and if you flip one toggle, the watermark doesn't just sit in the corner, it slides diagonally across each frame by a few pixels and bounces off the edges. It comes from Kimara.ai, the cloud-ComfyUI startup, and it ships with a tiny list-to-batch helper that pairs with it. It won't stop a determined reposter, but for casual credit and brand stamping it kills the editor round-trip.

How it works

Under the hood it's pure Pillow and numpy - no models, no API, nothing to download. Each image tensor is converted to a PIL image, the text is drawn on a transparent overlay and alpha-composited on top, and the logo (if you feed one) is resized to a percentage of the image width, given an alpha level, optionally rotated, and pasted over the corner. In move mode the node keeps the stamp's position on its own class instance between frames, so every image in the batch gets the mark nudged by move_watermark_step pixels until it hits a padded border, then bounces the other way. Change the resolution mid-run and it resets to the corner. One thing to know before you dream up a design: the text color is hardcoded white. There's no color input yet.

The inputs that matter

Only two are required: image (a batch is fine, one image works too) and move_watermark, the boolean that decides whether the stamp drifts. Everything else is optional:

  • watermark_text - your handle or tagline. The default is literally "Made by userxyz123", so change it. Leave it empty for a logo-only stamp.
  • logo_image and mask - an IMAGE to use as a logo watermark, plus an optional MASK that's applied as the logo's alpha channel (inverted).
  • opacity - the trap. 0 is fully visible, 100 is fully transparent. Backwards from every instinct.
  • logo_scale_percentage - logo width as a percentage of image width (default 25).
  • font, font_variation, font_size - the font path (defaults to the bundled DM Sans variable font), a named variation like Bold, and the text size. Font size scales up automatically for resolutions wider than the 800px baseline.
  • rotation - rotates the logo only, not the text.
  • move_watermark_step - how many pixels the stamp travels per frame (1–500).

The single output, IMAGE, is a list of per-image tensors rather than one batched tensor. That's deliberate: the pack's other node, Kimara.ai Batch Images, exists to concatenate that list back into a single batch. Wire the list into a node expecting a plain IMAGE and you'll get per-item expansion or a hard error, depending on what it's plugged into.

Install

This one's painless: requirements.txt is just Pillow and numpy, both of which ComfyUI already ships, and there are no model files. Install through ComfyUI Manager (search "Kimara" or "Advanced Watermarking"), or the manual way:

cd ComfyUI/custom_nodes
git clone https://github.com/kimara-ai/ComfyUI-Kimara-AI-Advanced-Watermarks

then restart ComfyUI. It's AGPL-3.0 licensed, which only matters if you ever wrap it in something you distribute.

Gotchas

  • opacity is backwards, see above. Keep it low (10–40) for the classic faint stamp.
  • The default font path is relative, so it resolves against ComfyUI's working directory. In a container, give the full path from the workdir, e.g. custom_nodes/ComfyUI-Kimara-AI-Advanced-Watermarks/assets/fonts/DMSans-VariableFont_opsz,wght.ttf. If the file isn't found, the node silently falls back to PIL's tiny default bitmap font - your text will look surprisingly old.
  • rotation only spins the logo image; the README admits it. Text stays put.
  • The output is a list, not a batch. Route it through the pack's Batch Images node before anything that expects a single tensor.
  • There's no per-image variation: one uniform stamp across the whole batch. That's the feature, not a bug.

Honestly, for a single image you're better off with WAS Node Suite's text overlay or an editor. Where this earns its keep is batch work: a grid of variations, an animated sequence, or video frames, where hand-stamping each frame would take all evening.

CategoryKimara.ai

Inputs (14)

NameTypeDefaultDescription
imageIMAGE
move_watermarkBOOLEAN
logo_imageoptIMAGE
maskoptMASK
move_watermark_stepoptINT101–500
watermark_textoptSTRINGMade by userxyz123
fontoptSTRINGassets/fonts/DMSans-VariableFont_opsz,wght.ttf
font_variationoptSTRING
font_sizeoptINT161–256
logo_scale_percentageoptINT250–100
x_paddingoptINT200–256
y_paddingoptINT200–256
rotationoptINT0-180–180
opacityoptFLOAT400–100

Outputs (1)

NameTypeDescription
IMAGEIMAGE