Nodes/ComfyUI_LayerStyle_Advance/LayerUtility: Add BlindWaterMark(Advance)
ComfyUI Node Runs on cloud

LayerUtility: Add BlindWaterMark(Advance)

An invisible watermark you can prove later, not one anyone sees now

By chflame163·Created 2 years ago·Updated 4 months ago· 696
LayerUtility: Add BlindWaterMark(Advance)
  • image
  • watermark_image
  • image

Not the watermark you're picturing. AddBlindWaterMark doesn't stamp a visible logo or text onto your image - it embeds a watermark steganographically, in a way that's invisible to the eye but recoverable later with the pack's companion ShowBlindWaterMark node. The use case is proof of provenance, not branding: you can send the image out into the world looking completely clean, and still decode your mark from a copy later if you need to establish it came from you.

How it works

You feed it a second image, watermark_image, and the node automatically converts that into a square black-and-white pattern before embedding it. The README is specific about what actually works well here: use a QR code, not a logo or photo. The pack even ships a matching CreateQRCode node to generate one from arbitrary text, which pairs naturally with this - encode your name, a URL, a license string, whatever you want recoverable, as a QR code, and watermark that in rather than a picture.

The inputs and outputs that matter

Just two required inputs:

  • image - the picture to watermark.
  • watermark_image - what gets embedded. Converted to square black-and-white automatically; a QR code survives that conversion cleanly, a detailed photo generally won't decode reliably afterward.

Output is a single image - visually identical to the input, with the mark embedded invisibly.

Where this fits versus the pack's other watermark option

If you're already using SaveImagePlus (or its V2) to write your output files, note that node has a blind_watermark field built in - a text string that gets converted to a QR code and embedded automatically at save time, no separate node needed. Reach for AddBlindWaterMark instead when you want to watermark mid-graph (before further processing, or on an image you're not saving through SaveImagePlus), or when you specifically want to embed an image-based mark rather than a short text string.

Either way, decoding goes through ShowBlindWaterMark.

Installing it

ComfyUI Manager: search "ComfyUI Layer Style Advance". Manual:

cd ComfyUI/custom_nodes
git clone https://github.com/chflame163/ComfyUI_LayerStyle_Advance.git

Run install_requirements.bat (portable) or install requirements.txt yourself, then restart. No model download, no API key - this is a local image-processing node, ready to go once the base pack imports cleanly.

Common issues

Watermark won't decode with ShowBlindWaterMark later. By far the most common cause, per the pack's own documentation: the image was saved as JPEG. Blind watermarking here relies on subtle pixel-level information that JPEG's lossy compression destroys - save as PNG, not JPEG, if you need the mark to survive.

Used a photo or logo as watermark_image and it doesn't decode cleanly. This isn't really a bug, it's the design constraint stated in the README - the technique is built around QR-code-style patterns (hard, high-contrast, well-structured black-and-white data), not continuous-tone images. Generate one with the pack's CreateQRCode node instead.

Image went through further editing (resize, heavy compression, format conversion) after watermarking and the mark is gone. Blind watermarks generally don't survive resampling or lossy recompression - embed this as close to your final output step as possible, ideally right before (or via) the save step, not early in a graph with more processing downstream.

Confusing this with a visible watermark tool. If what you actually want is a visible logo or text stamped on the image, this is the wrong node entirely - this is deliberately invisible by design.

Category😺dzNodes/LayerUtility/SystemIO

Inputs (2)

NameTypeDefaultDescription
imageIMAGE
watermark_imageIMAGE

Outputs (1)

NameTypeDescription
imageIMAGE