Files

Unzip

Extract an archive to real files, then send them downstream — once for the whole archive, or once per file.

action.unzip
FILEUnzip

At a glance

Does
Extracts a .zip and fans out over its contents
Emits
destination, files, fileCount, success — and per file, filePath, fileName, index
Works with
Any readable .zip the flow can reach

Set it up

Archive Path is the .zip to extract — pick the upstream variable that holds it; blank falls back to filePath on the payload. Extract To defaults to a sibling folder next to the archive, which keeps the output out of a watched directory so the flow does not re-trigger on its own work.

The inspector for an Unzip node. Archive path, destination, and the collision rule.
The inspector for an Unzip node. Archive path, destination, and the collision rule.

One extraction feeds two outlets. Contents emits once with the whole archive — the destination folder, a files array, and fileCount — for a single "it's done" action. File fans out, running everything downstream once per extracted file with that file's filePath, fileName and index. A zip of 200 files is a document of 200 pages; wire whichever shape the rest of the flow wants.

Extraction lands in a private temporary folder first. Every entry is checked to stay inside it and symlink entries are rejected, so a malicious archive is caught and discarded before anything reaches the destination you named.

Configure

FieldDefaultWhat it does
Archive Path{{filePath}}The .zip to extract.
Extract To{{directory}}/{{fileName}}Where the contents go.
On CollisionOverwriteOverwrite, Keep both (suffix), or Skip existing.

Output

Every key is available downstream as {{key}}.

KeyTypeValue
destinationStringContents outlet: the extraction folder
filesArrayContents outlet: a file ref for every extracted file
fileCountNumberContents outlet: how many files came out
filePathFileFile outlet: this file's absolute path
fileNameStringFile outlet: this file's name
indexNumberFile outlet: this file's position in the archive, from 0
successBooleanBoth outlets. false on a graceful failure — see below

Example: describe every image in an archive

Directory Changed catches the archive. Unzip fans out over its contents. A Condition keeps the PNGs. An AI node with a vision model describes each one.

Four nodes. One archive in, one description per image out.
Four nodes. One archive in, one description per image out.

Paste this into the Flow Builder to get the same flow:

When a zip lands in my Downloads, unzip it and have a vision model describe every PNG inside.

Good to know

Everyday problems come back as success: false, not a failed run. no_archive_path, archive_not_found and not_a_zip arrive on error with a single payload — not a fan-out — so a Condition can route them.

Only a real safety violation stops the run. A protected archive or destination path, a .. escape, or an entry that tries to escape the extraction folder — including any symlink entry — throws and discards the whole extraction. iCloud Drive and the other cloud folders are allowed.