Nodes/ComfyUI-DiffHDR/DiffHDR Apply LoRA
ComfyUI Node

DiffHDR Apply LoRA

The 60 MB patch that turns VACE-14B into an HDR model

By claussteinmassl·Created 2 days ago·Updated a day ago· 5
DiffHDR Apply LoRA
  • model
  • model
variantstandard
strength1.00

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 - a MODEL. Wire it from UNETLoader, or UnetLoaderGGUF if you're on a quantised checkpoint. Not from anything that isn't VACE-14B; see above.
  • variant - standard for images and videos, pano for 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 to ModelSamplingSD3, then to KSampler.

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 RuntimeError that names the URL and the exact path it wanted - download the file yourself and drop it at models/loras/DiffHDR/DiffHDR.safetensors. The LoRA directory also has to be writable, which is worth checking if your models tree 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_api V3 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.

CategoryDiffHDR

Inputs (3)

NameTypeDefaultDescription
modelMODELWan2.1-VACE-14B diffusion model.
variantCOMBOstandardstandard: images and videos. pano: equirectangular HDRIs.
strengthFLOAT1.000–2LoRA strength. 1.0 matches the reference.

Outputs (1)

NameTypeDescription
modelMODELModel with the DiffHDR LoRA applied.