EncryptMaster — Image Cipher → Noise (AES-GCM)
Make an image look like pure static, reversibly
- image
- image
- out_width
- out_height
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.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| passphrase | STRING | — | |
| associated_dataopt | STRING | — | |
| preserve_widthopt | BOOLEAN | true | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| out_width | INT | — |
| out_height | INT | — |