Create S3 Client
Wiring object-storage uploads into ComfyUI
- S3_CLIENT
Create S3 Client is the setup node for the pack's cloud-upload side: it collects an S3-compatible endpoint's credentials and connection details into a single S3_CLIENT object that the sibling Upload Image to S3 node then uses. It does zero uploading itself. Think of it as filling in a config form once and handing the finished config object down the wire.
Why would a ComfyUI workflow touch S3 at all? Because generating on a box with storage but uploading to a shared bucket is a real production pattern. Render on a local GPU machine, ship the finished images to an S3-compatible bucket (Backblaze B2, MinIO, Cloudflare R2, AWS) so a website or another service can pick them up. If you've ever run a batch generation pipeline that ends in "and now put the results where the app can see them," this is the handoff.
The inputs
Every field is a string, and they're exactly what an S3 client config needs:
- endpoint_url - the S3 endpoint. Defaults to Backblaze B2's
https://s3.us-west-004.backblazeb2.com, which tells you the author's default is B2. Point it at any S3-compatible endpoint. - bucket_name / region - your bucket and its region (default
us-west-004). - access_key_id / secret_access_key - your keys. The secret field is rendered as a password input, which is a nice touch.
- public_url_base - the public URL prefix that maps to the bucket (default
https://f004.backblazeb2.com/file/my-comfyui-bucket), used to build publicly shareable links after upload.
One output: S3_CLIENT, which feeds Upload Image to S3.
Install
The pack standard:
cd ComfyUI/custom_nodes
git clone https://github.com/Duanyll/duanyll_nodepack
cd duanyll_nodepack && pip install -r requirements.txt
or ComfyUI Manager → "Duanyll Nodepack" → install → restart. The node itself is pure config (a dict under the hood), but the pack's requirements pull in OpenCV, kornia, insightface, matplotlib, and the Volcengine SDK regardless - and the S3 upload code speaks raw requests, so no boto3 dependency to worry about.
Gotchas
Your credentials live in plain text in the workflow JSON. If you save workflows with secrets baked in and share them, you're leaking your keys - ComfyUI has no built-in secret handling for this, so use a dedicated bucket or pre-signed scoped credentials. And the defaults are Backblaze-shaped, so if you're on AWS or MinIO, every one of the six fields probably needs to change. This is one of those nodes that's quietly dangerous in the wrong hands and quietly useful in the right ones: for a personal automation where a render box uploads to your own bucket, it's the shortest path between generation and the internet.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| endpoint_url | STRING | https://s3.us-west-004.backblazeb2.com | — |
| bucket_name | STRING | my-comfyui-bucket | — |
| region | STRING | us-west-004 | — |
| access_key_id | STRING | YOUR_ACCESS_KEY_ID | — |
| secret_access_key | STRING | YOUR_SECRET_ACCESS_KEY | — |
| public_url_base | STRING | https://f004.backblazeb2.com/file/my-comfyui-bucket | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| S3_CLIENT | S3_CLIENT | — |