Nodes/Comfyui_Attome_S3/Attome S3 Save Image
ComfyUI Node

Attome S3 Save Image

Send your renders to S3 instead of the output folder

By attome-ai·Created 9 months ago·Updated 8 months ago· 4
Attome S3 Save Image
  • image
  • s3_config
  • s3_uris
s3_keypath/to/output.png
formatPNG
quality95
save_metadatatrue

This is the flagship of the Comfyui_Attome_S3 pack. Where the default Save Image node drops a PNG into your local output folder, Attome S3 Save Image encodes the image in memory and uploads it to a bucket, then hands you back the s3://bucket/key URI. If you've ever run ComfyUI across a few machines, wanted a web gallery of your generations, or needed outputs somewhere a queue worker can grab them, you already know why that's useful.

It's a proper batch saver, too. Feed it a batch of images and it flattens them, saves each one, and returns a list of URIs - one per file - so downstream nodes can do something with each path.

How it works

The mechanism is boring in the best way: boto3 put_object with the right content type (image/png, image/jpeg, image/webp). The parts people actually trip on:

  • Extension auto-matching. Tell it format: JPEG with s3_key: outputs/result.png and it saves outputs/result.jpg. It rewrites the extension to match the format rather than trusting what you typed.
  • Dynamic keys. You can put placeholders in s3_key: %date%, %time%, %random%, %index%, %count%. So renders/%date%/batch_%index%.png becomes dated, numbered files. If you use no placeholder, it still appends _1, _2, ... so batch saves never collide.
  • Metadata. With save_metadata: true (default), PNGs get the full workflow embedded as pnginfo text chunks; JPEG/WEBP get it in EXIF. Set it to false and you get clean files. For production outputs or anything you'll share publicly, false is the move - a true default quietly embeds your entire workflow graph into every file you upload.

Inputs and outputs

  • image (required) - the IMAGE tensor from your sampler/VAE decode.
  • s3_key (required) - bucket-relative path, placeholders allowed.
  • s3_config (optional) - from the Attome S3 Config node, or leave unwired to use env.txt defaults.
  • format - PNG, JPEG, or WEBP. quality (1–100, default 95) applies to JPEG and WEBP; PNG ignores it since it's lossless.
  • Output: s3_uris - a list of strings, one per saved file.

Install and gotchas

ComfyUI Manager: search "Comfyui_Attome_S3", or:

cd ComfyUI/custom_nodes
git clone https://github.com/attome-ai/Comfyui_Attome_S3
cd Comfyui_Attome_S3
pip install -r requirements.txt

Then restart. No model downloads - the pack is all Python and boto3.

Two things that bite in practice. First, Access Denied on the upload is almost always IAM: the user needs s3:PutObject on the bucket, and if you're on MinIO/R2/Spaces you must set endpoint_url in the config - blank endpoint means boto3 tries AWS and fails. Second, the credential-leak angle again: this node embeds workflow JSON in files by default, and if you typed real AWS keys into a Config node, those keys ride along in the metadata. Keep keys in env.txt, set save_metadata: false for anything leaving your hands, and this becomes a genuinely clean way to ship renders to the cloud.

CategoryAttome/S3

Inputs (6)

NameTypeDefaultDescription
imageIMAGE
s3_keySTRINGpath/to/output.png
s3_configoptS3_CONFIG
formatoptCOMBOPNG3 options: PNG, JPEG, WEBP
qualityoptINT951–100
save_metadataoptBOOLEANtrue

Outputs (1)

NameTypeDescription
s3_urisSTRING