Load Image from S3
A LoadImage whose dropdown reads the bucket
- IMAGE
- MASK
LoadImageS3 is the ComfyS3 pack's replacement for ComfyUI's core LoadImage - except the dropdown is populated from your S3 bucket instead of your local input folder. Same job, different source of truth. If your images live in the cloud, this is the node that hands them to the graph.
Here's the workflow it's built for: you have a shared bucket that several machines read from, or a server that ingests reference images uploaded by other people or other tools. Rather than syncing images down to local disk and loading them with the normal node, you load straight from the bucket and every machine sees the same set of files. The output side is SaveImageS3 if you want the round trip to stay in the cloud too.
How it works
The mechanics mirror core LoadImage closely enough that it's a drop-in swap. When the graph builds, the node lists objects under S3_INPUT_DIR (from the pack's .env) and fills its one input - the image dropdown - with those filenames. On execution it downloads the selected file to your local input folder, opens it with PIL, and does the standard ComfyUI image dance: applies EXIF orientation, converts to RGB, normalizes to floats. If the file is animated (a GIF, say) it stacks the frames into a batch; if it has an alpha channel, that becomes the mask.
The outputs are exactly what core LoadImage gives you:
- IMAGE - the tensor batch, ready to wire into a VAE encode, ControlNet preprocessor, or whatever comes next.
- MASK - the alpha channel as a mask if the image has one, or a blank 64×64 zero mask if it doesn't.
Because the interfaces match, you can usually swap LoadImageS3 into an existing workflow without touching anything downstream.
Installing and configuring the pack
ComfyS3 installs like any custom node - Manager search for "ComfyS3" (author TemryL), or:
cd ComfyUI/custom_nodes
git clone https://github.com/TemryL/ComfyS3
cd ComfyS3
pip install -r requirements.txt # boto3==1.34.32, python-dotenv==1.0.1
Restart, then create .env in custom_nodes/ComfyS3/:
S3_REGION=us-east-1
S3_ACCESS_KEY=your_access_key
S3_SECRET_KEY=your_secret_key
S3_BUCKET_NAME=your-bucket
S3_INPUT_DIR=input
S3_OUTPUT_DIR=output
S3_ENDPOINT_URL and S3_ADDRESSING_STYLE are optional for S3-compatible storage. Note that S3_INPUT_DIR is the folder the loader lists - put your images there.
Common issues
Three gotchas worth knowing. First, this is not a "no local disk" solution: every run downloads the image into your local input folder and leaves it there. The bucket is the source of truth, but your disk still ends up with a copy, so you'll occasionally want to clear that folder out.
Second, the dropdown only populates if the bucket is reachable when the graph builds. If the credentials are wrong or the network is down, you get an empty list and a ComfyS3 - ERROR line in the console - the S3 client is constructed at node load, so a bad .env breaks the whole pack up front.
Third, there's no upload button on the widget - the picker explicitly disables image upload, unlike core LoadImage. To get images into the bucket you use your own tooling or the pack's UploadFileS3 node. And since downloads happen on every run, batch workflows that reload the same images will re-download them each time - fine on a fast connection, annoying on a slow one.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| image | COMBO | 0 options: |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |
| MASK | MASK | — |