HDR Video (IC-LoRA) Beta

The HDR IC-LoRA converts standard dynamic range (SDR) video into high dynamic range (HDR) output, producing per-frame EXR files suitable for professional color grading and post-production workflows.

Unlike other IC-LoRA adapters that guide video generation, the HDR IC-LoRA is a post-processing tool. It takes existing video as input and upscales the bit depth to capture significantly more color and luminance information than standard formats.

HDR conversion is available via a ComfyUI workflow or a standalone Python script.

What You’ll Need

Model: HDR IC-LoRA: https://huggingface.co/Lightricks/LTX-2.3-22b-IC-LoRA-HDR

Files Needed

All files are available in our HuggingFace collection: https://huggingface.co/collections/Lightricks/ltx-23

FileDescription
ltx-2.3-22b-distilled.safetensorsDistilled model checkpoint
ltx-2.3-spatial-upscaler-x2-1.1.safetensorsSpatial upscaler (v1.1)
ltx-2.3-22b-ic-lora-hdr-0.9.safetensorsHDR IC-LoRA weights
ltx-2.3-22b-ic-lora-hdr-scene-emb.safetensorsPre-computed text embedding

Hardware

  • NVIDIA GPU with 32GB+ VRAM (minimum for ComfyUI workflow at HD resolution)
  • More VRAM enables higher resolutions and longer clips

Software

  • Python 3.11
  • uv package manager

ComfyUI Workflow

Setup

  1. Install ComfyUI-LTXVideo custom nodes (see ComfyUI installation)
  2. Download the HDR IC-LoRA checkpoint (ltx-2.3-22b-ic-lora-hdr-0.9.safetensors) from Lightricks/LTX-2.3-22b-IC-LoRA-HDR
  3. Place in ComfyUI/models/loras/
  4. Download the distilled model checkpoint (ltx-2.3-22b-distilled.safetensors) if you don’t already have it
  5. Get a free LTX API key from console.ltx.video — the workflow uses the Gemma API for text encoding
  6. Load the HDR workflow in ComfyUI and enter your API key in the LTX API KEY node

Before launching ComfyUI, you must set the following environment variable to enable EXR file saving:

$export OPENCV_IO_ENABLE_OPENEXR=1

Without this, OpenCV will silently fail to write EXR files.

Example Workflow Steps

  1. Load your source SDR video
  2. The HDR IC-LoRA is applied via the LTX IC-LoRA Loader Model Only node
  3. Text conditioning uses the prompt "HDR footage" with a negative prompt for quality control
  4. Generation runs with CFG 1, euler_ancestral sampler, and 8 inference steps
  5. The LTXVHDRDecodePostprocess node decodes the result into both SDR preview and HDR linear outputs
  6. 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. Supports latent downscale for the new generation pipeline.
  • LTXVHDRDecodePostprocess — Decodes and post-processes the HDR output. Produces two outputs:
    • tonemapped — SDR preview suitable for standard displays
    • hdr_linear — Full HDR linear data for EXR export

LTXVHDRDecodePostprocess parameters:

ParameterDescription
exposureAdjusts the SDR tonemapped preview brightness, in stops (±10 EV). Does not affect the HDR linear output.

The workflow includes the GemmaAPITextEncode node for text encoding via Lightricks’ free API, avoiding the VRAM cost of loading Gemma locally. On 32GB GPUs (e.g. RTX 5090), using the API encoder is required to avoid out-of-memory errors.

Viewing EXR Files

Standard image viewers cannot display HDR EXR files correctly. Use DJV — a free, open-source viewer designed for professional image sequences including EXR.

Performance

GPUVRAMResolutionDurationNotes
RTX 509032GB720x12805sConsumer GPU minimum
H10080GB1080x1920161 frames (~6.7s)~100s inference

Python Script

Setup

$# Install uv (if needed)
$curl -LsSf https://astral.sh/uv/install.sh | sh
$
$# Create venv and install packages
$uv venv --python 3.11
$source .venv/bin/activate
$uv pip install -e packages/ltx-core -e packages/ltx-pipelines -e packages/ltx-trainer

Single Video

$python run_hdr_ic_lora.py \
> --input ./my_video.mp4 \
> --output-dir ./hdr_output \
> --distilled-checkpoint /path/to/ltx-2.3-22b-distilled.safetensors \
> --upscaler /path/to/ltx-2.3-spatial-upscaler-x2-1.1.safetensors \
> --lora /path/to/ltx-2.3-22b-ic-lora-hdr-0.9.safetensors \
> --text-embeddings ltx-2.3-22b-ic-lora-hdr-scene-emb.safetensors \
> --exr-half \
> --high-quality

Batch Processing

Point --input at a directory of .mp4 files. The pipeline loads once and processes all videos sequentially:

$python run_hdr_ic_lora.py \
> --input ./sdr_videos/ \
> --output-dir ./hdr_output \
> --distilled-checkpoint /path/to/ltx-2.3-22b-distilled.safetensors \
> --upscaler /path/to/ltx-2.3-spatial-upscaler-x2-1.1.safetensors \
> --lora /path/to/ltx-2.3-22b-ic-lora-hdr-0.9.safetensors \
> --text-embeddings ltx-2.3-22b-ic-lora-hdr-scene-emb.safetensors \
> --exr-half \
> --high-quality

A batch shell script (run_hdr_batch.sh) is also provided, which spawns a fresh process per video for better memory isolation.

Output

Each video produces two outputs:

hdr_output/
my_video.mp4 # Tonemapped SDR preview
my_video_exr/ # Per-frame HDR EXR files
frame_00000.exr
frame_00001.exr
...

The EXR frames are slinear RGB unbounded. Use --skip-mp4 to produce only EXR frames, or --no-save-exr to produce only the MP4 preview.

Options

| Flag | Default | Description | | ----------------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --- | | --exr-half | off | Save EXR as float16 — 2.5x smaller files with negligible quality loss | | --high-quality | off | Doubles internal frame count to reduce motion artifacts, outputs the original number of frames. Recommended for fast-motion videos; not needed for slow-motion content. ~2x slower. | | --skip-mp4 | off | Only produce EXR frames | | --no-save-exr | off | Only produce MP4 preview | | --seed N | 10 | Random seed | | --max-frames N | 161 | Maximum frames per video. Must satisfy (N-1) % 8 == 0. | | | --quantization POLICY | fp8-cast | Quantization policy (fp8-cast or fp8-scaled-mm) |

Performance

Pipeline load is approximately 60 seconds (one-time). Per-video inference times on an A100 80GB:

ResolutionFramesTime
1920x1088161~278s
896x512161~117s
640x320105~93s
640x384161~96s

Importing EXR Files into DaVinci Resolve

HDR EXR files require specific project settings in DaVinci Resolve to display correctly.

Configuration Settings

  1. In the General Preferences, enable “use 10-bit precision in viewers if available”.

  2. Open Project Settings → Color Management and set the following:

SettingValue
Color scienceACEScct
ACES versionACES 2.0
ACES Input TransformsRGB (Linear) - CSC
ACES Output TransformRec.2100 ST.2084 (1000 nit)

Leave all other settings at their defaults. Dolby Vision, HDR10+, and HDR Vivid should remain disabled.