Nodes/EasyLoRAMerger/🧩 Easy Component Combiner
ComfyUI Node

🧩 Easy Component Combiner

Stitch UNet + CLIP + VAE Back Into One Checkpoint

By Terpentinas·Created 7 months ago·Updated 4 months ago· 12
🧩 Easy Component Combiner
  • unet_data
  • clip_data
  • vae_data
  • checkpoint
  • model
  • clip
  • vae
  • output_path
combine_unettrue
combine_cliptrue
combine_vaetrue
precisionauto
deviceauto
save_triggerfalse
save_folder/tmp/ComfyUI/models/checkpoints
filename_prefixcombined

Once you've extracted a checkpoint into its pieces with the Easy Component Extractor, you eventually need to put them back together. That's this node. Easy Component Combiner takes UNet, CLIP, and VAE state dicts and reassembles them into a single full checkpoint you can load like any other model.

It's a small node with a narrow job, but it's the required second half of a useful two-step: split a checkpoint, swap one piece for a merged or better one, and recombine. It's also the cleanest way in this pack to re-emit a checkpoint at a different precision.

How it works

You feed it the raw state dicts - unet_data, clip_data, vae_data (these are the *_data outputs from the Component Extractor, the CHECKPOINT-typed wires, not the file paths). The combine_unet / combine_clip / combine_vae toggles decide which pieces actually go into the result, so you can build a checkpoint that's deliberately missing a VAE or text encoder. precision re-casts the output - auto preserves each source tensor's native dtype, or you can force float32, bfloat16, float16, fp8_e4m3fn, or fp8_e5m2.

The outputs are the usual model, clip, and vae (ready to wire into a sampler immediately), plus a full checkpoint and output_path once save_trigger is on. filename_prefix sets the name (e.g. my_modelmy_model.safetensors), and save_folder overrides the default checkpoints folder.

The inputs that matter

  • unet_data / clip_data / vae_data - wire these from a Component Extractor (or Component Merger, if you're swapping in a merged component).
  • combine_unet / combine_clip / combine_vae - drop the toggle for anything you deliberately left out upstream.
  • precision - the one knob you'll actually reach for. Casting a checkpoint to fp8 here is a legitimate way to shrink it, though the Checkpoint Studio is the more complete tool for that job.
  • save_trigger - off = in-memory preview; on = write the .safetensors.

Installing it

Part of the EasyLoRAMerger pack, so same as every other node here - Manager (search "Easy LoRA Merger") or:

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

Restart ComfyUI. No downloads.

Gotchas

The pieces must actually belong to the same architecture - you can't combine an SDXL UNet with a Flux CLIP and expect anything but an error or garbage. Also keep save_trigger off until you've confirmed the output loads and samples; a half-assembled checkpoint saved to your models folder is clutter you'll trip over later. If you only changed one component (say, a better VAE), the rest of the pipeline is just "extract all → swap one → combine."

CategoryCheckpoint/Utils

Inputs (11)

NameTypeDefaultDescription
combine_unetBOOLEANtrueInclude UNet state dict in combined output
combine_clipBOOLEANtrueInclude CLIP state dict in combined output
combine_vaeBOOLEANtrueInclude VAE state dict in combined output
precisionCOMBOautoOutput precision for combined checkpoint. 'auto' preserves the source tensors' native dtype.
deviceCOMBOauto3 options: auto, cuda, cpu
save_triggerBOOLEANfalseSave combined checkpoint as .safetensors file
unet_dataoptCHECKPOINTUNet state dict (chained from Component Extractor or other node)
clip_dataoptCHECKPOINTCLIP/text-encoder state dict
vae_dataoptCHECKPOINTVAE state dict
save_folderoptSTRING/tmp/ComfyUI/models/checkpointsOutput folder for saved checkpoint (leave empty for default checkpoints dir)
filename_prefixoptSTRINGcombinedPrefix for saved filename (e.g. 'my_model' → my_model.safetensors)

Outputs (5)

NameTypeDescription
checkpointCHECKPOINT
modelMODEL
clipCLIP
vaeVAE
output_pathSTRING