Nodes/ComfyUI EncryptMaster/EncryptMaster — Image Cipher → Noise (AES-GCM)
ComfyUI Node

EncryptMaster — Image Cipher → Noise (AES-GCM)

Make an image look like pure static, reversibly

By orion4d·Created 12 months ago·Updated 12 months ago· 5
EncryptMaster — Image Cipher → Noise (AES-GCM)
  • image
  • image
  • out_width
  • out_height
passphrase
associated_data
preserve_widthtrue

Image Cipher → Noise takes a normal image and turns it into an image of random static. Not a blur, not a filter - genuine cryptographic noise where every pixel has been replaced with ciphertext. The result reveals nothing about the original, and only its paired node, Image Decipher ← Noise, plus the right passphrase, can turn it back.

That's a weird capability, so let's be direct about why it's useful. The strongest version of "don't let anyone see this image" isn't a watermark or a blur - it's making the file look like it contains nothing at all. If you're sharing an image through a channel you don't control, or archiving something sensitive, an encrypted-noise PNG is about as close to "invisible" as a picture gets while still being a picture. And unlike the stego nodes, which hide a small payload inside an innocent-looking carrier, this one transforms the image itself - the noise file is the encrypted image, not a carrier hiding one.

How it works

Every pixel of the input is read as raw bytes, then encrypted with AES-256-GCM using a key derived from your passphrase via scrypt (N=2^14, r=8, p=1). The ciphertext is prefixed with a 28-byte header - magic bytes EMIMG1, the original width/height, and the cipher length - plus the salt and nonce, and the whole payload is dropped into a buffer of cryptographically random bytes.

Because ciphertext is incompressible, the output is usually a bit bigger than the input. With preserve_width on (the default), the node keeps your original width and grows the height just enough to fit the overhead - so you may get back a slightly taller image, and out_width / out_height tell you the actual output size. Flip preserve_width off and it produces a near-square noise image instead, which looks even more like plain static.

Inputs and outputs that matter

  • image (IMAGE) - whatever you want to disappear.
  • passphrase (STRING, masked) - the only thing that can ever get it back. No recovery, so don't lose it.
  • associated_data (STRING, optional) - authenticated metadata; it must match at decipher time or decryption fails. Use it as a version tag.
  • preserve_width (BOOLEAN, default true) - keep the source width and grow height, or go near-square.

Outputs are image (the noise), plus out_width and out_height (INT) so you know what you actually produced.

Installing it

Part of the ComfyUI EncryptMaster pack - install once, get all nine nodes. Try ComfyUI Manager (search "ComfyUI EncryptMaster"), or:

cd ComfyUI/custom_nodes
git clone https://github.com/orion4d/Comfyui_EncryptMaster

Then install the real dependencies (the repo ships no requirements.txt, so this is the list that actually installs):

pip install cryptography pillow numpy

Restart ComfyUI. No model downloads.

Where people get burned

  • PNG or TIFF, always. The noise image's bytes are the ciphertext. Save it as JPEG even once and you've destroyed the payload permanently - decipher will fail with a header or authentication error. This is the whole ballgame.
  • Keep the whole image. The cipher grows the height to fit overhead. Cropping or resizing the noise file is the same as deleting bytes of ciphertext.
  • Same passphrase, same associated_data. GCM is authenticated, so a mismatch fails cleanly - but "fails cleanly" still means you get a black 1×1 image and an error report out of the decipher node. Check that report.
  • Platforms that re-encode images (most social media) will silently break a noise file. Don't post these anywhere that touches pixels.

It pairs with the pack's Text Cipher in spirit - same crypto stack, different payload. If you only need to hide a small secret and keep the cover image looking like a real image, that's the stego nodes' job. This one is for when you want the whole image to be the secret.

CategoryEncryptMaster

Inputs (4)

NameTypeDefaultDescription
imageIMAGE
passphraseSTRING
associated_dataoptSTRING
preserve_widthoptBOOLEANtrue

Outputs (3)

NameTypeDescription
imageIMAGE
out_widthINT
out_heightINT