Working with EXR & HDR
Working with EXR & HDR
LTX-2.5 works with high dynamic range (HDR)
-
Bring your own EXR — Native EXR Workflow. Prefer scene-linear ACEScg OpenEXR (still or frame folder). Also accepted: scene-linear sRGB / Rec.709, or already-encoded ACEScct. Declare the space with
--hdr, run the normal LTX pipelines, and get HDR masters back end to end. -
Generate HDR from SDR — HDR IC-LoRA (beta). If your source is standard-dynamic-range (SDR) video and you want an HDR version synthesized from it, the HDR IC-LoRA generates the extra dynamic range (HDR IC-LoRA is compatible with LTX-2.3 and that LTX-2.5 compatibility is under development).
Native EXR Workflow
Pass OpenEXR into the normal LTX pipelines with --hdr and get HDR masters out. Supported formats:
There is no ComfyUI flow for the Native EXR path yet — it’s driven from the Python pipeline CLIs.
What You Get
HDR Video Files Are Not Accepted as Direct Input
Pipelines accept EXR stills or a folder of EXR frames — not HLG / PQ / HDR10 / mp4 or mov as conditioning. If you point the CLI at an HDR video file, it’s treated as ordinary SDR video decode and you won’t get HDR behavior.
If your source is an HDR video file, convert it first to a directory of OpenEXR frames in one of the supported formats. Do not leave display-encoded HLG/PQ inside the EXR:
Then point the CLI at that folder (or a single still .exr via --image) and pass matching --hdr (ACESCG, SRGB_LINEAR, or ACESCCT).
Inputs
Outputs
When --hdr is set and you write, e.g., --output-path /tmp/out.mp4:
If --hdr is omitted (no EXR condition), output is standard SDR H.264 only.
How to Use
Image-to-video from an ACEScg HDR plate:
Produces /tmp/out.mp4 (HLG) and /tmp/out_exr/*.exr (ACEScg-tagged).
Video conditioning / IC-LoRA from an EXR sequence:
Retake on an EXR sequence:
Generating HDR from SDR (HDR IC-LoRA, Beta)
LTX-2.5 support is in development. The HDR IC-LoRA is validated on LTX-2.3; it has not been validated on LTX-2.5 yet. The Native EXR Workflow above runs on LTX-2.5.
The HDR IC-LoRA converts standard-dynamic-range (SDR) video into HDR output, producing per-frame EXR files suitable for professional color grading. Unlike the Native EXR path above (which carries your HDR through the pipeline), this adapter synthesizes dynamic range from an SDR source — use it when you don’t have an HDR original.
It runs via a ComfyUI workflow or a standalone Python script.
Model: Lightricks/LTX-2.3-22b-IC-LoRA-HDR (ltx-2.3-22b-ic-lora-hdr-0.9.safetensors)
ComfyUI Workflow
Files for ComfyUI:
Steps:
- Install ComfyUI-LTXVideo custom nodes (see ComfyUI installation).
- Download the HDR IC-LoRA and place it in
ComfyUI/models/loras/. - Download the model checkpoint and distilled LoRA if you don’t already have them.
- Get a free LTX API key from console.ltx.io; the workflow uses the Gemma API for text encoding.
- Load the HDR workflow in ComfyUI and enter your API key in the LTX API KEY node.
Before launching ComfyUI you must set this environment variable so OpenCV can write EXR files — without it, EXR writes fail silently:
Example workflow steps:
- Load your source SDR video.
- The HDR IC-LoRA is applied via the LTX IC-LoRA Loader Model Only node.
- Text conditioning uses the prompt
"HDR footage"with a negative prompt for quality control. - Generation runs with CFG 1, the
euler_ancestralsampler, and 8 inference steps. - The LTXVHDRDecodePostprocess node decodes the result into both an SDR preview and HDR linear output.
- Save the HDR output as EXR frames.
Key nodes:
- LTX IC-LoRA Loader Model Only — loads the HDR IC-LoRA checkpoint and applies it to the model.
- LTXVHDRDecodePostprocess — decodes and post-processes the HDR output, producing
tonemapped(SDR preview) andhdr_linear(full HDR linear data for EXR export). Itsexposureparameter adjusts the SDR preview brightness in stops (±10 EV) and does not affect the HDR linear output.
The workflow uses the GemmaAPITextEncode node to encode text via Lightricks’ free API, avoiding the VRAM cost of loading Gemma locally. On 32GB GPUs (e.g. RTX 5090), the API encoder is required to avoid out-of-memory errors.
Python Script
Files for the Python script:
Single video:
Batch processing: point --input at a directory of .mp4 files and the pipeline loads once and processes all of them sequentially. A run_hdr_batch.sh script is also provided, which spawns a fresh process per video for better memory isolation.
Output — each video produces a tonemapped SDR preview (my_video.mp4) and a folder of per-frame HDR EXR files (my_video_exr/). The EXR frames contain linear scene-referred values in Rec.709/sRGB primaries. Use --skip-mp4 for EXR only, or --no-save-exr for the preview only.
Options:
Viewing EXR Files
Standard image viewers can’t display HDR EXR files correctly. The frames contain linear scene-referred values and need no tonemapping for standard viewing in an OCIO-aware viewer.
In any OCIO-aware viewer (DJV, Nuke, Mari), use:
DJV is a free, open-source viewer designed for professional image sequences including EXR.
The Input transform should match the EXR’s primaries. The HDR IC-LoRA writes Rec.709/sRGB-primary EXR (use the settings above); a Native EXR run inherits whatever primaries you fed it (ACEScg or Rec.709), so set the Input transform accordingly.
Importing EXR Files into DaVinci Resolve
HDR EXR files need specific project settings in DaVinci Resolve to display correctly.
- In General Preferences, enable “use 10-bit precision in viewers if available”.
- Open Project Settings → Color Management and set:
Leave all other settings at their defaults. Dolby Vision, HDR10+, and HDR Vivid should remain disabled.