ComfyUI Node

Upload to S3

No boto3 required, R2 and MinIO included

By isekai-sh·Created 9 months ago·Updated 8 months ago· 3
Upload to S3
  • image
  • image
  • url
bucket_name
object_key
access_key_id
secret_access_key
regionus-east-1
endpoint_url
format
quality90
acl

IsekaiS3Upload ships your finished image straight from the graph to S3-compatible storage - AWS S3, Cloudflare R2, DigitalOcean Spaces, Backblaze B2, MinIO, Wasabi, Linode - and returns you the public URL. The headline feature is that it does this with plain HTTP and AWS Signature Version 4, which means no boto3, no extra cloud SDK, no dependency hell. For a custom node in 2026, that's practically a luxury.

How it works. You give it an image, a bucket_name, an object_key (the path/name in the bucket), and credentials. It signs the request itself with SigV4, PUTs the encoded image, and passes the image through untouched on one output while emitting the object's URL on the other. Because it's an output node, it also triggers a preview - the standard wiring is VAE Decode → S3 Upload → Preview, so the upload happens exactly when you'd otherwise save. It compresses before uploading: format is JPEG/PNG/WEBP (default JPEG), quality is 1–100 (default 90, with PNG's quality mapped to PIL's compress level). If your object_key has no extension, it appends one based on the format, so images/output becomes images/output.jpg.

Credentials come from AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables first, with the node's access_key_id / secret_access_key fields as a fallback - and it warns you that credentials typed into node inputs get stored in workflow JSON. It's the same warning the whole pack gives, and it's the right one. The endpoint_url field is how you reach non-AWS services: leave it empty for AWS (with region, default us-east-1), or point it at your R2/Spaces/MinIO endpoint for everything else.

Inputs that matter. Five, realistically:

  • bucket_name and object_key - required, no sensible defaults; these are your target.
  • endpoint_url - the one that makes this node useful beyond AWS.
  • format / quality - set quality to 90-ish for JPEG; lower it when you're uploading thumbs or previews.
  • acl - default private; flip to public-read if the URL needs to be shareable, which it usually does if you're generating the URL to show someone.

Outputs: image (pass-through, for preview/save) and url (STRING, the generated object URL).

Install. Standard pack install: ComfyUI Manager → search "isekai" → install → restart. Or:

cd ComfyUI/custom_nodes
git clone https://github.com/isekai-sh/isekai-comfy-node
cd isekai-comfy-node
pip install -r requirements.txt

Restart; it's under Isekai → Upload. Set the two AWS env vars before launching ComfyUI and you won't be tempted to paste keys into the graph.

Common issues. The most common failure is credentials: missing or wrong keys throw an S3UploadError and the node logs [Isekai] S3 lines to the console - but because this is an output node, the failure can surface as an image that just "didn't save" with a dead URL rather than a loud crash. Check the console. For R2/Spaces remember endpoint_url must be the full region-scoped endpoint, not the dashboard URL, and that R2 buckets still want a region string even though it's cosmetic. The bucket must already exist - the node uploads, it doesn't create buckets. And the usual pack caveats apply: it's a small, barely-known pack, so you're on the README and your own testing for anything exotic. But the SigV4-without-boto3 approach is solid, and if you're on R2 for the free egress, this is a genuinely clean way to get generated images onto a CDN.

CategoryIsekai/Upload

Inputs (10)

NameTypeDefaultDescription
imageIMAGE
bucket_nameSTRING
object_keySTRING
access_key_idoptSTRING
secret_access_keyoptSTRING
regionoptSTRINGus-east-1
endpoint_urloptSTRING
formatoptCOMBO3 options: JPEG, PNG, WEBP
qualityoptINT901–100
acloptCOMBO4 options: private, public-read, public-read-write, authenticated-read

Outputs (2)

NameTypeDescription
imageIMAGE
urlSTRING