CMK Checkpoint VAE Loader
One node instead of a checkpoint loader, a VAE loader and a switch
- model
- clip
- vae
- log_pipe
Every SDXL workflow worth keeping has the same three-node preamble: CheckpointLoaderSimple, a VAELoader, and some way of choosing between the checkpoint's baked VAE and the external one. CMK Checkpoint VAE Loader collapses that into a single node with one boolean. It's not a clever node. It's a node that removes a decision you keep re-making.
What it is
It lives in the pack's toolbox - CMK/Toolbox/Model & LoRA - which in CMK Flow terms means "standalone, wire it however you like." CMK Flow itself is a one-person project by Carsten Kirschner (CMKFlow), released as open source in July 2026 under GPL-3.0. Its -Pipe- nodes are a guided modular system; everything under CMK/Toolbox/ is the open box of loose parts. This is a loose part, and it's the one most people will meet first because it replaces the boring bit.
How it works
Mechanically it's the core loader with a branch. It calls load_checkpoint_guess_config on the checkpoint - the same "guess whether this is SD1.5 or SDXL" logic ComfyUI's own loader uses - and pulls three things out of it: model, CLIP, and whatever VAE the checkpoint happens to carry.
Then checkpoint_vae decides which VAE you get:
true(the default): you get the VAE that's inside the checkpoint file.false: the node loadsvae_namefromComfyUI/models/vaeand uses that instead.
That's the whole switch, and it's the one that matters. If you've been in this hobby for more than a week you've hit the desaturated, grey, washed-out render that means the checkpoint's baked VAE is wrong for the model - the classic Anything v3 purple-bruise era problem, and still alive on fine-tunes that don't mention which VAE they want. Being able to flip one boolean instead of rewiring a loaded VAE is worth the install on its own.
The three widget values you actually touch:
ckpt_name- the checkpoint, frommodels/checkpoints.vae_name- frommodels/vae. Only read whencheckpoint_vaeisfalse, so it's harmless to leave on the default.checkpoint_vae- the switch above.
Outputs are model, clip, vae and log_pipe. The first three are the standard MODEL/CLIP/VAE sockets that every sampler, CLIP Text Encode and VAE Decode expects. log_pipe is a CMK_LOG_PIPE - a structured log block you can chain into the pack's log concat and visualizer, so the run records which VAE was used. Handy when you're comparing two VAEs and can't remember which image came from which.
Install
Through the ComfyUI Manager: search CMK Flow, install the entry from CMKFlow, restart. The registry package is cmk-flow. Or by hand, from the folder containing main.py:
git clone https://github.com/CMKFlow/cmk_nodes.git custom_nodes/cmk_nodes
python3 custom_nodes/cmk_nodes/scripts/install_cmk_requirements.py
The install helper finds the Python environment ComfyUI is actually using and installs requirements.txt into it - which matters if you're on ComfyUI Desktop, where system Python, standalone-env and .venv all sit next to each other. You want the last line to read CMK dependency check: OK. Then restart. The pack also wants ComfyUI's Vue Nodes / Nodes 2.0 setting on; CMK's dynamic nodes fall back to plain LiteGraph widgets without it and will nag you at startup.
There is nothing to download for this node specifically - it loads what you already have.
Issues worth knowing
If vae_name seems to do nothing, that's correct behaviour: it's ignored while checkpoint_vae is true.
The bigger trap is the 2026 one. On SDXL and Illustrious the VAE is usually baked and you can leave this alone forever. On newer architectures the VAE is frequently a separate file you download yourself, listed on the model card next to a separate text encoder - and a workflow that errors on a missing VAE usually means someone grabbed the diffusion weights and skipped the companions. This node won't help you there; it only looks in models/vae, so put the file where ComfyUI can see it first. If you use a shared model folder, CMK's resource check can find and register it:
python3 custom_nodes/cmk_nodes/scripts/check_cmk_resources.py --models-root "/path/to/shared/models"
One last thing: guess_config is a guess. It's right for virtually every .safetensors checkpoint you'll download, and it's the same guess core ComfyUI makes, so if it fails, core would have failed too.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| ckpt_name | COMBO | 0 options: | |
| vae_name | COMBO | 0 options: | |
| checkpoint_vae | BOOLEAN | true | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| clip | CLIP | — |
| vae | VAE | — |
| log_pipe | CMK_LOG_PIPE | — |