LC Diffusion Model Save
Model-only export when you don't have a clip or VAE to hand
- model
Your merge output is a MODEL. Not a checkpoint - just the diffusion network, sitting in a wire, with no text encoder and no VAE anywhere in the graph. LC Checkpoint Save won't touch it, because that node insists on all three inputs. This is the one you want: MODEL in, file out, no clip or VAE sockets at all.
Why a separate node instead of optional sockets
Because "checkpoint" means something. A checkpoint is an all-in-one file - the whole model hierarchy in one download - and if you made the clip and VAE optional on a saver you'd end up with files named something.safetensors that are sometimes a full model and sometimes two-thirds of one, with no way to tell from the filename. The pack splits that into two nodes so the choice is explicit. It's a small design decision and a good one.
Mechanism-wise this is the same code path as its sibling: comfy.sd.save_checkpoint() with the metadata helper imported from lc_checkpoint_save.py (the author shares it rather than duplicating), just called with clip=None, vae=None. Same metadata rules, same two toggles:
enabled- off writes nothing at all. Handy because save nodes have no outputs, so ComfyUI's native bypass has nothing to pass through; convert this widget to an input and gate it from a switch upstream.embed_workflow- whether the prompt and workflow JSON ride along in the file's metadata, independent of the global--disable-metadataflag. Turn it off before you share the file (see image-io-metadata.md for why that default is a disclosure).
filename_prefix defaults to diffusion_models/LC_ModelBuilder, which is a sensible hint about where the file is meant to end up - but see the gotcha below, because that's not where it's written.
What you get, and the prefix that confuses people
There's one MODEL input, three settings, and no outputs. The file is a .safetensors with the same model.diffusion_model. prefix a full checkpoint's UNet half uses. That's not a bare-key diffusion_models/ export, and it's the thing that makes people think they've done it wrong.
You haven't. ComfyUI's load_diffusion_model_state_dict() auto-detects and strips known UNet prefixes, so the file loads fine through the stock Load Diffusion Model node. The only real cost is size: no clip, no VAE, but the same key-naming convention as a checkpoint's model half, so it'll be a little fatter on disk than a from-source diffusion_models release. For a Krea 2-class 12B model you're already in the tens of gigabytes either way.
Typical wiring: both Krea 2 model nodes emit a MODEL, so either can feed this one, and the same model can go into a KSampler to test before you commit the write:
[LC Krea2 Semantic Vector Tuner] ──model──> [LC Diffusion Model Save]
[LC Krea2 Block Merge Advanced] ──model──> [LC Diffusion Model Save]
Install
No dependencies for this one - no requirements.txt in the pack, and the save path uses only ComfyUI core. ComfyUI Manager: search ComfyUI LC Modelbuilder Nodes. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/lonecatone23/ComfyUI_LC_ModelBuilder_nodes
Restart. If no LC nodes appear in the add-node menu, __init__.py is one level too deep - the pack warns about a nested folder and skips it. (requirements.txt being absent is normal here; the only dependency in the pack belongs to LC Face Variety Scorer, and install.py handles that one.)
The gotcha: output/, not models/
Despite the diffusion_models/ prefix, the file is written under the output directory - the node resolves folder_paths.get_output_directory() and builds the path with get_save_image_path. So you get:
ComfyUI/output/diffusion_models/LC_ModelBuilder_00001_.safetensors
Not ComfyUI/models/diffusion_models/. Nothing in the node logs this loudly, and since the Load Diffusion Model dropdown only lists models/, the usual reaction is "the save didn't happen." It did:
ls -t ComfyUI/output/diffusion_models/ | head
mv ComfyUI/output/diffusion_models/LC_ModelBuilder_00001_.safetensors ComfyUI/models/diffusion_models/
Then refresh the loader node's model list. Two more notes: the counter is five digits and increments per save, so repeated test runs quietly fill your disk with 20 GB files - flip enabled off (or leave embed_workflow off and move the keeper file) once you've got the one you want. And because this node is an output node with no outputs, it runs on every queue while enabled is on, whether you wanted a new file or not.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | Diffusion model to save. No clip/vae -- model only. | |
| filename_prefix | STRING | diffusion_models/LC_ModelBuilder | Subfolder/prefix under the output directory. |
| enabled | BOOLEAN | true | Off = skip the save entirely (no file written), without physically bypassing the node. Convert to an input to gate saving from a switch elsewhere in the graph. |
| embed_workflow | BOOLEAN | true | Include the prompt and workflow JSON in the saved file's metadata. Turn off before sharing/publishing a checkpoint if you don't want your exact node graph attached. |
| metadataopt | COMBO | keep all | keep all = everything this save normally writes (with embed_workflow on, your whole node graph). necessary only = just what loading needs (quant settings, if any) plus the architecture and trigger words: no workflow, no training details, no titles or edit notes. Use it before sharing a file. |
Outputs (0)
No outputs