Nodes/ComfyUI-ZipOutput/Zip Output Folder
ComfyUI Node

Zip Output Folder

Zip your whole output folder without touching a terminal

By fudosanit·Created 9 months ago·Updated 9 months ago· 0
Zip Output Folder
    • full_path
    • filename_only
    seed0
    clear_previous_zipstrue

    You're on a RunPod box or a Colab notebook, you've generated 200 images over an afternoon, and now you face the worst part of cloud ComfyUI: downloading them one at a time through a file manager. Zip Output Folder is the node for that exact moment. It lives at the end of your workflow, and when you hit Queue, it walks your whole output/ folder and tucks every file into a single timestamped zip you grab once. Nothing else in this pack - it's a one-node, no-dependency utility, which is honestly refreshing.

    It's worth being clear about the trade before you install it: if you're comfortable with SSH, zip -r on a shell does the identical job in seconds. This node is for the "everything happens in the browser" crowd - no terminal, no docker exec, just a node that runs like any other. That's a genuinely real use case on ephemeral cloud instances, where your disk evaporates the moment you stop paying for it.

    How it works

    Read the source and there's no magic. On every execution the node asks ComfyUI where output/ lives (folder_paths.get_output_directory()), walks it recursively with rglob("*"), and writes everything into a ZIP_DEFLATED archive named output_YYYYMMDD_HHMMSS.zip. That's it - standard library zipfile, no model files, no extra deps.

    Three deliberate details in there:

    • Zip-of-zip prevention. The writer skips any .zip it finds, and skips the archive it's currently writing, so you never get a zip inside a zip. If the node's naming scheme is the only zip source in your folder, you're safe by default.
    • It zips everything, not just images. Subfolders from Save Image's filename_prefix (see the file-save docs in the KB) get nested into the archive preserving their relative paths, and any loose non-image files come along too. Great if your output folder is clean, annoying if you've dumped random stuff in there - see below.
    • The timestamp name. That's what makes filename_only useful: you can construct a direct download URL or drag the one file out of the RunPod file browser instead of fifty thumbnails.

    The two inputs

    The info_schema is minimal, and one of them is a trap:

    • seed - functionally does nothing. It's not read anywhere in the zip logic; it exists to break ComfyUI's node cache. Because the node has no IS_CHANGED method, ComfyUI skips re-running it when its inputs look unchanged - and an unchanged seed looks unchanged. Leave the seed's control_after_generate on randomize (the default) so every queue makes a fresh archive. If you flip it to fixed to "lock" things, the node silently returns last run's zip path.
    • clear_previous_zips (default true) - before making the new zip, it deletes every .zip in your output folder. Not just ones it made. If you keep other archives in there, set this to false or watch them vanish. It's the disk-space-saver for capacity-limited pods, and it works - but it's a shotgun, not a scalpel.

    Outputs

    Two STRINGs: full_path (the absolute path on the server, e.g. /workspace/ComfyUI/output/output_20260823_153000.zip) and filename_only (output_20260823_153000.zip). Wire either into a text-display node for convenience, but honestly most people just read them off the console or the file browser. The zip lands in output/ either way.

    Install

    Via ComfyUI Manager, search "ComfyUI-ZipOutput" and install. Or the manual way:

    cd ComfyUI/custom_nodes/
    git clone https://github.com/fudosanit/ComfyUI-ZipOutput.git
    

    Then restart ComfyUI. There are no dependencies beyond Python's stdlib, so that's the whole install - no torch extras, no requirements.txt to fight.

    Gotchas

    • Timing matters. The zip captures whatever is on disk when the node runs, so place it after your Save Image nodes and give the queue a chance to finish writing. Images from a later batch won't be in it.
    • The seed cache trap from above is the #1 way people think this node is broken. Keep the seed randomized.
    • The zip deletion is ruthless when clear_previous_zips is on. If you're mid-batch and want an archive per run, turn it off - the zip-of-zip exclusion still protects you from nesting.

    It's not clever, it's not overhyped, and it won't impress anyone. But on a rented box with a finite disk, it's the difference between grabbing one file and spending an hour in a file browser. That's the whole pitch.

    CategoryCustom

    Inputs (2)

    NameTypeDefaultDescription
    seedINT00–18446744073709550000
    clear_previous_zipsBOOLEANtrue

    Outputs (2)

    NameTypeDescription
    full_pathSTRING
    filename_onlySTRING