Nodes/ComfyUI/Save Checkpoint
ComfyUI Node Runs on cloud

Save Checkpoint

The node that turns your merge into a file (and hides it from you)

By Comfy-Org·Created 4 years ago·Updated about 5 hours ago· 130,493
Save Checkpoint
  • model
  • clip
  • vae
    filename_prefixcheckpoints/ComfyUI

    Save Checkpoint (the node class is CheckpointSave) is how you turn a model you've built in the graph - usually a merge - into a .safetensors file you can load again, share, or drag into other software. Every merge workflow that ends in a downloadable checkpoint ends at this node. It's the difference between "I made a nice blend and rendered one picture" and "I made a checkpoint."

    You'll reach for it at the end of a ModelMergeSimple / ModelMergeBlocks pipeline, or after you've fine-tuned a model and want the finished product as a proper checkpoint file. It takes the three standard parts - a MODEL, a CLIP, and a VAE - and packages them into a single file with metadata embedded. That metadata is the ComfyUI signature: the prompt and full workflow JSON get baked into the file, which is why dragging a generated image back into ComfyUI rebuilds the whole graph. When you share a checkpoint, the recipient can see exactly how it was built.

    How it works

    Under the hood it serializes the model, text encoder, and VAE weights into one safetensors file via ComfyUI's save routines, and writes architecture metadata (the modelspec block for SDXL, SD3, SVD, and friends) plus the workflow/prompt. It's an output node - it produces nothing on a wire; it just writes a file and tells you where.

    Here's the gotcha everyone hits on their first merge. The default filename prefix is checkpoints/ComfyUI, and the node saves into your output directory, not your models directory:

    ComfyUI/
    └── output/
        └── checkpoints/
            └── ComfyUI_00001_.safetensors
    

    Your Load Checkpoint node, meanwhile, is looking in models/checkpoints/. The community thread that documents this is a classic: "If you use the Save Checkpoint node, the default location is in ComfyUI/output/checkpoints." People spend a real half hour hunting for the file they just created. If you want the file where Load Checkpoint can find it, either change the prefix to ../models/checkpoints/… or move the file:

    find ~/ComfyUI/output -name "*.safetensors" | tail
    # move a saved checkpoint into models/checkpoints:
    mv ~/ComfyUI/output/checkpoints/ComfyUI_00001_.safetensors ~/ComfyUI/models/checkpoints/
    

    The counter in the filename (_00001_, _00002_) auto-increments so you never overwrite - each run of the graph makes a new file, which means repeated runs can silently fill your output folder with checkpoint-sized files.

    The inputs that matter

    • model (MODEL) - the diffusion model, e.g. the output of a merge node.
    • clip (CLIP) - the text encoder to bundle. Wire from your Load CLIP.
    • vae (VAE) - the VAE. Usually the same one you loaded; mismatched VAEs are the classic cause of washed-out/gray generations later.
    • filename_prefix (STRING, default checkpoints/ComfyUI) - where and under what name it saves. This is the input you'll actually edit.

    Where people get burned

    Beyond the output-vs-models confusion: don't expect a merge saved here to be identical to its parents' lineage. The checkpoint KB is blunt that most community checkpoints are merges and that merge lineages inherit each other's defects - saving a merge doesn't make it coherent, it just makes it permanent. Test the merged model by sampling before you commit to a multi-GB save. And keep the license question in mind: if either input model has restrictions, the merged checkpoint inherits them.

    How you get it

    Ships with ComfyUI core under model/merging - no install. The merge-and-save workflow is as old as ComfyUI itself.

    Categorymodel/merging

    Inputs (4)

    NameTypeDefaultDescription
    modelMODEL
    clipCLIP
    vaeVAE
    filename_prefixSTRINGcheckpoints/ComfyUI

    Outputs (0)

    No outputs