Nodes/MKRShift_Nodes/Invisible Image Watermark
ComfyUI Node

Invisible Image Watermark

Embed a text signature as inaudible image noise

By criskb·Created 7 months ago·Updated 5 months ago· 0
Invisible Image Watermark
  • image
  • image
  • summary
payload_textMKRSHIFT
strength0.0100
seed1337
channelblue

Some watermarks you want to see; some you want to detect. MKRInvisibleImageWatermark is the second kind - it hides your payload text inside the image as a deterministic noise pattern so subtle you won't see it, and consistent enough that the same payload always produces the same pattern. It's the image half of the pack's invisible-watermark pair, and the honest way to describe it is as a provenance marker: a fingerprint you can correlate back to, not a copy-protection scheme.

How it works

Take your payload_text and a seed, derive a numeric signature from them, and use that signature to drive a pseudorandom generator. Each pixel of one channel gets a tiny plus-or-minus nudge (strength, default 0.01 - one percent of full range). Because the same payload + seed always yields the same pattern, you can generate the reference pattern later and correlate it against an image to check "is this the image I watermarked, or a derivative of it?" That's the mechanism, and it's worth understanding because it explains every limitation.

The channel pick (default blue) decides where the pattern hides. Blue is the default because the human visual system is least sensitive to blue - you can bury more energy there before it's visible. red and green sit more visibly; luma spreads the nudge across all three channels evenly.

Inputs

  • image - required. The whole batch is watermarked, with a per-frame bit variation derived from the signature.
  • payload_text - default MKRSHIFT. This is the identity you embed.
  • strength - 0.0005 to 0.05, default 0.01. The single most important dial: too low and it's fragile to any processing, too high and it starts to show as faint noise on flat areas.
  • seed - default 1337. Part of the signature key - same payload, different seed, different pattern.
  • channel - blue/green/red/luma.

Outputs

  • image - the watermarked batch, same size.
  • summary - the signature, payload length, strength, and channel used, so you can record what you embedded and how.

Installing it

Part of the pack:

# ComfyUI Manager: search "MKRShift Nodes", install, restart.
# or:
cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes
# restart ComfyUI

No extra dependencies, no models.

The honest limitations - read this before you trust it

This is the important part, and it's easy to over-trust this kind of node. The mechanism is a per-pixel noise nudge in a single channel. That means:

  • It won't survive lossy processing. Resize, JPEG compression, or any serious re-encode will smear the pattern into noise. This is a fingerprint for a file you control, not a way to track images through social media.
  • It's keyed, not encrypted. Anyone who knows the algorithm, payload, and seed can reproduce or strip the pattern. That's fine for provenance, useless for adversarial protection.
  • This pack doesn't ship a decoder for it. There's no extraction node in MKRShift that reads the signature back out of an image - detection requires you to reproduce the reference pattern externally and correlate. Keep that in mind; the watermark is a marker you can verify against, not an automated readout.

Where it genuinely helps: proving a specific render is yours, detecting whether someone didn't change the pixels much, or watermarking deliverables where a visible mark would ruin the art. For keeping a batch of full-res master files distinguishable from copies, it's a clean, invisible, deterministic solution. For anything stronger - think litigation-grade forensic marking that survives compression - you're in the territory of dedicated steganography/robust-marking tools, not a single-channel noise nudge.

CategoryMKRShift Nodes/Media/Watermark

Inputs (5)

NameTypeDefaultDescription
imageIMAGE
payload_textSTRINGMKRSHIFT
strengthFLOAT0.01000.0005–0.05
seedINT13370–2147483647
channelCOMBOblue4 options: blue, green, red, luma

Outputs (2)

NameTypeDescription
imageIMAGE
summarySTRING