Nodes/Steganos Node for ComfyUI/Steganos Video Encoder
ComfyUI Node

Steganos Video Encoder

Hide a whole video inside a normal-looking PNG

By wzken·Created 12 months ago·Updated 12 months ago· 0
Steganos Video Encoder
  • images
  • IMAGE
fps16.00
filename_prefixSteganos
usage_notes本节点将视频隐藏在图片中。 它使用一个固定的【test.png】作为封面,并将【整个图像序列】编码为MP4视频,然后将视频压缩成ZIP文件并附加到封面图片末尾。 生成的PNG文件既可以作为普通图片查看,也可以使用'unzip'等工具提取出隐藏的视频文件。

The Steganos Video Encoder is a party trick, and knowing that going in saves you a lot of disappointment. Feed it an image sequence - say, the frames coming out of a VAE Decode at the end of a video workflow - and it encodes them into an MP4, then hides that MP4 inside a normal PNG. The PNG still opens in any image viewer like a plain picture. But run unzip on it and the video falls right out. No special tools on the receiving end needed; any standard archive utility works.

Before we go further, one honest caveat: this is not real steganography. Real steganography hides data inside pixel values (see HIDEAGEM for the password-protected flavor of that in ComfyUI). This node uses the much older and cruder trick of byte concatenation - it appends the video to the end of a PNG file. PNG decoders ignore trailing bytes after the IEND chunk, so the image still displays; ZIP utilities scan for the PK header and happily find your archive. It's security by obscurity. Don't hide anything you actually need secret, and don't call it encryption. Call it a fun way to ship a video in a file that looks like a still.

How it works

Look at the source and the mechanism is refreshingly small. The node takes your images batch, converts it to numpy, and writes the whole sequence to an MP4 with imageio.mimsave(..., codec="libx264") at your chosen fps. That MP4 gets zipped up, and the zip's raw bytes are concatenated onto the end of a static carrier image - test.png, a 501×367 placeholder that ships inside the pack folder. The combined file is saved to your ComfyUI output directory as <filename_prefix>_00000.png.

Inputs and outputs that matter

Three required inputs, and you'll touch all of them:

  • images (IMAGE) - the batch of frames to encode. Wire in whatever you'd normally send to a video save: VAE Decode output, a Load Image Sequence, frames from an image-to-video model.
  • fps (FLOAT, default 16, range 0.1–120) - frames per second for the hidden MP4. Set it to match whatever frame rate your sequence was generated at.
  • filename_prefix (STRING, default "Steganos") - the base name of the output PNG.

There's also an optional usage_notes string, but it does nothing except print its text to your console. Ignore it.

The single output is an IMAGE - but be careful here, because this is where people get tripped up. It is not your frames. The node returns the carrier test.png as an image tensor, so you can chain it to a Preview Image or Save Image node and see the cover. If you're expecting your video frames to come back out, that's not what this does.

Installing it

ComfyUI Manager can find it if you search for "Steganos". Or, the manual way:

cd ComfyUI/custom_nodes
git clone https://github.com/wzken/ComfyUI-Steganos-Node

Then restart ComfyUI. There are no model downloads and no requirements.txt - the pack relies on imageio and imageio-ffmpeg (which provides the ffmpeg binary behind the libx264 encode), and stock ComfyUI already ships both, so it typically works out of the box.

Common issues

  • The MP4 encode fails with a missing codec error. That's the imageio/imageio-ffmpeg dependency surfacing. If you're on a stripped-down environment, pip install imageio imageio-ffmpeg into your ComfyUI's Python environment usually fixes it.
  • You can't find test.png or the node errors out on a missing carrier. The carrier file must sit in the pack's folder. You can replace it with your own cover image - that's the one thing worth customizing, since a 501×367 placeholder makes a boring cover - but keep the filename test.png.
  • The video doesn't come out on the other side. The single biggest gotcha: any service that re-encodes the image strips those trailing zip bytes. Discord, imgur, WhatsApp, an image optimizer - all of them will quietly destroy your hidden video. Send the raw PNG file as-is (email, a file share, a thumb drive) or it will be unrecoverable.

Also worth knowing: the whole thing is a single initial commit (Sept 2025) from a small project, so don't expect updates or bells and whistles. For what it is - a zero-dependency way to smuggle a short video out of ComfyUI inside a still - it works exactly as advertised. Just don't ask it to be more than a trick.

CategorySteganos

Inputs (4)

NameTypeDefaultDescription
imagesIMAGE
fpsFLOAT16.000.1–120
filename_prefixSTRINGSteganos
usage_notesoptSTRING本节点将视频隐藏在图片中。 它使用一个固定的【test.png】作为封面,并将【整个图像序列】编码为MP4视频,然后将视频压缩成ZIP文件并附加到封面图片末尾。 生成的PNG文件既可以作为普通图片查看,也可以使用'unzip'等工具提取出隐藏的视频文件。

Outputs (1)

NameTypeDescription
IMAGEIMAGE