ComfyUI Extension: EasyLoRAMerger
Run ComfyUI workflows without the setup
No installs, no CUDA version roulette, no GPU sitting idle on your bill. Bring a workflow and run it in the browser.
A versatile LoRA merger for Flux (4B/9B/Dev), Z-Image, and SDXL. Features cross-architecture scaling, weight normalization, and live model baking.
Looking for a different extension?
Custom Nodes (0)
README
🛠️ Easy LoRA Merger Suite
Complexity Made Simple — Merge Anything
The Easy LoRA Merger Suite gives you a complete toolkit to merge, convert, extract, bake, and audit LoRAs and checkpoints — without worrying about tensor dimensions, sparsity mismatches, or arcane scaling math.
Every node is built with the same philosophy: powerful defaults when you need simplicity, full control when you need precision.
🔍 All Nodes at a Glance

The complete node suite — drag, connect, and merge.
📦 Node Catalog
| Node | Display Name | Purpose | |------|-------------|---------| | 🎨 | Easy LoRA Merger | Merge 2–3 LoRAs with 15+ methods, auto‑format detection, smart defaults, and forensic reports. The core workhorse. | | 🛡️ | Easy LoRA Studio | Universal LoRA analyzer and converter. Transforms between Standard WebUI, Comfy Native, and Forge‑Optimized formats. SVD compression, TE scaling, weight adjustment. | | 🛡️ | Easy Checkpoint Studio | Precision surgery for full checkpoints — precision casting FP8/BF16/FP32, component stripping VAE/TE/CLIP, SVD compression, and structural remapping. | | 🎨 | Easy Checkpoint Merger | Merge 2–3 full model checkpoints with Weight Block Map component‑wise scaling. Streaming engine for low RAM usage. | | 🔬 | Easy LoRA Extractor | Extract a LoRA from the delta between a base and fine‑tuned checkpoint. SVD decomposition with auto‑energy rank selection. | | 🔧 | Easy Component Extractor | Split a checkpoint into its building blocks — extract UNet, CLIP, or VAE as separate files with precision control. | | 🧩 | Easy Component Combiner | Reassemble extracted UNet + CLIP + VAE components back into a single full checkpoint. | | 🧩 | Easy Component Merger | Merge 2–3 component state dicts (e.g., two different CLIP sets or UNets) using the full merge method suite. | | 🔥 | Easy LoRA Baker | Bake a LoRA (or merged LoRA) directly into a full checkpoint at the tensor level. Produces MODEL+CLIP+VAE with RAM Guard fallback. |
🎯 Merge Methods
| Method | Best for | Works on Checkpoints? | |--------|----------|:---------------------:| | linear | Simple weighted average — the safe starting point for any merge | ✅ Yes | | cross | Blending with a cross‑magnitude interaction term for richer mixes | ✅ Yes | | ties_strict | Conflicting styles — only keeps weights where both sources agree | ⚠️ Limited (all-positive weights reduce effect) | | ties_gentle | Softer version of TIES — applies only to strong disagreements | ⚠️ Limited (all-positive weights reduce effect) | | ties_contrast | Amplify differences between two sources, mute agreements | ⚠️ Limited (best on LoRA deltas) | | dare_lite | Random dropout — creates sparse, stochastic blends | ❌ LoRA only (risky on checkpoint weights) | | dare_rescale | Random dropout with rescaling — preserves magnitude distribution | ❌ LoRA only (risky on checkpoint weights) | | magnitude | Keep the stronger signal per-element from either source | ✅ Yes | | subtract | Remove unwanted features by subtracting one source from another | ✅ Yes | | feature_mix | Preserve unique features from each source — great for style + character | ✅ Yes | | slerp | Smooth spherical interpolation between two vectors | ✅ Yes (2‑way only) | | svd_preserve | SVD‑based rank reduction — keeps core structure while reducing noise | ✅ Yes | | block_swap | Swap blocks between sources using a seeded random pattern | ✅ Yes | | noise_aware | Suppress small noise values before merging for cleaner results | ✅ Yes | | gradient_alignment | Weight contributions by directional similarity between sources | ✅ Yes |
💡 Tip: When in doubt, start with
linearormagnitude— they're the most versatile and work well across LoRAs and checkpoints alike.
🧠 Smart Diagnostics
Every merge node outputs a detailed forensic report with:
- ✅ Alignment verification — cross‑architecture key matching stats
- 📊 Layer‑by‑layer statistics — energy distribution, sparsity, component breakdown
- ⚠️ Clear warnings — mismatched trainers, conflicting trigger words, density risks
- 🔍 Sparsity + scaling reports — magnitude distribution per layer
Console output keeps you informed at every step without overwhelming.
🏗️ Supported Architectures (aspirational — not all fully tested)
| Architecture | Status | |-------------|--------| | Flux.1‑Dev / Flux.1‑S | Tested | | Flux Klein 4B / 9B | Tested | | Z‑Image Turbo / Base | Tested | | SDXL | Tested | | SD1.5 | Tested | | Anima | Early support | | Lumina 2 | Early support | | SD3 | Experimental |
🚀 Get Started
- Download: github.com/Terpentinas/EasyLoRAMerger
- Install: Drop into
ComfyUI/custom_nodes/and restart ComfyUI. - Explore: Drag
assets/nodes.pnginto the workflow area to see the suite in action. - Experiment: Connect a Easy LoRA Merger → Easy LoRA Baker pipeline, or use Easy Checkpoint Studio to shrink a 12GB checkpoint to FP8.
- Optional — GGUF export: Install
pip install ggufto enable GGUF output format in Easy Checkpoint Studio. GGUF files are loaded with the ComfyUI-GGUF custom node. All other Easy LoRA Merger nodes work without either dependency. - Feedback: Open an issue on GitHub — contributions and ideas welcome.
⚙️ Precision Options
Different nodes expose different precision tiers depending on their capabilities:
Standard Tier — all float formats
Used by: Easy LoRA Merger, Easy LoRA Studio
| Option | Behavior |
|--------|----------|
| auto | Auto-select — defaults to BF16 on supported GPUs |
| float32 | Full precision, 4 bytes/param — maximum quality |
| bfloat16 | Half precision, 2 bytes/param — good balance |
| float16 | Half precision, 2 bytes/param — good balance |
Extended Tier — adds FP8 support
Used by: Easy Checkpoint Merger, Easy Component Extractor, Easy Component Combiner, Easy Component Merger, Easy LoRA Baker
| Option | Behavior |
|--------|----------|
| (all Standard options above) | |
| fp8_e4m3fn | FP8 quantization, 1 byte/param — memory efficient |
| fp8_e5m2 | FP8 quantization (wider range) — memory efficient |
Studio Tier — full conversion toolkit
Used by: Easy Checkpoint Studio
| Option | Behavior |
|--------|----------|
| (all Extended options above) | |
| int8 | Explicit INT8 quantization, 1 byte/param |
| int8_convrot | INT8 with convolution rotation handling |
| svd_only | SVD compression only, no dtype conversion |
| gguf_q8_0 / gguf_q5_0 / gguf_q4_0 | Block‑wise GGUF quantization — requires gguf Python package (pip install gguf). Output loads with ComfyUI-GGUF nodes. |
💡 Tip: For everyday use, just leave it on
auto. The nodes will pick the best format for your hardware automatically.⚠️ Note: The
ggufpackage is optional. All nodes work without it — GGUF output is only available in Easy Checkpoint Studio whenggufis installed. If missing, GGUF options are hidden from the dropdown and the Checkpoint Studio loads gracefully without them.
📐 Design Philosophy
The suite is engineered for stability and SSD-friendly operation:
- No unnecessary disk writes — intermediate data stays in RAM. Temp files are created only when RAM Guard activates or
save_trigger=True. - Clean resource management — file handles from checkpoint loading are closed immediately after model objects are constructed, preventing stale handles from causing I/O during garbage collection.
- Predictable performance — no background cleanup threads. All file I/O is explicit and happens at known points in the pipeline.
- Memory-efficient streaming — large checkpoints are processed in configurable batch sizes, keeping peak RAM usage under control.
💾 Saving Your Merged Models
Every node with save capability exposes three controls: save_trigger, save_folder, and filename.
How save_trigger Works
| Toggle | Behavior |
|--------|----------|
| False (default) | Preview mode — merge runs, MODEL+CLIP+VAE outputs are returned for testing, but no file is written to disk. |
| True | Save mode — result is written to a .safetensors file, then loaded from that file (or RAM) for downstream use. |
💡 Start with
save_trigger=Falseto test your merge settings. Toggle it toTrueonly when you're happy with the result.
Save Locations
- Checkpoint nodes (Checkpoint Merger, Baker) →
ComfyUI/models/checkpoints/ - LoRA nodes (LoRA Merger, LoRA Studio) →
ComfyUI/models/loras/
You can override the location with save_folder:
| save_folder value | Example | Where it saves |
|--------------------|---------|---------------|
| Empty | "" | ComfyUI default folder |
| Relative path | "my_merges" | default/my_merges/merged.safetensors |
| Absolute path | "D:\\ModelMerges" | D:/ModelMerges/merged.safetensors |
Filename & Auto-Increment
The filename parameter sets the output name (.safetensors is appended automatically).
If a file with that name already exists, most nodes auto-increment:
merged_checkpoint→merged_checkpoint_1→merged_checkpoint_2...triple_merged→triple_merged_1→triple_merged_2...
ℹ️ Studio & Converter nodes (Checkpoint Studio, LoRA Studio) add
_convertedbefore the extension:name_converted.safetensors,name_converted_1.safetensors.
⚖️ Weight Guidance
The global weights (weight_a, weight_b, weight_c) multiply with component weights (weight_unet, weight_clip, weight_vae, weight_te) to determine the effective strength per component.
Key Insight: Checkpoints vs LoRAs
| Type | What the weights multiply | Guidance |
|------|--------------------------|----------|
| Checkpoints | Absolute weight values (large, ~1.0 scale) | For linear: weights should sum close to 1.0 (e.g., 0.5 + 0.5, 0.7 + 0.3). With 1.0 + 1.0 the output becomes A + B — doubling magnitudes, resulting in noise. |
| LoRAs | Small delta values (≈1e‑3 scale) | Weights are independent — feel free to experiment. LoRAs are fast to iterate on. |
General Approach
- Start with equal weights —
0.5 + 0.5for checkpoints,1.0 + 1.0for LoRAs. - Use
save_trigger=False(preview mode) to test without cluttering your disk. - Adjust one weight at a time — small increments (0.05–0.1) and see how the output changes.
- Different architectures (Flux, SDXL, SD1.5, Z‑Image) may respond differently to the same weights — trust your eyes.
Per-Method Notes
| Method | Weight behavior |
|--------|---------------|
| linear | Direct weighted sum. For checkpoints: result = A×wa + B×wb — sum should be ≈1.0. For LoRAs: any values work. |
| feature_mix | Preserves unique features per-element. 1.0 + 1.0 is fine — not additive. |
| magnitude | Takes the larger signal per-element from either source. 1.0 + 1.0 is fine. |
| slerp | Uses \|weight\| as interpolation factor. Sign is discarded. |
| subtract | wa controls source strength, wb controls how much of B to remove. |
| ties_* | Sign-based. Limited effect on all-positive checkpoint weights. |
| dare_* | Uses density for sparsification, not weight sum. Risky on checkpoints. |
💡 The best weights depend on your models and goal. These are starting points, not rules. The suite is designed for exploration — iterate and find what works for your specific combination.
Built because merging different model formats shouldn't require a PhD in tensor math. 💪
Run ComfyUI workflows without the setup
No installs, no CUDA version roulette, no GPU sitting idle on your bill. Bring a workflow and run it in the browser.