Load MarigoldV2 LoRA
The LoRA ComfyUI's own Load LoRA silently refuses to load
- model
- vae
- marigold_model
- model
- vae
The short version
Marigold V2 is a LoRA over Qwen-Image-Edit-2509, and the stock Load LoRA node can't load it. Not because anything is broken, but because every key in trainables.safetensors is prefixed Diffuser., ComfyUI's loader doesn't recognise that prefix, and it skips all 1446 keys while printing lora key not loaded for each one. That message is familiar to anyone who's fed ComfyUI a mismatched LoRA; here it's the normal outcome, not a corrupt download.
This node strips the prefix. It also drops the training-only iREPAStudentProjector.* head, and routes the 108 VAE.* tensors - a fine-tuned decoder, not a LoRA - onto a copy of your VAE, renaming them on the way in, because ComfyUI's Qwen VAE calls that layer decoder.conv1 where diffusers calls it decoder.conv_in.
Why you'd reach for it
It downloads nothing large. Marigold V2 Model Loader fetches a 41 GB backbone; this node takes a MODEL you already loaded - Qwen-Image-Edit in any form, GGUF included, via Unet Loader (GGUF) - plus a ~1.8 GB checkpoint you drop in models/loras. The backbone is shared across modalities and swapping depth → normals → albedo costs about a second.
The two engines agree to r = 0.99959 on identical weights, mean residual 0.42% of the depth range, and this path was about twice as fast with ~2 GB less VRAM in the author's comparison. If you already run Qwen-Image-Edit for anything else, there's no reason to take the other branch.
Where it fits in the wider picture: depth's usual day job is ControlNet conditioning, and per the knowledge base the default preprocessor there is still Depth Anything V2 Large on the quality-speed curve. Marigold's niche has always been the other slots - illustrations and synthetic input where a discriminative model trained on photos falls down, maximum-quality maps when time is free, and geometry you actually intend to export. V2's single step is what makes that affordable.
How to wire it
Unet Loader (GGUF) ─┐
├─> Load MarigoldV2 LoRA ─> Marigold V2 Predict ─> Preview
Load VAE ───────────┘ └────────> (vae)
Rename the adapter per modality so you can tell them apart (marigold-v2-depth-Log-stage2.safetensors, per the README), wire the node between your model loader and Predict, feed Load VAE into its optional vae input, and take its vae output into Predict's vae input. Skipping that last wire is the classic mistake: you still get an image, but it's decoded by the stock Qwen VAE instead of the checkpoint's fine-tuned decoder, and Predict logs a warning saying so.
Inputs and outputs
model - your Qwen-Image-Edit MODEL, from any loader.
lora_name - a Marigold V2 trainables.safetensors in models/loras. Note what this node won't do: it does not download checkpoints for you. auto_download here only covers the prompt embeddings.
modality - depth, normals, or albedo, and it must match the file. It selects the frozen prompt embedding that stands in for the text encoder; pick wrong and you're running a depth adapter against a normals prompt.
depth_parameterization - log_or_linear or disparity. You're loading a file by name, so the node can't know what's inside and you declare it. It affects one thing: which direction the values run, and therefore how the map gets flipped for display. Ignored for normals and albedo.
strength - default 1.0, range -10 to 10. The config is rank-128 with alpha 128, so there's no scaling to correct for. Leave it at 1.
auto_download - fetches the few-MB prompt embeddings into models/marigold-v2 if they're missing. Those can't be derived locally, so even this path touches the network once.
Outputs: marigold_model (into Predict), plus model and vae - the patched versions, handed back so you can branch them elsewhere. The VAE patch lands on a copy; your original object is untouched and other branches keep the stock decoder.
Install
ComfyUI Manager, search ComfyUI-Marigold-v2, or:
cd ComfyUI/custom_nodes
git clone https://github.com/visualbruno/ComfyUI-Marigold-v2
../../python_embeded/python.exe -m pip install -r ComfyUI-Marigold-v2/requirements.txt
peft and bitsandbytes are the two the README calls out as missing from most installs. Add matplotlib if you're colorizing depth downstream.
Troubleshooting
lora key not loaded 1446 times means you're using stock Load LoRA. If the node itself says the file has no Diffuser.* tensors, you've pointed it at something that isn't a Marigold checkpoint.
If it reports that the loaded VAE lacks the decoder tensors this checkpoint patches, the VAE in your graph isn't the Qwen Image VAE. If it reports VAE tensors with no ComfyUI counterpart, your ComfyUI predates a Qwen VAE layout change - update before debugging anything else.
One last caveat: 2511 and 2512 GGUFs load and run fine, and the checkpoint doesn't care, but the adapter was trained on 2509. The one-image spot check (r = 0.998, 1.5% mean absolute difference in depth range) is encouraging, not authoritative. If you have both, use 2509.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | A Qwen-Image-Edit model, e.g. from Unet Loader (GGUF). | |
| lora_name | COMBO | A Marigold V2 trainables.safetensors placed in ComfyUI/models/loras. | |
| modality | COMBO | depth | Must match the checkpoint: it selects the frozen prompt embedding that stands in for the text encoder. |
| depth_parameterization | COMBO | log_or_linear | Log-* and Uniform-* checkpoints grow with distance; Disparity-* shrink. Ignored for normals and albedo. |
| strength | FLOAT | 1.00-10–10 | — |
| auto_download | BOOLEAN | true | Fetch the few-MB prompt embeddings if they are not already in ComfyUI/models/marigold-v2. |
| vaeopt | VAE | The Qwen Image VAE. Passing it here applies the checkpoint's fine-tuned decoder to a copy of it. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| marigold_model | MARIGOLDV2_MODEL | — |
| model | MODEL | — |
| vae | VAE | — |