⭐ Star Checkpoint Saver (AIO)
Your LoRA stack dies when you close the tab — this node writes it to disk
- model
- clip
- vae
- clip_vision
What it is, and why you'd reach for it
Everything ComfyUI does happens in RAM. You load a checkpoint, stack three LoRAs on it, merge two models with ModelMergeBlocks - and the second you close the tab, all of it is gone. What survives is the original file you loaded. ⭐ Star Checkpoint Saver (AIO) is the exit door: give it a MODEL, a CLIP and a VAE and it writes them out as one .safetensors checkpoint you can drop into models/checkpoints and load like any other.
Three times you'll actually want it. Baking a LoRA stack into a checkpoint so a workflow you hand someone doesn't demand they own your LoRAs. Turning a merge experiment into a file instead of a session you'll never reproduce. And building an AIO checkpoint by hand from parts - a UNet out of diffusion_models, a text encoder, a VAE - so next time one node loads the bundle.
Worth knowing up front: this exists to work around a ComfyUI bug, not to add a feature.
How it works
Underneath, it wraps ComfyUI's own save_checkpoint() from comfy_extras.nodes_model_merging - literally the function behind the stock Save Checkpoint node. It builds the saving state dict (model, clip, vae, plus clip_vision if you supplied one), embeds the workflow metadata in the file header, and writes <output>/checkpoints/<prefix>_00001_.safetensors. Plain safetensors, no pickle anywhere in the path. So the mechanics are core behavior. Two things differ.
The first is the optional clip_vision input, which the stock node doesn't have. If your stack uses a CLIP Vision encoder, this saves it into the same file.
The second difference is the whole point. Currently ComfyUI wraps weights during saving in LazyCastingParam / LazyCastingParamPiece - torch.nn.Parameter subclasses that cast on demand when safetensors asks for the tensor. Parameter defaults to requires_grad=True, and PyTorch flatly refuses that for integer dtypes. Packed 4-bit weights are integer dtypes: NVFP4 stores its quantized payload as uint8. So on the core node, saving a mixed-precision AIO - NVFP4 model, NVFP4 text encoder, a BF16 VAE - dies with Only Tensors of floating point and complex dtype can require gradients. StarNodes ships install_lazy_quant_save_fix(), which patches __new__ on those two classes to pass requires_grad=False for anything non-float. Idempotent, only touches the affected wrappers, and silently skips if a future ComfyUI renames them.
Monkeypatching another project's internals is fragile - but unlike a ComfyUI fork, a custom node survives the updates that overwrite core files. If Comfy reshuffles those class names, quantized saves start erroring again.
The inputs that matter
Four fields, three of them required: model, clip, vae, and filename_prefix, which defaults to checkpoints/StarCheckpointSave - so your file lands in output/checkpoints/, and a slash in the prefix sorts it into subfolders. The only optional input is clip_vision; wire it when your stack uses one and you want it in the same file.
There are no outputs - it's an output node, so it runs because nothing depends on it. Hang it off whatever produced your final model: LoRA loader → saver, merge → saver, fp8 converter or Model Packer → saver.
Install
ComfyUI Manager, search Starnodes, install, restart. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/Starnodes2024/ComfyUI_StarNodes
cd ComfyUI_StarNodes
pip install -r requirements.txt
That requirements.txt is for the pack's other hundred-odd nodes (psd-tools, opencv-python, imageio-ffmpeg, ollama and friends) - this node needs nothing beyond core. The pack's install.py deliberately installs nothing at all: if a dependency is missing, only the affected node is skipped and the console tells you what to pip install. It lives under ⭐StarNodes/Helpers And Tools.
Where people get burned
The file lands in output/checkpoints/, not models/checkpoints/. ComfyUI won't offer it in a Load Checkpoint dropdown until you move it there and refresh. This is the single most common "where did my checkpoint go".
Serialization is a load, not a copy. The save path pushes the model and the CLIP onto the compute device to materialize the weights, so a model that only just fit can OOM at save time. Save before VRAM is full, or run --lowvram.
A 30GB write looks like a freeze. Several minutes of unresponsive UI is normal. It's not hung.
Quantized round-trips are the version-sensitive path. The fix targets those lazy-caster wrappers specifically, so save the original and confirm the new file loads and samples before you delete anything.
Licences apply to the weights, not the outputs. The "use generated images commercially" clause doesn't cover redistributing a merge. Plenty of model licences explicitly bar publishing derivatives - FLUX.1 dev's is the classic example - so read them first.
It's a big, fast-moving pack. 100+ nodes, version 3.0.4, one solo dev shipping constantly - and one low-scored r/StableDiffusion comment claiming a Manager install "completely bricked" that setup. One report isn't a pattern, but keep it deletable.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| vae | VAE | — | |
| filename_prefix | STRING | checkpoints/StarCheckpointSave | — |
| clip_visionopt | CLIP_VISION | — |
Outputs (0)
No outputs