Zip Compress
Bundle a batch of ComfyUI outputs into one zip instead of 200 loose PNGs
- images
- temp_dir
If you've ever run a batch job in ComfyUI and ended up with an output folder full of ComfyUI_00001_.png through ComfyUI_00347_.png, you already know the problem this node solves. Zip Compress takes whatever images hit it and packs them into a single .zip in your output directory instead of leaving a scatter of individual files. It's a small node from a small pack - hmwl/ComfyUI_zip, three nodes total, nothing fancy - but "give me one file to download instead of three hundred" is exactly the kind of unglamorous problem worth having a dedicated node for, especially if you're running ComfyUI somewhere you don't have casual filesystem access, like an API worker or a hosted instance.
How it actually behaves (the part that trips people up)
Wire an IMAGE output into it, set a filename_prefix, run the graph. Each image gets written out as a temp PNG, added to a zip, then the temp PNG is deleted immediately - so the zip is the only thing that survives. Straightforward so far.
Here's the part that isn't obvious from the node itself: the node tracks its own state per graph position, and it does not start a fresh zip every time you hit run. If you re-queue the same workflow, it reuses the same temp folder and the same zip file, appending new images with incrementing filenames (image_00000.png, image_00001.png, and so on) rather than resetting. That state only clears when the temp folder disappears - either you restart ComfyUI, or you delete it yourself (the companion Clean Folders node in this same pack is built for exactly that). If you're wondering why your zip has images from three separate runs mixed together, that's why - it's not a bug, it's just not documented anywhere, because it isn't documented anywhere at all.
The inputs and output that matter
Only two inputs, both required:
images- theIMAGEinput. Wire in whatever you want zipped; anything that outputs an image batch works.filename_prefix- aSTRING, defaults to"ComfyUI". This becomes the start of the zip's filename ({prefix}_{timestamp}.zip) - the timestamp is set once, the first time the node runs for that graph position, and stays fixed across re-queues thanks to the behavior above.
The single output is temp_dir (STRING) - but don't mistake it for the zip's location. It's just the name of the scratch folder the node used while building the zip, not the zip's path. Its real use is downstream: feed it straight into Clean Folders' output_path input so you can sweep that scratch folder away once you're done, rather than typing the folder name by hand. The zip file itself shows up as a downloadable link on the node after it runs, sitting in your normal ComfyUI output directory.
Installing it
Easiest path is ComfyUI Manager - search ComfyUI Zip (or the repo name, ComfyUI_zip), install, restart. By hand it's the usual:
cd ComfyUI/custom_nodes
git clone https://github.com/hmwl/ComfyUI_zip
Restart ComfyUI afterward. No model downloads, no heavy dependencies - it leans on things ComfyUI already ships (torch, PIL, numpy). Worth knowing: the compress module imports matplotlib at the top of the file despite never actually using it anywhere in the code - dead leftover from whoever wrote it. In practice matplotlib is almost always present already as a transitive dependency of something else in your environment, so this rarely bites, but if this specific node fails to even load with a matplotlib import error, that's why.
Where people get burned
The accumulation behavior above is the big one - if your zip keeps growing across runs when you expected a clean slate each time, delete the temp folder (or restart ComfyUI) between runs, or wire Clean Folders in after this node to reset the state automatically.
Second: this is a genuinely tiny pack - nine stars, one author, last touched over a year ago. ComfyUI has no code review or sandboxing for custom nodes at all, so installing anything here means trusting arbitrary Python the same way you would with any node - this one's just short enough that you can actually read the whole thing yourself in about five minutes if you want to check.
Third, a UX nit rather than a bug: this node doesn't preview your images anywhere in the ComfyUI interface - it only zips them. If you also want thumbnails in the UI, run a Preview Image or Save Image node in parallel off the same source, since Zip Compress won't show you anything but the final zip link.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| filename_prefix | STRING | ComfyUI | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| temp_dir | STRING | — |