LayerUtility: Show BlindWaterMark(Advance)
Show BlindWaterMark — recover an invisible watermark from an image
- image
- watermark_image
This is the read side of a watermark you already embedded. Two other nodes in this pack can bury a mark invisibly inside an image: AddBlindWaterMark, which takes an arbitrary image (auto-converted to a square black-and-white pattern - the README recommends using a QR code) and hides it inside your picture, and SaveImagePlus, whose blind_watermark field takes plain text, turns it into a QR code, and hides that instead. ShowBlindWaterMark is what extracts either one back out. No model, no API key - one image in, the recovered watermark pattern out.
How it works
The node takes an image, runs the extraction pass, and hands back whatever pattern was embedded - as an image, not text. That last part matters for how you use it: if what you actually want is the message, not a picture, you're looking at a two-step chain. SaveImagePlus's watermark feature specifically encodes your text as a QR code first, so to get your original string back you run ShowBlindWaterMark to pull the pattern out, then feed that output into DecodeQRCode to turn the QR pattern into readable text. If you used AddBlindWaterMark with your own image as the mark, this node's output is the whole answer - there's no text to decode.
The inputs and outputs that matter
image- the watermarked image you want to check.
Output is a single watermark_image - the recovered pattern, at whatever fidelity the extraction managed.
How to install it
Recommended: ComfyUI Manager, search "ComfyUI Layer Style Advance". Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/chflame163/ComfyUI_LayerStyle_Advance.git
Then run install_requirements.bat / install_requirements_aki.bat, or install requirements.txt and run repair_dependency.bat manually. Restart. No model files needed for this node.
Common issues & troubleshooting
Recovered pattern is garbage, blank, or doesn't decode. The single most likely cause, and it's called out directly in the README: pictures with a blind watermark should be saved as PNG. JPEG's lossy compression destroys the fine, low-amplitude signal an invisible watermark relies on - a mark that decodes perfectly on the original PNG can vanish entirely once the file's been re-saved or re-uploaded through anything that re-compresses it as JPEG.
You never actually embedded a watermark in the first place. This node has no way to tell you "there was nothing here" versus "the signal got destroyed" - both look like a failed or noisy recovery. If you're testing the pipeline end to end, run SaveImagePlus with a known blind_watermark text value, then immediately chain ShowBlindWaterMark → DecodeQRCode on that exact output before doing anything else to the file, so you know the round trip works before you introduce any resaving, resizing, or format changes into the picture.
The image went through any resize or crop between watermarking and checking. Invisible watermarking techniques generally assume the pixel grid is intact - resizing, cropping, or otherwise transforming the image after embedding is a common way to lose the mark even when the file format stays lossless.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| watermark_image | IMAGE | — |