Attome S3 Load Image
Load an image from S3 like it was sitting in your input folder
- s3_config
- image
- mask
Every ComfyUI workflow starts with a local file. Attome S3 Load Image is the node that breaks that habit: it pulls a PNG, JPEG, or WEBP straight out of an S3 bucket (or any S3-compatible store) and hands ComfyUI a perfectly normal IMAGE tensor, as if you'd dragged the file into the input folder. Same node, same downstream wiring - the only difference is where the bytes came from.
It's part of the small Comfyui_Attome_S3 pack, and it's the natural partner to the pack's save-image node: generate → push to the bucket → pull it back in a completely different machine or workflow. That's the actual use case that makes these nodes worthwhile - shared, central storage instead of praying the right file is in the right input/ folder on every box you run.
How it works
Under the hood it's boto3: get_object(Bucket, Key) fetches the bytes, PIL decodes them, and the image is normalized to ComfyUI's BHWC float32 format (values 0–1). If the image has an alpha channel, it splits that out into the mask output - inverted, 1 - alpha, per ComfyUI's convention. A fully opaque PNG gives you a zero mask. A transparent one gives you something you can feed straight into inpaint nodes or use as a trim.
The one bit of magic worth knowing: if s3_key is empty, the node doesn't error. It returns a 512×512 black image and a zero mask instead. That's deliberate - it lets you leave S3 resources optional in a workflow without the downstream nodes exploding on shape mismatches. It also means "why is my image black?" is the #1 way people discover they left the key empty.
Inputs and outputs
s3_key(required) - the object path in the bucket, e.g.images/input.png. No leading slash; it's a key, not a filesystem path.s3_config(optional) - wire this from the Attome S3 Config node to override theenv.txtdefaults.- Outputs:
image(IMAGE) andmask(MASK), both standard types that plug into KSampler img2img, ControlNet preprocessors, IPAdapter, or anything else that eats images.
Install
ComfyUI Manager: search "Comfyui_Attome_S3". Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/attome-ai/Comfyui_Attome_S3
cd Comfyui_Attome_S3
pip install -r requirements.txt
Restart ComfyUI afterward. No models to download; the heavy hitters in requirements.txt are boto3 (required) and opencv-python/torchaudio (only needed by the video and audio nodes, but the file installs them all).
Troubleshooting
The usual suspects, in order: Access Denied → IAM user lacks s3:GetObject on that bucket, or the region/endpoint_url don't match the bucket's. Black 512×512 output → empty s3_key, or you genuinely downloaded a black image. Slow first load → it's a network fetch, so latency scales with object size; a 4K PNG out of a cold bucket takes a beat. And if you're pointing at MinIO or R2 instead of AWS, don't forget the config node's endpoint_url - leaving it blank makes boto3 try AWS and fail on a bucket that lives somewhere else entirely.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| s3_key | STRING | path/to/image.png | — |
| s3_configopt | S3_CONFIG | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| mask | MASK | — |