EXR Load
Bring a 32-bit plate back into ComfyUI at its real brightness
- image
- alpha
- peak
OpenEXR is the file format compositing actually runs on - a plate from Nuke or Resolve arrives as linear light with values that go far above what a normal image file can hold. A specular highlight in an EXR isn't clipped to white; it's stored at, say, 40 times white, waiting for someone downstream to decide how it should be graded. The trouble is stock ComfyUI barely talks to that world. WAS EXR Load is the door back in: it reads an OpenEXR file as linear light, keeping everything above one intact, so a plate written by this pack or by a real compositor comes into the graph at its actual brightness rather than flattened into an 8-bit-looking shadow of itself.
It's the read half of WAS v3's HDR story. The graph around it tends to look like: EXR Load → grade or expose in linear light → EXR Save (or DNG Save for the raw-developer end), with a tone map at the end when you want something previewable.
How it works
You pick a file from the file dropdown - each entry carries the folder it sits in, shown as plate_0001.exr [output], shot.exr [input], scratch.exr [temp]. Anything EXR Save wrote lands in output, so it's listed right back here, and the pack also lists EXRs sitting in your input and temp folders.
The reader is implemented inside the pack - no OpenEXR pip dependency hiding in the requirements - and it supports a specific set of compression schemes: uncompressed, ZIP, ZIPS and RLE read fine. PIZ, DWA, B44 and PXR24 are named in the message and refused. That's not arbitrary; those are the heavier wavelet/compression codecs, and the pack's own reader doesn't implement them.
What comes out
image- the file's colour as linear light, as a batch of one. Values above one are kept on the wire, even though a preview clips them back to white - don't judge the frame by the preview, judge it by the numbers.alpha- the file's coverage as a MASK: white where opaque, black where clear. A fourth channel in the EXR lands here. No alpha channel means a white mask at the frame's size.peak- the largest value anywhere in the image.40.07means a highlight forty times white survived the trip;1.0means the file holds nothing above white. Divide by it to scale the frame back into a viewable range, or use it as a reality check on how much dynamic range you're actually working with.
Installing it and the file-format gotcha
WAS Node Suite v3: ComfyUI Manager → search WAS Node Suite v3, or clone into custom_nodes, restart. No extra packages, no downloads - worth saying twice because the old v2 suite used to drag in heavyweight image libraries, and v3 deliberately reads and writes EXR on its own.
The failure mode people actually hit: an EXR from someone else's pipeline won't load, and the message names a compression scheme you've never heard of. The fix is usually in the sending program - re-export with ZIP compression (which every compositor supports and this node reads) and it comes straight in. Same data, lossless, just a codec this reader understands.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| file | COMBO | Which EXR to read. Each entry carries the folder it sits in: `plate_0001.exr [output]`, `shot.exr [input]`, `scratch.exr [temp]`. EXR Save writes into output, so a file it wrote is listed here. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | The file's colour as linear light, as a batch of one. Values above one are kept, so a preview clips them back to white. |
| alpha | MASK | The file's coverage, white where the pixel is opaque and black where it is clear. A file with no alpha channel gives a white mask at the frame's size. |
| peak | FLOAT | The largest value anywhere in the image. 40.07 = a highlight forty times white; 1.0 = the file holds nothing above white. Divide by it to scale the frame back into range. |