🔥 Easy LoRA Baker
Bake It Straight Into the Checkpoint
- lora_data
- model
- clip
- vae
- output_path
- forensic_report
Every time you load that character LoRA you also have to remember to load the base model, set the weight, and keep track of which LoRAs stack well. There's a simpler life available: bake the LoRA into the checkpoint itself and end up with one file that just works. That's the Easy LoRA Baker. It adds the LoRA's weights into a base checkpoint at the tensor level and hands you a complete MODEL + CLIP + VAE that has the concept permanently.
It's the natural end of a merge pipeline - merge two or three LoRAs in the Easy LoRA Merger, then bake the result into a checkpoint with this node. Handy for distributing a model that includes a style you can't otherwise share, or for locking in a look you never want to forget to load.
How it works
You pick a checkpoint and a LoRA, and the node adds the LoRA deltas into the checkpoint's weights - this is different from stacking LoRAs at load time, which patches the model on the fly. Once baked, there's no LoRA to load; the weights are just in the file. Because LoRAs are tiny deltas, you get to choose how hard you bake: strength (0–2) multiplies the whole adapter, and weight_unet / weight_te / weight_clip / weight_vae scale it per component so you can bake the style but leave the text encoder alone.
The baking_method choices - linear, impact_weighted, orthogonal - are different ways of folding the delta in, and for a first run linear is right. The work streams through in batch_size-sized chunks with a memory guard between batches so it doesn't blow up VRAM or RAM on big checkpoints.
There's also a RAM Guard worth understanding. With save_trigger off (preview mode), the baked result stays in memory with an automatic fallback to disk if you're near the 85% RAM threshold. With save_trigger on, it saves the .safetensors first and then lazy-loads from the file - the low-RAM path, and the one you want for a 12GB checkpoint.
Inputs that matter
checkpoint- the base model. Its siblings (model, clip, vae) come out the other side.lora_data- wire theloraoutput of the Easy LoRA Merger here; it overrides thelora_namedropdown.strength- start at 1.0. Baking is permanent, so test at preview before you commit.precision-auto, or force fp8 to shrink the baked file.save_trigger- the commitment switch. Off = in-RAM preview, on = permanent.safetensors.
Outputs: model, clip, vae (test them downstream immediately), output_path, and forensic_report.
Installing it
Manager (search "Easy LoRA Merger") or:
cd ComfyUI/custom_nodes
git clone https://github.com/Terpentinas/EasyLoRAMerger
Restart ComfyUI. No model downloads.
Gotchas
The big one is obvious but worth stating: baking is one-way in practice. You can't unbake, so keep the original LoRA and checkpoint around. Also don't bake at strength 2.0 and be surprised when the output is overcooked - preview with save_trigger off, exactly like the rest of this pack. One practical note from the ecosystem: baking at high strength tends to look stronger than the same LoRA at high weight at load time, because there's no negative-weight trickery possible afterward. And if RAM is tight on a big model, use save_trigger on rather than fighting the in-memory path.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| checkpointopt | COMBO | 0 options: | |
| lora_dataopt | LORA | LORA output from Triple Merger or LoRA-Only Merger. When connected, overrides lora_name dropdown. | |
| lora_nameopt | COMBO | Pick a single LoRA from dropdown. Used only when lora_data is not connected. | |
| baking_methodopt | COMBO | linear | 3 options: linear, impact_weighted, orthogonal |
| strengthopt | FLOAT | 1.000–2 | LoRA strength multiplier |
| weight_unetopt | FLOAT | 1.000–2 | Per-component weight for U-Net (diffusion model) keys |
| weight_teopt | FLOAT | 1.000–2 | Per-component weight for Text Encoder keys |
| weight_clipopt | FLOAT | 1.000–2 | Per-component weight for CLIP Vision keys |
| weight_vaeopt | FLOAT | 1.000–2 | Per-component weight for VAE keys |
| deviceopt | COMBO | auto | 3 options: auto, cuda, cpu |
| precisionopt | COMBO | auto | 6 options: auto, float32, bfloat16, float16, fp8_e4m3fn, fp8_e5m2 |
| batch_sizeopt | INT | 641–256 | Number of keys to process per batch. Larger = faster but more VRAM. memory_guard() runs between batches to prevent OOM. DeviceManager.suggest_batch_size() can auto-tune based on VRAM. |
| save_triggeropt | BOOLEAN | false | When True: bake LoRA into checkpoint AND save as permanent .safetensors file (low RAM: saves first, then lazy-loads from file). When False: bake in-memory only (preview mode) with automatic RAM Guard fallback — connect MODEL+CLIP+VAE outputs downstream to test results before committing. |
| filenameopt | STRING | baked_checkpoint | Output filename (.safetensors added automatically in disk mode) |
| save_folderopt | STRING | Custom output folder (leave empty for default checkpoints dir) | |
| metadata_modeopt | COMBO | preserve_a | 'none'=baking only, 'preserve_a'=original priority, 'preserve_b'=second-source (fallback to A), 'merge_basic'=baking priority |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| clip | CLIP | — |
| vae | VAE | — |
| output_path | STRING | — |
| forensic_report | STRING | — |