toobusy Load CLIP
One text encoder loader, and it stops the 'size mismatch' tantrum
- clip
Text encoders are the most annoying part of the modern ComfyUI stack. Flux wants one architecture, Qwen-Image wants another, Wan wants a third, and half the interesting checkpoints are quantized to GGUF or fine-tuned with extra tokens added. toobusy Load CLIP is a single loader that handles safetensors and .gguf files from one dropdown, and it quietly fixes the specific failure that trips people up: a fine-tuned LLM encoder that added special tokens refuses to load into a stock-architecture wrapper with a size mismatch error.
The mechanism is worth understanding because it's why this loader is more than a convenience. The core CLIPLoader (and the GGUF loader) build a fixed-architecture text encoder - say, Llama 3.1 with a 128,256-token embedding - then load the checkpoint into it. A fine-tune like Dolphin that added ChatML tokens has 128,258, and PyTorch's load_state_dict throws. This node temporarily grows the model's affected tensors to match the checkpoint's vocab, loads with every token kept, then restores the original sizing. No token trimming, no permanent changes to anything else in your graph.
Inputs and outputs that matter
clip_name- the file, safetensors or.gguf. Both model folders are merged into one list here.type- the architecture list, same as the core loader (sd3, lumina2, wan, hidream, chroma, and the rest). The tooltip is refreshingly honest: it's ignored for LLM files, because ComfyUI auto-detects the architecture from the checkpoint.fit_model_to_file- defaulttrue, and it's the whole reason this node exists. Off behaves like the normal loader.device-defaultorcpu, if you want to keep the encoder off your GPU.
Output is a single clip, which you wire into your conditioning nodes like any other CLIP.
The trap: loading ≠ generating
Here's where people get burned, and the node description spells it out. For the plain job of encoding prompts, any of these encoders works. But if your plan is to use the CLIP as a prompt enhancer through ComfyUI's Text Generate node, only the Gemma family exposes a generate() method in ComfyUI's wrapper. A Llama checkpoint - including Dolphin, the README's example - loads fine and then routes to an encode-only wrapper with no generate(), so Text Generate fails at runtime. The README's advice is blunt: for prompt expansion, use a Gemma 3 (4B/12B/27B) encoder, an abliterated GGUF if you want it uncensored. The type dropdown won't save you; architecture wins.
Installing it
Part of nicekriss/toobusy, so:
cd ComfyUI/custom_nodes
git clone https://github.com/nicekriss/toobusy.git toobusy
or search "toobusy" in ComfyUI Manager, then restart. One dependency caveat: .gguf files only load when ComfyUI-GGUF is installed - this node delegates GGUF loading to it rather than shipping its own code. If your dropdown shows nothing, that's usually ComfyUI-GGUF missing, not this node.
The honest scope: if you only ever load stock encoders, the core loader is fine and this is redundant. Reach for it when a fine-tuned or GGUF encoder won't load, or when you want one muscle-memory dropdown instead of remembering which loader handles which file type.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| clip_name | COMBO | Text encoder file (safetensors or .gguf). Both folders are merged here. For an LLM prompt enhancer (Text Generate), use a Gemma-family encoder — Llama/Dolphin loads but can't generate. | |
| type | COMBO | lumina2 | Text-encoder architecture (same list as the core CLIPLoader). Ignored for LLM files — ComfyUI auto-detects from the checkpoint. |
| fit_model_to_fileopt | BOOLEAN | true | Grow the model's embedding to the checkpoint's vocab so an added-token LLM (e.g. Dolphin: 128258 vs 128256) loads with every token kept. Off = behave like the normal loader. |
| deviceopt | COMBO | 2 options: default, cpu |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| clip | CLIP | — |