Attome S3 Save Image
Send your renders to S3 instead of the output folder
- image
- s3_config
- s3_uris
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: JPEGwiths3_key: outputs/result.pngand it savesoutputs/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%. Sorenders/%date%/batch_%index%.pngbecomes 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 aspnginfotext chunks; JPEG/WEBP get it in EXIF. Set it tofalseand you get clean files. For production outputs or anything you'll share publicly,falseis 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 useenv.txtdefaults.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.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| s3_key | STRING | path/to/output.png | — |
| s3_configopt | S3_CONFIG | — | |
| formatopt | COMBO | PNG | 3 options: PNG, JPEG, WEBP |
| qualityopt | INT | 951–100 | — |
| save_metadataopt | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| s3_uris | STRING | — |