CWK Model Preset Manager
One node that loads your checkpoint and remembers exactly how you like it
- MODEL
- CLIP
- VAE
- LATENT
- steps
- cfg
- sampler_name
- scheduler
- width
- height
- infos
If you've got more than a handful of checkpoints, you know the dance: load a model, then re-set the sampler, scheduler, CFG, steps, and clip skip to whatever that specific model actually wants. Some animes want clip skip 2, some SDXL merges want dpmpp_2m_sde_karras, and a GGUF Flux quant needs an external CLIP and VAE bolted on every single time. CWK Model Preset Manager is the node that stops you doing that by hand. It's part checkpoint loader, part per-model settings database, and part CivitAI-backed model browser - all in one custom-drawn node from the CWK Checkpoints Preset Manager pack by cowneko.
The core trick is that every setting is stored per model in a checkpoint_presets.json file. Load juggernautXL.safetensors and it restores that model's own sampler/scheduler/CFG/steps/clip skip/resolution; load dreamshaper.safetensors and you get a completely different set. Nothing else in stock ComfyUI does this - the built-in loader hands you a bare MODEL/CLIP/VAE and makes you wire up every generation knob yourself. It also remembers the last model you used, so a page refresh or restart puts you right back where you left off.
How it actually works
The node is a real loader under the hood, not a wrapper. It reads from ComfyUI's checkpoints, diffusion_models, and - if you have city96's ComfyUI-GGUF installed - your .gguf files (it finds the GGUF loader at runtime, so it works regardless of how that pack was installed). Then it merges three layers of settings, in order: the model's saved preset, then any override_* inputs you've wired in, then the resolution_preset dropdown if you've set one. It applies clip skip directly on the CLIP (clip.clip_layer()), patches the sampler's RNG source (the CPU/GPU/NV modes come from vendored smZNodes code, so you get cross-GPU reproducible noise without installing smZNodes), and even generates the empty LATENT for you - no separate Empty Latent Image node needed.
The sampler/scheduler fallback is the quiet hero. CivitAI example metadata and A1111 workflows love to say "Euler a" or "DPM++ 2M Karras" - names stock ComfyUI doesn't know. This node runs an alias table, normalizes the naming, and fuzzy-matches to the closest thing you actually have, falling back to euler/simple if it can't find anything. It logs the resolution to the console.
Inputs and outputs that matter
You set one required input, model_name, and then a stack of override_* inputs. Leave any of them at (preset) and the saved preset wins - that's the whole point. The ones you'll actually touch:
override_sampler/override_scheduler/override_cfg/override_steps- one-off tweaks without savingresolution_preset- one-click width/height for SD1.5 (512 base), SDXL/Pony/Flux (1024 base), and Wan (video resolutions)batch_size- 1–64, reflected in the LATENT tensoroverride_clip_name/override_vae_name/override_clip_type- essential for GGUF and diffusion models, which ship with no embedded CLIP or VAE
Outputs are the usual MODEL, CLIP, VAE, LATENT, plus steps, cfg, sampler_name, scheduler, width, height as typed pins - and an infos STRING containing all resolved values as JSON, which feeds its companion node, CWK Infos Extractor.
Installing it
Via ComfyUI Manager, search CWK Checkpoints Preset Manager. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/cowneko/CWK_Checkpoints_Preset_Manager.git
Then restart ComfyUI. There are no pip dependencies to worry about - the whole thing runs on ComfyUI's own stack, which is refreshing. Two optional-but-important extras: ComfyUI-GGUF by city96 if you want to load quantized models, and a CivitAI API key if you want thumbnails, auto-populated presets from example images, update checks, and in-app downloads (the README calls the key required for those features; plain model loading works without it).
Where people get burned
- GGUF models have no embedded CLIP or VAE. Load a
.ggufcheckpoint and forget to set an external CLIP (with the rightClip Type) and VAE, and the node just prints a warning while you stare at a broken pipeline. The README calls this out repeatedly - it's the #1 gotcha. - Clip skip is not free. On SD 1.5 anime checkpoints 2 is the documented setting; on SDXL it mostly does nothing because those encoders already default to the penultimate layer. Don't blanket-set it and wonder why Pony output turned to noise.
- Sampler names from CivitAI don't match yours. That's the fallback's job, but check the console - if it's falling back to
eulerevery time, your preset or metadata had a name nothing could match.
It's a big node on the canvas and the custom UI (load button, thumbnails, dropdowns) takes a beat to get used to. But if you switch models constantly, this is the one you'll actually reach for - a loader that treats "how I like this model" as data instead of a chore.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| model_name | COMBO | 1 options: | |
| override_rngopt | COMBO | 4 options: (preset), cpu, gpu, nv | |
| override_model_samplingopt | COMBO | 6 options: (preset), eps, v_prediction, lcm, x0, img_to_img | |
| override_clip_nameopt | COMBO | 2 options: (preset), embedded | |
| override_clip_typeopt | COMBO | 33 options: (preset), ace, boogu, chroma, cogvideox, cosmos, +27 | |
| override_vae_nameopt | COMBO | 2 options: (preset), embedded | |
| override_sampleropt | COMBO | 45 options: (preset), euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| override_scheduleropt | COMBO | 10 options: (preset), simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| override_cfgopt | FLOAT | 0.00–30 | — |
| override_stepsopt | INT | 00–200 | — |
| override_clip_skipopt | INT | 0-24–0 | — |
| resolution_presetopt | COMBO | 28 options: (preset), SDXL 1:1 (1024×1024), SDXL 3:4 (896×1152), SDXL 4:3 (1152×896), SDXL 2:3 (832×1216), SDXL 3:2 (1216×832), +22 | |
| override_widthopt | INT | 00–8192 | — |
| override_heightopt | INT | 00–8192 | — |
| batch_sizeopt | INT | 11–64 | — |
Outputs (11)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |
| CLIP | CLIP | — |
| VAE | VAE | — |
| LATENT | LATENT | — |
| steps | INT | — |
| cfg | FLOAT | — |
| sampler_name | euler,euler_cfg_pp,euler_ancestral,euler_ancestral_cfg_pp,heun,heunpp2,exp_heun_2_x0,exp_heun_2_x0_sde,dpm_2,dpm_2_ancestral,lms,dpm_fast,dpm_adaptive,dpmpp_2s_ancestral,dpmpp_2s_ancestral_cfg_pp,dpmpp_sde,dpmpp_sde_gpu,dpmpp_2m,dpmpp_2m_cfg_pp,dpmpp_2m_sde,dpmpp_2m_sde_gpu,dpmpp_2m_sde_heun,dpmpp_2m_sde_heun_gpu,dpmpp_3m_sde,dpmpp_3m_sde_gpu,ddpm,lcm,ipndm,ipndm_v,deis,res_multistep,res_multistep_cfg_pp,res_multistep_ancestral,res_multistep_ancestral_cfg_pp,gradient_estimation,gradient_estimation_cfg_pp,er_sde,seeds_2,seeds_3,sa_solver,sa_solver_pece,ddim,uni_pc,uni_pc_bh2 | — |
| scheduler | simple,sgm_uniform,karras,exponential,ddim_uniform,beta,normal,linear_quadratic,kl_optimal | — |
| width | INT | — |
| height | INT | — |
| infos | STRING | — |