musubi-tuner LoRA Loader
Load musubi-tuner LoRAs in ComfyUI without converting them first
- model
- model
If you've trained a video LoRA with kohya's musubi-tuner - for Hunyuan Video 1.5, Wan 2.1, Qwen-Image, or Z-Image Turbo - you've hit the wall: drop the .safetensors into ComfyUI's native LoraLoader and it either errors or silently does nothing. The trainer writes keys in its own naming scheme, and ComfyUI expects diffusers-style keys. The classic advice was to run musubi-tuner's convert_lora.py script and babysit the output file. This node deletes that whole step: it converts the LoRA in memory, during execution, and hands the result to ComfyUI's normal LoRA-loading machinery. No temp files, no post-processing, no second copy of your weights eating disk.
What's actually happening
When musubi-tuner saves a LoRA, the keys look like lora_unet_transformer_blocks_0_attn_to_q.lora_down.weight - underscore-separated, a lora_unet_ prefix, and alpha stored separately. The convert_to_diffusers() function this node runs (adapted from kohya's own convert_lora.py) does three things:
- Renames the keys. It keeps a lookup table for Qwen-Image's transformer blocks, then pattern-matches everything else:
to.q→to_qfor Z-Image,double.blocks.→double_blocks.for Hunyuan Video and FLUX,cross.attn→cross_attnfor Wan 2.1. The comments in the source are honest about how fragile this is ("ugly but works"). - Rewrites the tensor layout.
lora_downbecomeslora_A.weight,lora_upbecomeslora_B.weight, which is what ComfyUI's loader expects. It also understands LoHa and LoKr (lycoris) formats, so those work too. - Bakes in the alpha. Diffusers-style LoRAs assume alpha is folded into the weights, so it scales everything by
sqrt(alpha / dim). If a rank was trained with alpha ≠ rank, skipping this would get the magnitude wrong.
Then it calls comfy.sd.load_lora_for_models(model, None, state_dict, strength_model, None). Note the None for CLIP - that's what the "ModelOnly" in the class name means. These architectures don't train the text encoder anymore, so there's nothing to patch on the CLIP side.
The inputs that matter
Three inputs, and honestly only two you'll touch:
- model (
MODEL) - feed it your diffusion model, e.g. the Hunyuan Video 1.5 or Wan 2.1 model checkpoint. - lora_name (
COMBO) - the dropdown lists everything inComfyUI/models/loras. Drop your musubi-tuner.safetensorsthere and it shows up. - strength_model (
FLOAT, default 1.0, range −100 to 100) - same idea as any LoRA strength; negative values subtract the LoRA instead of adding it.
The single model output wires straight into your sampler's model input, same as any other LoRA loader.
Installing it
Via ComfyUI Manager, search "ComfyUI-Musubi-Tuner-LoRA-Loader". Or the manual route:
cd ComfyUI/custom_nodes/
git clone https://github.com/vjumpkung/ComfyUI-Musubi-Tuner-LoRA-Loader.git
Then restart ComfyUI (or reload custom nodes). There's no pip install step - the dependencies are torch, tqdm, and ComfyUI's own comfy.sd / comfy.utils / folder_paths, all already present.
Where people get burned
- Node doesn't appear in the menu. This pack uses the newer ComfyUI v3 schema API (
io.ComfyNode,ComfyExtension). On an old ComfyUI build it won't register. Update ComfyUI first. - LoRA not in the dropdown. It reads your
lorasfolder - put the file inComfyUI/models/loras, not anywhere else. - Wrong base model. A Hunyuan Video 1.5 LoRA needs the 1.5 model, and the KB's rule applies: a Z-Image Turbo LoRA won't work on Z-Image Base, and a Flux LoRA won't run on SDXL. One bright spot - Wan 2.1 LoRAs are backwards-compatible with Wan 2.2, so those keep working.
- You don't need it at all. If your LoRA was trained with ai-toolkit or OneTrainer in standard format, the native
LoraLoaderhandles it fine. This node is specifically for the musubi-tuner output. Reach for it when the native loader chokes on a video LoRA - that's the tell.
One thing to like: at strength 0 it skips everything and returns your model untouched, which makes bypassing a LoRA essentially free. For a node whose whole job is converting the output of a niche trainer, that's a nicely done piece of polish.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| lora_name | COMBO | 0 options: | |
| strength_model | FLOAT | 1.00-100–100 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |