Ino S3 Sync Folder
Mirror a whole folder to S3 — or pull it back — like rsync for your bucket
- success
- message
- rel_path
- abs_path
- downloaded
- uploaded
- skipped_unchanged
- failed
- removed_local
- removed_remote
- errors
The other S3 nodes move single objects. Ino S3 Sync Folder moves everything - a whole local folder up to S3, or a whole bucket prefix down to disk, with concurrency, change detection, and a full accounting of what happened. It's the pack's answer to "I don't want to upload 200 images one by one." If you're backing up a run's outputs or restoring a job's inputs on a fresh cloud box, this is the node you want.
It's part of ComfyUI Ino Nodes (nobandegani/ComfyUI-InoNodes), the 125+-node V3-schema pack, and the heaviest of its 16 S3 helpers. It's also an output node, so it runs even if nothing consumes its results - which is what you want for a "do the sync, then tell me about it" tool.
How it works
The key input is sync_local, which picks the direction. Despite the name, on means download (S3 → local), off means upload (local → S3) - the toggle label spells it out: "Download (S3->local)" / "Upload (local->S3)". Default is on (download).
Other inputs:
enabled- the pack-wide toggle.s3_key- the bucket prefix (folder) to sync with.parent_folder/folder- the local side, via the standardinput/output/tempdropdown plus subfolder (defaultsync/).s3_config- optional; config string or env vars.concurrency- how many transfers run in parallel (1–10, default 5). Higher is faster on many small files, but harder on the network.delete- the dangerous one, and the tooltip is explicit: if on, orphan files on the destination side get removed, rsync-style. Defaults off. Only turn it on when you deliberately want one-way mirroring - it's the difference between "make them match" and "nuke whatever isn't in the source."
Outputs: success, message, rel_path, abs_path, then a full scoreboard - downloaded, uploaded, skipped_unchanged, failed, removed_local, removed_remote, and errors (a string of what went wrong). The skipped-unchanged count is the nice touch: the sync detects files that already match and skips them, so re-running the same sync is cheap.
When you'd use it
Two patterns dominate: upload at the end (ship an entire output folder to S3 for archival or delivery) and download at the start (restore a job's inputs from the bucket onto a fresh machine - the classic cloud-GPU move). The change detection means you can re-run the sync as a safety net without re-transferring everything.
Common issues
deleteis a loaded word. Leave it off until you're sure. With it on, files on the destination that aren't in the source get deleted - there's no trash can in S3 or in your folder.- Direction confusion.
sync_localon = download. Everyone reads this backwards once; the toggle label is your friend. - Counts as your source of truth. If
failedis non-zero, don't assume the sync completed - checkerrors.
Installing it
ComfyUI Ino Nodes installs like any custom node pack:
- ComfyUI Manager (easiest): search for "ComfyUI Ino Nodes", install, restart.
- Manual:
Then restart ComfyUI.cd ComfyUI/custom_nodes git clone https://github.com/nobandegani/ComfyUI-InoNodes.git cd ComfyUI-InoNodes pip install -r requirements.txt
Requires inopyutils and a current ComfyUI. It's a niche pack with almost no Reddit footprint - the S3-with-ComfyUI pattern itself gets plenty of discussion, but this pack rarely shows up in it. For folder-sized transfers to object storage, though, it's the most complete tool in the pack.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| enabled | BOOLEAN | true | — |
| s3_key | STRING | — | |
| parent_folder | COMBO | 3 options: input, output, temp | |
| folder | STRING | sync/ | — |
| sync_local | BOOLEAN | true | — |
| s3_configopt | STRING | {"access_key_id": "", "access_key_secret": "", "bucket_name": "", "endpoint_url": "", "region_name": ""} | you can leave it empty and pass it with env vars |
| concurrencyopt | INT | 51–10 | — |
| deleteopt | BOOLEAN | false | If True, delete orphan files on the destination side (rsync-style). Defaults to False — set to True only when you intentionally want one-way mirroring. |
Outputs (11)
| Name | Type | Description |
|---|---|---|
| success | BOOLEAN | — |
| message | STRING | — |
| rel_path | STRING | — |
| abs_path | STRING | — |
| downloaded | INT | — |
| uploaded | INT | — |
| skipped_unchanged | INT | — |
| failed | INT | — |
| removed_local | INT | — |
| removed_remote | INT | — |
| errors | STRING | — |