Smart Model Loader
One node for the model, the latent and the sampler — and one wire out
- pipe
You know the pile: Load Checkpoint, then a VAE Loader because the checkpoint baked a bad one, then three LoraLoader chains for the same two LoRAs you always use, then Empty Latent Image, then a KSampler with steps and CFG typed in for the fifth time. Smart Model Loader [SML2] collapses that pile into one node with one output. Whether that's a blessing depends on how much you like reading wires - more on that below.
What it actually is
This is a loader that emits a PIPE, not individual MODEL/CLIP/VAE sockets. That's the whole trick, and it's an old one in ComfyUI plumbing: bundle the dozen values every downstream node wants - model, encoder, VAE, latent, sampler settings, seed - into one object that travels down a single wire. rgthree's Context, Efficiency Nodes' SDXL Tuple and Easy-Use's pipe are the same idea with different type names. The trade is legibility for visibility: you stop tracing forty noodles, and you start having to remember what's inside the bundle.
Smart Model Loader goes further than most by putting the editor in the node. Your Model Mode and Include bars are a front end over one serialized configuration string, which is why sections can collapse, drafts survive, and the whole state saves into the workflow and clones intact. Nothing hidden in a bank of widgets.
The Include bar is the design
Model Mode picks the backend: Checkpoint, UNet, GGUF, Nunchaku Flux, Nunchaku Qwen, Nunchaku ZImage. Include then toggles CLIP, VAE, Audio VAE, LoRA, Latent, Sampler, Model sampling and Seed. Sections you close keep their settings but are excluded from execution - that's how you get "model only" mode: disable everything except the model, then pull values out with IO Checkpoint Loader.
A few real constraints worth knowing before you file a bug:
- Checkpoint and UNet modes offer Baked CLIP/VAE only when the file actually contains those weights. Selecting Baked does not conjure them. GGUF and Nunchaku modes are external-only, which is exactly what the GGUF world expects - quantized single-file weights with the text encoder shipped separately.
- Loading a baked CLIP or VAE in UNet mode requires the default weight dtype.
- Latent creation needs a compatible image VAE. Video and audio latents belong in the matching latent nodes, not here.
Inputs and outputs that matter
One input: configuration, the STRING the Jade editor writes for you. You will never type into it, and if you do, validate_inputs will reject it rather than silently run something odd.
One output: pipe. That goes to KSampler Pipe to finish the job, or to IO Checkpoint Loader when you need model, clip, vae or sigmas as individual sockets.
The things you'll actually set: the model file, encoder type and files if you're going external, latent aspect and resolution ("1024²" or megapixels, with a divisible-by that rounds and shows the real width × height), sampler and scheduler, steps/CFG/denoise, and the seed row - which accepts exact 64-bit values and the -1/-2/-3 shortcuts, plus three icon buttons for randomize-each-run, last-queued and new-fixed.
Installing it
Either search Smart Model Loader Nova in ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/r-vage/ComfyUI_SmartModelLoader_Nova.git
cd ComfyUI_SmartModelLoader_Nova
python -m pip install -r requirements.txt
Run that pip with ComfyUI's own Python env, then restart. Requirements are mostly boring - safetensors, huggingface_hub, requests, aiohttp, tqdm, einops - plus gguf>=0.13.0,<0.20 and transformers/sentencepiece/protobuf for the bundled GGUF loader and tokenizer conversion. Don't let pip drag in a new torch or CUDA build; keep your existing one. Nunchaku and PuLID deps are deliberately not installed for you.
No models ship with it. Everything loads from your normal models/ folders.
Where people get burned
Missing filenames stay visible. That's a feature - you can share a workflow without stripping paths - but it means a red-ish filename is on you, and the load stops rather than guessing.
Presets don't carry everything. The 22 bundled presets and anything you save under templates/ exclude denoise, Latent, Advanced settings and seeds. Applying one keeps your current denoise and latent size. People who expect a full snapshot get surprised once.
The pipe hides staleness. If you splice a second loader in mid-graph, it's genuinely hard to see which model version you sampled. The KB's plumbing write-up calls this the context-bus tax, and it's real: keep explicit wires where you're actively iterating.
Finally, if you also run the original Smart Model Loader pack, both install fine - every node here carries an [SML2] ID and lives in its own menu, so existing workflows keep their old nodes until you swap them by hand.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| configuration | STRING | {"clip":{"skip":-2,"source":"baked"},"integrity":"off","memory":{"cleanup":true},"model":{"attentionBackend":"pytorch attention","kind":"checkpoint","options":{},"resource":{"name":""}},"vae":{"source":"baked"},"version":1} | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| pipe | PIPE | — |