Nodex HDR Viewer 🎨
Actually see what your EXR is doing
- image
- image_b
- image
- exr_path
ComfyUI's built-in preview will lie to you about HDR. Feed it a float EXR with highlights at 12× white and it clamps everything into a flat, clipped mess - you literally cannot tell whether your image has real dynamic range or is a blown-out pile of 1.0s. Nodex HDR Viewer is the pack's answer: a GPU-accelerated viewer built into the browser that renders true 32-bit float data with exposure, gamma, false color, and channel isolation, so you can actually see what your HDR tensor is doing instead of guessing.
Where you'll reach for it: right after Synthetic HDR Expansion or Exposure Bracket Merge, and before you commit anything to Save EXR. The README's demo workflow is exactly that - expand, view, save - and the viewer is what makes the loop usable. Drop the EV slider on a synthetic-HDR image and you can watch the reconstructed highlights roll off smoothly instead of clamping to flat gray. That's the moment the whole pack clicks.
How it works
Despite the name, there's no vispy dependency anywhere in this pack's requirements. The mechanism is: the node writes your float tensor to a raw .bin file in ComfyUI's temp directory, serves it through its own /nodex_hdr/view route, and a WebGL fragment shader does the heavy lifting in your browser - exposure via EV (multiply by 2^EV, just like HDR Exposure Adjust), a gamma/sRGB toggle, an ARRI-style false-color heatmap, and per-channel isolation (R / G / B / alpha / luma) so you can eyeball individual passes. It also does zoom and pan, and an A/B split if you feed image_b.
The inputs: image is required, image_b is the optional comparison image, and exr_path lets you load an EXR straight from disk and skip the graph entirely - handy for inspecting a render you didn't make in this session. Outputs are image and exr_path, and it's an output node, so it always runs.
What you'll actually touch in the UI
- The EV slider - the single most important control; sweep it down to inspect highlight rolloff, up to check shadow detail
- sRGB toggle - get the transfer curve right so you're judging the image, not the encoding
- False Color - the ARRI-style heatmap; instantly shows where values are clipped vs. rolling off
- Channel isolation - isolate R/G/B/alpha/luma to debug a single pass
Install
Same pack as everything else:
cd ComfyUI/custom_nodes
git clone https://github.com/azhagurajpandians/ComfyUI-ACES-EXR-Toolkit.git
python -m pip install -r ComfyUI-ACES-EXR-Toolkit/requirements.txt
Restart ComfyUI; it's under image/ACES + EXR as "Nodex HDR Viewer 🎨". No extra models, no browser extensions - the viewer runs in the ComfyUI web UI itself.
Gotchas
A couple of things worth knowing. The viewer is browser-side: it needs the ComfyUI server running (obviously) and the .bin files it writes live in temp, which ComfyUI clears periodically - this is a viewer, not an archive, so keep the real file via Save EXR. If you load via exr_path, the path is confined to ComfyUI's allowed directories, same as the loaders. And don't be fooled by a dark preview: linear HDR looks dark in a default sRGB view by design - that's what the EV and sRGB controls are for. If the image looks wrong, adjust the viewer before you blame the pixels.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| image_bopt | IMAGE | — | |
| exr_pathopt | STRING | Override: load EXR directly from disk |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| exr_path | STRING | — |