πΌ Load Image
The loader that hands you the metadata as JSON
- Image
- Metadata
- Path
- Format
ComfyUI's core Load Image gives you pixels and that's about it. Fine until you want to read the file rather than re-render it: pull the prompt out of an old PNG, check which checkpoint made it, rename it after its own seed. Honda's version is the core loader with an ime metadata dump bolted on, so you get the picture and the JSON that was travelling inside it, in one node.
How it works
There are two paths through it, and they behave differently enough to be worth knowing.
The normal path - you pick a file that lives in ComfyUI's input/ folder - delegates to core LoadImage().load_image(), so you inherit exactly the same decoding behaviour as the built-in node, including support for the annotated-filepath syntax. Then it resolves the format by reading the file's magic bytes (png, jpg, webp, or unknown - the same check a file browser would do, not the extension) and shells out to the ime binary to dump the image's metadata as JSON text.
The override path - an absolute path wired into Path Override - does its own decode: PIL open, EXIF orientation applied, RGB, scaled to a 0β1 tensor. Two side effects. Alpha is discarded, because convert("RGB") means what it says. And the external file gets copied into input/ so the frontend can show a preview through /view - copy2, only if a file with that basename doesn't already exist. So if you previously pulled a different image under the same filename, the node reads the file you asked for and previews the stale one. Delete the duplicate in input/.
The inputs and outputs that matter
File Name is the ordinary picker - a socketless text field, so it's a dropdown next to a text box, and the value is a name resolved inside input/. Path Override is the optional escape hatch, and it's a forced input: you have to wire a STRING into it (Path Join output, a Read File, a Text node), you can't type into it. If it's non-empty it wins outright and File Name is ignored.
Four outputs, and this is the part that earns the node its slot:
- Image - the tensor, straight into your sampler/img2img chain.
- Metadata - a JSON string from
ime. Valid JSON, or an empty string if extraction failed. - Path - the resolved absolute path of the file that was actually read.
- Format -
png,jpg,webporunknown.
Metadata is the interesting one. Feed it to JSON Preview to see what's in the file, JSON Get Value or JSON Set Key to pull a field out, and JSON Merge to amend it before writing. Path is what you feed to the file-system nodes when you want to move or rename the source after processing - Path β Rename File, for instance.
One thing that is not here, and people notice: there is no MASK output. Core Load Image emits a mask derived from the alpha channel; this node calls the same decoder but throws the mask away. If your workflow does alpha-masked compositing, you need the core loader in parallel, or a separate mask-extraction node.
If the file can't be found, the node doesn't throw - it returns with block_execution and a message telling you to pick an image or fix the path, so the run stops cleanly instead of executing half a graph against a None tensor.
How to install it
Part of Avaray/honda-nodes. ComfyUI Manager β Node Pack β search Honda Nodes β Install β restart. Manually:
cd ComfyUI/custom_nodes
git clone --depth 1 https://github.com/Avaray/honda-nodes.git
cd honda-nodes
python install.py
For this node the installer isn't optional: it downloads the ime binary (the author's own image-metadata-editor, from its GitHub releases) into the pack's bin/ folder, and that's what produces the Metadata output. It pulls jq too, for the JSON nodes. No pip deps, no models.
Common issues
Metadata comes out as an empty string. The ime binary is missing or failed - look for Warning: 'ime' CLI not found. Skipping metadata extraction. in the console, that's the exact message. Re-run install.py; on a locked-down machine check whether the GitHub release download is blocked. A file with genuinely no metadata also yields an empty string, so test on a known ComfyUI PNG first.
"Please select an image or provide a path_override". File Name is blank, or the widget is pointing at a file that got deleted from input/ since the workflow was saved. Re-pick it.
The preview doesn't match the image the graph is using. The input/ copy collision described above. Delete the stale file from input/.
Your metadata says the file is a workflow chunk, but it's a prompt and not a workflow. That's the file, not the node: images saved through an API or a hosted front end only carry the flattened prompt chunk, so there's no editable graph inside.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| image_file | STRING | Name of the image file in the input directory. | |
| path_overrideopt | STRING | Absolute path to an image file. If provided, this overrides the selected image. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| Image | IMAGE | β |
| Metadata | STRING | β |
| Path | STRING | β |
| Format | STRING | β |