X2HDR Tone Map Preview
Quick HDR previews without the grading rig — ACES, Reinhard, or log, pick your poison
- hdr_image
- preview
- preview_aces
- preview_reinhard
- preview_log
Sometimes you don't need the full color-grade viewer. You just want to know what the decode actually looks like before you commit to saving. X2HDR Tone Map Preview is the quick look: it tone-maps linear HDR into an LDR preview using one of three curves, and returns all three if you want to compare.
How it works
For each frame it finds a white point - from the white_percentile of luminance, or your manual white_point if you set one above 0 - scales the HDR by exposure divided by that white point, applies the selected curve, then applies a display gamma. The curves:
- ACES (default) - the filmic Narkowicz-style fit, the "looks like a movie" choice and the best all-rounder for a first glance.
- Reinhard -
x/(1+x), gentle and safe; keeps everything but squashes the highlights. - log - log2-based; flat, great for inspecting shadow detail, ugly as a final look.
Inputs
- hdr_image - linear HDR.
- method -
aces/reinhard/log/all.allstill returns ACES as the first output but exposes all three named outputs. - white_percentile (99.5) - auto white point; lower it to brighten, raise it to darken.
- white_point (0 = auto) - set a fixed nits value to override the percentile behavior.
- exposure (default 1) - a multiplier, not EV. 1 is neutral.
- gamma (2.2) - display gamma applied after the curve.
Outputs
- preview - follows
method; ACES whenmethodisall. - preview_aces, preview_reinhard, preview_log - all three rendered, so you can wire them into a compare or side-by-side and pick.
Four IMAGE outputs, all LDR. Wire whichever you like into a Preview Image node.
Installing it
Part of facok/comfyui-x2hdr. ComfyUI Manager → search comfyui-x2hdr → install, restart, nodes under image/HDR/X2HDR. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/facok/comfyui-x2hdr
then restart. The one extra dependency is PyAV (av), imported at load time; pip install av in ComfyUI's Python environment if the pack errors.
Where people get burned
- It only renders a view - it doesn't change your HDR data. The previews are LDR, and the node never touches the tensor's values. If you want a graded HDR master, keep
X2HDR Color Gradein the chain and save withX2HDR Save EXR. - The
X2HDR Dynamic Range QAnode uses the same tone mappers internally for its exposure strip, so if you like the look here, the QA strip will feel familiar. For anything you'll actually ship, though, reach forX2HDR Color Grade- this node is explicitly the peek, not the product.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| hdr_image | IMAGE | — | |
| method | COMBO | aces | 4 options: aces, reinhard, log, all |
| white_percentile | FLOAT | 99.50–100 | — |
| white_point | FLOAT | 0.00–100000 | — |
| exposure | FLOAT | 1.000.001–1000 | — |
| gamma | FLOAT | 2.200.1–8 | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| preview | IMAGE | — |
| preview_aces | IMAGE | — |
| preview_reinhard | IMAGE | — |
| preview_log | IMAGE | — |