Nodes/EasyLoRAMerger/🛡️ Easy LoRA Studio
ComfyUI Node

🛡️ Easy LoRA Studio

Your LoRA Speaks a Different Trainer Dialect. This Node Translates.

By Terpentinas·Created 7 months ago·Updated 4 months ago· 12
🛡️ Easy LoRA Studio
  • model
  • clip
  • lora_data
  • lora
  • model
  • clip
  • output_path
  • forensic_report
lora
target_formatauto
compression_modeoriginal
target_rank128
bake_custom_scale1.00
save_triggerfalse
filenameconverted_lora
te_modeoriginal
te_weight1.00
precisionauto
deviceauto
save_folder/tmp/ComfyUI/models/loras

LoRAs look like one thing, but they're really several dialects of the same idea. A kohya/Musubi-trained LoRA stores its weights as lora_down / lora_up with underscores; ComfyUI-native training writes lora_A / lora_B with dots; Forge has its own prefix mapping for Flux. They all encode the same low-rank delta, and they refuse to talk to each other.

Easy LoRA Studio (class name MusubiLoraConverter - a nod to the author's origin story, more on that below) is the translator. It detects what a LoRA actually is, converts it to the format you want, and can shrink it with SVD compression along the way. It's the "universal" LoRA node in this pack, and it also doubles as an analyzer - every run spits out a forensic report of what's in the file.

How it works

The node sniffs both the tensor keys and the embedded training metadata to figure out what it's looking at - double_blocks means Flux.1, lora_unet means SDXL, diffusion_model.layers means Z-Image, and so on. Then, given target_format, it remaps the keys into the destination dialect: Standard WebUI (lora_down/lora_up), Comfy Native (lora_A/lora_B), or Forge-Optimized (underscore + prefix mapping for Flux). Leave target_format on auto and it picks based on the detected structure.

Compression is where it gets useful. compression_mode original leaves the file alone; auto-fast runs a randomized SVD that keeps 95% of the energy; auto-full does the same more carefully and slower; manual lets you set target_rank directly. For a rank-64 Flux LoRA you're rarely going to notice the compression, and you'll enjoy the smaller file.

bake_custom_scale multiplies the up-weight tensors by a factor before baking - 0.5 weakens the LoRA, 2.0 strengthens it. Note it deliberately does not touch the down-weights, so you don't get a double-strength effect.

Inputs that matter

  • lora - the source file (or lora_data chained from a merger).
  • target_format - auto unless you specifically need one dialect.
  • compression_mode - original to start; try auto-fast when you want a smaller file.
  • te_mode - text encoder handling: original, remove (strip TE keys entirely), or scale by te_weight. Handy when you want a vision-only adapter or to boost the prompt side.
  • precision - auto, or force float32 / bfloat16 / float16.
  • save_trigger - preview vs. write. The saved file gets _converted appended.

Outputs: lora (the converted adapter), model and clip (optional - connect them to preview the converted LoRA applied), output_path, and forensic_report.

Installing it

The pack installs through Manager (search "Easy LoRA Merger") or manually:

cd ComfyUI/custom_nodes
git clone https://github.com/Terpentinas/EasyLoRAMerger

Restart ComfyUI. No models to download; it processes whatever LoRAs you already have.

Gotchas

The author built this pack specifically because a Musubi-trained Klein 4B LoRA wouldn't merge with an AI-Toolkit one - so cross-trainer conversions are the sweet spot here, and same-trainer round-trips are easy. One honest caveat from the community: converting is reliable, but "perfect 1:1 fidelity across trainers" is a moving target, so test the converted file at your usual strengths before you overwrite the original. And if you hit auto-fast compression doubt, run the same conversion once with auto-full and compare - the file is bigger, but you'll know what the fast path cost you.

CategoryLoRA/Universal

Inputs (15)

NameTypeDefaultDescription
loraCOMBO1 options: None
target_formatCOMBOautoAuto‑select optimal format based on LoRA structure; otherwise choose manually. Standard (WebUI/Neo) = underscore + lora_down/up; Comfy Native = dot + lora_A/B; Forge‑Optimized = underscore + prefix mapping for Flux
compression_modeCOMBOoriginalOriginal: no compression. Auto-fast: fast randomized SVD preserving 95% energy. Auto-full: full precision SVD preserving 95% energy (slower). Manual: use target rank slider.
target_rankINT1281–320Target rank for manual compression (1‑320). Ignored if compression_mode is not manual.
bake_custom_scaleFLOAT1.00-10–10Multiply up‑weight tensors (lora_up.weight/lora_B.weight) by this factor before baking (e.g., 0.5 weakens the LoRA, 2.0 strengthens). Note: down‑weights are not scaled to avoid double‑strength effect.
save_triggerBOOLEANfalse
filenameSTRINGconverted_lora
modeloptMODEL
clipoptCLIP
lora_dataoptLORA
te_modeoptCOMBOoriginalControl Text Encoder weights: original (keep as‑is), remove (strip TE keys), scale (multiply by te_weight)
te_weightoptFLOAT1.000–5Multiplier for TE weights when te_mode is 'scale'
precisionoptCOMBOauto4 options: auto, float32, bfloat16, float16
deviceoptCOMBOauto3 options: auto, cuda, cpu
save_folderoptSTRING/tmp/ComfyUI/models/loras

Outputs (5)

NameTypeDescription
loraLORA
modelMODEL
clipCLIP
output_pathSTRING
forensic_reportSTRING