ApoStudio Load Image
An image loader that also hands Chat the picture — and fixes your sideways phone photos
- image
- mask
- width
- height
- filename
ComfyUI already ships a Load Image node, so why does ApoStudio bother? Because this one was built for the captioning use case: it loads an image the way you'd feed one to an LLM, and it hands you more than a tensor on the way out. Wire it into ApoStudio Chat's image input and you've got image captioning - an LLM reading your picture and describing it, which is the same job people use for LoRA captions and img2img prompt seeding.
How it works. It reads from ComfyUI's standard input/ directory using the framework's own file handling, so you get the native dropdown plus the "choose file to upload" button - upload something and it lands in input/ automatically. Supported formats: jpg, jpeg, png, webp, bmp, tiff, and gif. The one genuinely useful extra over the core loader is EXIF orientation auto-correction (exif_transpose under the hood): a photo taken on a phone often stores its rotation in EXIF metadata rather than in the pixels, so without this fix your upright-looking image loads sideways. This node just fixes it.
Inputs and outputs. One input: image (dropdown + upload button). The outputs:
image- the IMAGE tensor, ready for Chat'simagesocket (or anything else that eats an IMAGE)mask- the alpha channel as a MASK, or solid white if the image has no transparencywidth/height- dimensions in pixels (handy if you want to size conditioning to the input)filename- the base filename, useful if you're building filenames or logging downstream
There's a subtle correctness detail: the node detects file changes by content hash, so replacing example.png with a different example.png of the same name still triggers a rerun. That's the kind of thing that quietly bites people on other loaders - swap the file, hit run, nothing happens. Not here.
Install. Same as the rest of the pack - ComfyUI Manager (search "ApoStudio") or:
cd ComfyUI/custom_nodes
git clone https://github.com/apoloniart/ApoStudio
pip install -r custom_nodes/ApoStudio/requirements.txt
Just requests and Pillow (the image work uses Pillow). Restart, find it under the ApoStudio category.
Gotchas. A gif loads only its first frame - the README is explicit about that, so don't reach for this node for animated inputs. Images must live in (or be uploaded to) input/. And remember the loader itself has no vision: a captioning workflow needs a vision-capable model on your LLM server, or Chat will happily describe a PNG of base64 noise. If you only need the tensor, core Load Image is fine; if you want the mask, dimensions, filename, and EXIF fix, this is the one.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| image | COMBO | 1 options: example.png |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| mask | MASK | — |
| width | INT | — |
| height | INT | — |
| filename | STRING | — |