Nodes/ComfyUI Ino Nodes/Ino S3 Upload Image
ComfyUI Node

Ino S3 Upload Image

Shove the image you just generated straight into S3

By nobandegani·Created about a year ago·Updated 2 months ago· 6
Ino S3 Upload Image
  • image
  • image
  • success
  • message
  • file_name
  • s3_image_path
enabledtrue
s3_path_key
s3_config{"access_key_id": "", "access_key_secret": "", "bucket_name": "", "endpoint_url": "", "region_name": ""}
compress_level4
unique_file_nametrue
filename

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 from Ino 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 provide filename to control the name.
  • filename - used when unique_file_name is 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_name on + 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:
    cd ComfyUI/custom_nodes
    git clone https://github.com/nobandegani/ComfyUI-InoNodes.git
    cd ComfyUI-InoNodes
    pip install -r requirements.txt
    Then restart ComfyUI.

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.

CategoryInoS3Helper

Inputs (7)

NameTypeDefaultDescription
enabledBOOLEANtrue
imageIMAGE
s3_path_keySTRING
s3_configoptSTRING{"access_key_id": "", "access_key_secret": "", "bucket_name": "", "endpoint_url": "", "region_name": ""}you can leave it empty and pass it with env vars
compress_leveloptINT41–9
unique_file_nameoptBOOLEANtrue
filenameoptSTRING

Outputs (5)

NameTypeDescription
imageIMAGE
successBOOLEAN
messageSTRING
file_nameSTRING
s3_image_pathSTRING