Nodes/utility-nodes/Model Loader
ComfyUI Node

Model Loader

One dropdown instead of hunting five model files

By stefanleuker·Created 6 months ago·Updated 6 months ago· 0
Model Loader
  • model
  • model
  • clip
  • vae
  • audio_vae
  • tae
  • steps
◄weight_dtype▾►
◄speed▾►

If you've tried to run Qwen Image 2512, Z-Image Turbo, LTX Video 2.3, WAN 2.2, or Flux2 Klein, you know the pain. These aren't SD checkpoints anymore - the new generation ships as separate pieces: a diffusion model file, a text encoder, a VAE, sometimes a second VAE, plus the right step count and a turbo or distilled LoRA on top. That's five files to find and four nodes to wire, and the exact recommended settings live in five different READMEs. ModelLoader exists to collapse all of that into one dropdown.

How it works

The pack ships a hardcoded table (in model_configs.py) for exactly five models. For each one it knows which files to look for, and it finds them by filename prefix rather than asking you to browse. Pick "Qwen Image 2512" and it scans your diffusion_models folder for something starting qwen-image-2512, your text_encoders for qwen25-vl, your vae folder for qwen-image-vae, and wires the whole chain itself.

Two load strategies under the hood. Most of the five are "components" - it calls ComfyUI's load_diffusion_model, loads the right text encoder via load_clip with the correct CLIPType (qwen_image, ltxv, wan, flux2), then the VAE. LTX Video 2.3 is special: it first tries a checkpoint named ltx-2.3*, and only falls back to individual components if that's missing. And it goes further than a stock loader - pick a speed and it finds the matching LoRA (Qwen's 2-step "wuli turbo" or 8-step lightning, LTX's distilled LoRA) and applies it at full strength, then hands you the step count that setting demands. All the correctness is encoded; you don't have to remember anything.

The inputs that matter

  • model - a UN_MODEL type. This is the trap: it's not a file picker. It must come from the pack's ModelSelector node, which is the dropdown of the five supported models. Wire ModelSelector → ModelLoader or the input stays empty.
  • weight_dtype - default, or one of three fp8 options (fp8_e4m3fn, fp8_e4m3fn_fast, fp8_e5m2). The _fast variant also flips on fp8_optimizations. Great for squeezing big models like Flux2 Klein onto a 12 GB card; if a model doesn't take fp8 well you'll see NaN garbage, so default is the safe starting point.
  • speed - default plus whatever your model offers. The options change per model: Qwen Image 2512 shows 2-step and 8-step, LTX Video 2.3 shows distilled, Z-Image and WAN show only default. The brief's "4 choices" is the union across all models, not what you'll see on any one of them.

The outputs

model, clip, and vae are the obvious three. Then audio_vae and tae - those are LTX Video 2.3 things (its audio and temporal autoencoders); on every other model they come back as None, which is fine. And steps, the INT that matches your speed choice - wire it straight into the sampler's steps input so the distilled path and the step count can't drift apart.

Installing it

ComfyUI Manager, search "utility-nodes", install, restart. Or the manual route:

cd ComfyUI/custom_nodes
git clone https://github.com/stefanleuker/utility-nodes

Restart ComfyUI. There are no pip dependencies and no model downloads - this pack is pure glue over ComfyUI's built-in loaders. The real "install" is having the model files already, named to match.

Where people get burned

  • FileNotFoundError with an expected prefix is the #1 failure. If your Qwen file is named qwen_image_2512.safetensors, it won't match qwen-image-2512 and the loader bails, telling you exactly what prefix it wanted. Rename the file rather than fighting it.
  • A speed LoRA you didn't download. Pick 2-step without the LoRA file present and it silently falls back to default steps with only a console warning - you think you got a fast render and get a 20-step one.
  • It's brand-new and hardcoded to five models. One commit, no real community footprint yet. If your model isn't in model_configs.py, this node does nothing for you - check that table before you build your workflow around it.

For the new-model zoo this is genuinely the loader I'd reach for - it deletes an entire section of wiring. But it's a small, young pack, so treat the hardcoded table as the contract it really is.

Categoryutils

Inputs (3)

NameTypeDefaultDescription
modelUN_MODEL—
weight_dtypeCOMBO4 options: default, fp8_e4m3fn, fp8_e4m3fn_fast, fp8_e5m2
speedCOMBO4 options: default, 2-step, 8-step, distilled

Outputs (6)

NameTypeDescription
modelMODEL—
clipCLIP—
vaeVAE—
audio_vaeVAE—
taeVAE—
stepsINT—