Nodes/ComfyS3/Load Image from S3
ComfyUI Node

Load Image from S3

A LoadImage whose dropdown reads the bucket

By TemryL·Created 3 years ago·Updated 2 years ago· 62
Load Image from S3
    • IMAGE
    • MASK
    image

    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.

    CategoryComfyS3

    Inputs (1)

    NameTypeDefaultDescription
    imageCOMBO0 options:

    Outputs (2)

    NameTypeDescription
    IMAGEIMAGE
    MASKMASK