DiffHDR Apply LoRA
The 60 MB patch that turns VACE-14B into an HDR model
- model
- model
This is the entry point for people building DiffHDR into a graph they already own, rather than running the pack's all-in-one node. It takes your Wan2.1-VACE-14B model, patches the DiffHDR LoRA into it, and gives back a model you can sample yourself.
It's a small node - three inputs, one output, no widgets you'd argue with - and it's where two of this pack's real failure modes live, so it's worth ten minutes of understanding before you wire it in.
What it's doing under the hood
The DiffHDR LoRA isn't a style LoRA and it isn't a step-distillation LoRA. It's the thing that teaches VACE-14B to do the log-space radiance reconstruction at all: 160 tensors, patching the model's 8 vace_blocks. The node downloads it on first use from Eyeline-Labs/DiffHDR into models/loras/DiffHDR/ and applies it with ComfyUI's own LoRA loader.
Because the LoRA attaches to the VACE blocks specifically, the node can tell whether you handed it the right model. It expects 80 applied patches; fewer than that and it raises a ValueError telling you to connect a Wan2.1-VACE-14B. It also rejects models without 8 VACE blocks or with a hidden size other than 5120. So: the 1.3B VACE, plain Wan 2.1 T2V/I2V, Wan 2.2 - all out. The only supported bases are wan2.1_vace_14B_fp16.safetensors from Comfy-Org/Wan_2.1_ComfyUI_repackaged, an fp8 variant, or a GGUF quant of the VACE-14B.
Inputs and output
model- aMODEL. Wire it fromUNETLoader, orUnetLoaderGGUFif you're on a quantised checkpoint. Not from anything that isn't VACE-14B; see above.variant-standardfor images and videos,panofor equirectangular HDRIs. This picks which of the two LoRAs gets downloaded and applied, and it is not cosmetic: the standard LoRA won't give you a usable environment map. Match it to your task.strength- default 1.0, range 0–2. 1.0 matches the reference implementation. There's little reason to wander; if you're turning it down to "fix" something, the thing you actually want is probably a different preset or step count.- Output
model- the patched model. Feed it toModelSamplingSD3, then toKSampler.
The rest of the recipe is in the node's own description, and it matters: ModelSamplingSD3 with shift 8, sampled with res_multistep / simple at cfg 1. That's the pack's fast preset. If you want to reproduce the published reference numbers instead, shift 5 with euler / simple. Get the shift wrong and you'll decide the node doesn't work. The repo's workflows/diffhdr_modular.json is the working template - copy it rather than reconstructing it from memory.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/claussteinmassl/ComfyUI-DiffHDR.git
pip install -r ComfyUI-DiffHDR/requirements.txt # OpenEXR + huggingface_hub
Restart ComfyUI, download the VACE-14B checkpoint and wan_2.1_vae.safetensors into the usual folders, and you're done. The LoRA itself needs no manual download - the node fetches it on first execution, hence the huggingface_hub dependency. ComfyUI Manager users can install the pack by title.
Where people get burned
- First run hangs or fails on the download. The node pulls the ~60 MB LoRA from Hugging Face on first use. Behind a proxy, or with a full disk, you get a clear
RuntimeErrorthat names the URL and the exact path it wanted - download the file yourself and drop it atmodels/loras/DiffHDR/DiffHDR.safetensors. The LoRA directory also has to be writable, which is worth checking if yourmodelstree is mounted read-only. - A stale file in the right place. The node accepts a file only if its size matches exactly (61,360,760 bytes). An interrupted download leaves a truncated file that will be rejected, and the error message tells you to delete it. Do that.
- The old download URL. Versions before 0.3.1 pointed at a Hugging Face location that stopped answering. If you're pinning an old commit and the download 404s, that's why - update the pack.
- Double-applying the LoRA. If you're patching the model with this node and running the all-in-one
DiffHDR (Image / Video)node downstream, you've applied DiffHDR twice. Pick one path: the all-in-one node applies the LoRA itself and there's no switch to turn that off. - Adding a turbo LoRA next to it. Step-distillation LoRAs (lightx2v, CausVid, AccVid, FastWan and friends) load cleanly alongside DiffHDR and then wreck it: they shift the value of the log-encoded output, and the log curve turns that into blown highlights. The pack measured this across thirteen of them. They also don't make anything faster here.
- Nodes missing from the menu. This pack registers through ComfyUI's newer
comfy_apiV3 interface; on an old ComfyUI it loads silently and registers nothing. Update ComfyUI.
If you just want HDR out of a clip and don't need to mix DiffHDR with other VACE controls or extra LoRAs, skip this node entirely and use the all-in-one. It's the same pipeline with fewer ways to get the shift wrong.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | Wan2.1-VACE-14B diffusion model. | |
| variant | COMBO | standard | standard: images and videos. pano: equirectangular HDRIs. |
| strength | FLOAT | 1.000–2 | LoRA strength. 1.0 matches the reference. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model | MODEL | Model with the DiffHDR LoRA applied. |