Nodes/ComfyUI-Musubi-Tuner-LoRA-Loader/musubi-tuner LoRA Loader
ComfyUI Node

musubi-tuner LoRA Loader

Load musubi-tuner LoRAs in ComfyUI without converting them first

By vjumpkung·Created 8 months ago·Updated 7 months ago· 2
musubi-tuner LoRA Loader
  • model
  • model
lora_name
strength_model1.00

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:

  1. Renames the keys. It keeps a lookup table for Qwen-Image's transformer blocks, then pattern-matches everything else: to.qto_q for Z-Image, double.blocks.double_blocks. for Hunyuan Video and FLUX, cross.attncross_attn for Wan 2.1. The comments in the source are honest about how fragile this is ("ugly but works").
  2. Rewrites the tensor layout. lora_down becomes lora_A.weight, lora_up becomes lora_B.weight, which is what ComfyUI's loader expects. It also understands LoHa and LoKr (lycoris) formats, so those work too.
  3. 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 in ComfyUI/models/loras. Drop your musubi-tuner .safetensors there 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 loras folder - put the file in ComfyUI/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 LoraLoader handles 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.

Categorymusubi-tuner-lora-loader

Inputs (3)

NameTypeDefaultDescription
modelMODEL
lora_nameCOMBO0 options:
strength_modelFLOAT1.00-100–100

Outputs (1)

NameTypeDescription
modelMODEL