Ino S3 Upload Image
Shove the image you just generated straight into S3
- image
- image
- success
- message
- file_name
- s3_image_path
The endgame of a lot of automated ComfyUI setups isn't a PNG on your desktop - it's a PNG in the cloud, where a website, another machine, or a teammate can reach it. Ino S3 Upload Image is the node that does that: it takes the IMAGE tensor straight from your sampler, encodes it as a PNG in memory, and uploads it to S3 - no file first saved to disk, no manual step. Wire your final output into this and the upload is just part of the run.
It's part of ComfyUI Ino Nodes (nobandegani/ComfyUI-InoNodes), the 125+-node V3-schema pack, and one of its 16 S3 helpers - the pack's biggest feature area, clearly built for production pipelines that ship results to object storage.
How it works
Inputs:
enabled- the pack-wide toggle.image- the IMAGE tensor to upload. Only one image at a time - the node explicitly rejects a batch larger than 1, so feed it a single frame (or loop over your batch).s3_path_key- the folder/prefix in the bucket, e.g.results/job_17/. The filename is appended to this.s3_config- optional; the config string fromIno S3 Config, or leave empty and rely on env vars.compress_level- PNG compression, 1–9 (default 4). Higher = smaller file, slower encode.unique_file_name- default ON. When on, the uploaded file gets a unique timestamp-based name (so concurrent runs never collide). Turn it off and providefilenameto control the name.filename- used whenunique_file_nameis off; the node takes the stem and appends.png.
Outputs: image (passes your tensor through, handy for chaining), success, message, file_name (the actual uploaded filename), and s3_image_path (the full key in the bucket, i.e. s3_path_key + filename) - that last one is what you'd hand to a database or an API that needs to reference the stored object.
Why this beats save-then-upload
The pack's Ino Save Images plus a generic uploader works, but this node skips the intermediate file: it encodes to PNG bytes in memory and PUTs them directly. Fewer moving parts, no orphan files to clean up, and the unique-name default makes it safe to run many workflows in parallel without collisions. If you've ever watched temp folders fill with files that were only ever meant to be uploaded, you'll appreciate the design.
Common issues
- Batch > 1 → upload refused. Check your upstream isn't passing a full batch; this is a one-image node by design.
- Missing credentials →
success: False. The pack's S3 layer validates keys before touching the network; a clear message tells you what's missing. unique_file_nameon + you expected your filename - you'll get a random-looking name. That's the feature, not a bug.
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. The pack is niche - people do run S3-in-ComfyUI setups (cloud GPU portability is the recurring theme on Reddit), but this particular pack barely registers in community threads. For uploading finished images to object storage in one step, though, it's exactly right.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| enabled | BOOLEAN | true | — |
| image | IMAGE | — | |
| s3_path_key | STRING | — | |
| 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 |
| compress_levelopt | INT | 41–9 | — |
| unique_file_nameopt | BOOLEAN | true | — |
| filenameopt | STRING | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| success | BOOLEAN | — |
| message | STRING | — |
| file_name | STRING | — |
| s3_image_path | STRING | — |