- image
- info_json
Load EXR (MEC) is the door into the part of the ecosystem most ComfyUI users never touch: scene-linear float footage. ComfyUI natively speaks 8-bit-ish sRGB tensors in a 0-1 range - perfect for PNG workflows, actively wrong if you're compositing AI output next to real footage. A Nuke comp treats gamma-encoded values as linear light and every blend blows out. The fix is to carry your pixels as EXR float through the pipeline, and this node is the reader that gets them in.
It comes from the VFX suite of ComfyUI-CustomNodePacks, the ~72-node umbrella pack from Code2Collapse (Likhith-24, active on r/comfyui), which is basically built around the thesis that AI output should be able to leave ComfyUI as a proper compositing element.
How it works
Give it a file_path (absolute path to a .exr) and it returns an image tensor ([1,H,W,3] float32) plus an info_json string. The clever part is the backend chain - the source code tries OpenImageIO first, then the OpenEXR library, then imageio, and logs which one it fell back to:
- OpenImageIO (
pip install OpenImageIO) - the production path. Reads the real named R/G/B channels plus file metadata, compression, and can surface the extra channels (AOVs) a render saved alongside RGB. - OpenEXR + Imath - the classic Python pair; reads R, G, B as float.
- imageio - last resort; may pull in FreeImage and can silently lose data.
That fallback ordering matters for a reason the author spells out in the code: a silent downgrade means you find out your AOVs got dropped at delivery, not at load. The info_json output tells you which backend actually read the file, the dimensions, channel names, and compression - read it before trusting a load of a render pass.
The inputs and outputs that matter
One input, two outputs, that's the whole node:
file_path- the only thing you set. A file browser widget helps, but it's a plain STRING so you can wire it from another node.image- the scene-linear RGB as a float32 IMAGE tensor. Wire this into anything that accepts IMAGE - img2img, VAE, compositing - just remember it's linear, so color-sensitive math should treat it as such.info_json- JSON with backend, width/height, channels, compression, metadata. The beginner habit to build: peek at this once per new file so you know what you actually loaded.
Installing it
This node lives in ComfyUI-CustomNodePacks, not standalone. Install via ComfyUI Manager (search "CustomNodePacks") or:
cd ComfyUI/custom_nodes
git clone https://github.com/Code2Collapse/ComfyUI-CustomNodePacks.git
Then the EXR backends are optional - the requirements.txt comments them out by default. The node errors with a helpful message if no backend is present, so install at least one:
pip install OpenImageIO # best: full multi-channel + metadata
# or, lighter fallback:
pip install OpenEXR Imath imageio
Restart ComfyUI after installing. Note the pack's README's general warning: don't run the full requirements.txt blindly, because it can clobber ComfyUI's torch - install only the EXR bits above.
Common issues
- "Could not read … with any backend" - you haven't installed OpenEXR/OpenImageIO/imageio. That error message is the pack's way of saying so; the fix is one of the pip lines above.
- Your AOVs vanished - if
info_jsonsaysbackend: imageioorOpenEXR, you're reading a flattened RGB view of a multi-channel EXR. Install OpenImageIO for the real read. - Everything's twice as bright / looks blown - that's the scene-linear decode doing its job. An EXR's linear floats need a display transform (a Color Space Convert to sRGB) before they look "normal" on screen. Don't reach for the brightness slider; reach for the correct conversion.
The honest take: if you never touch a compositor, you don't need any of this and the sRGB path is correct. The moment AI output has to sit in a color-managed shot next to real footage, EXR float I/O stops being a nicety and starts being the whole ballgame.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| file_path | STRING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| info_json | STRING | — |