CLIP Text Encode (Streamed LLM, from File)
The Anima encoder node for quantized text encoders
- clip
- conditioning
A narrow node with one job
If CLIP Text Encode (Streamed LLM) is the general-purpose encode node, this is its Anima-only sibling with a file picker bolted on. It encodes the prompt with an LLM text encoder streamed layer by layer from disk, and instead of taking the weights from the CLIP object it can read a separate text-encoder file you point at.
That sounds like a small difference. It's the difference between working and not working when your text encoder is quantized. The streaming engine needs to copy the encoder's weights into pinned RAM, and it can only do that when they're plain tensors it can address. A quantized encoder doesn't offer that. So the file variant reads the file itself and only borrows the tokenizers from the CLIP input - the Qwen3 ids plus the t5xxl ids the Anima LLM adapter needs.
Honest framing: if you're running stock Anima with the official bf16 Qwen3 0.6B encoder, you don't need this node. The regular encode node does the same thing and the encoder fits. This one earns its keep the moment you go off the official file - a quantized encoder, or an encoder large enough that holding it in memory as tensors is exactly the problem.
How it works
The engine reads the encoder file layer by layer, double-buffered, keeping two layers on the GPU at a time. It builds the prompt's embeddings with ComfyUI's own maths for the encode path, so the conditioning matches what you'd get from an unstreamed run. The (from clip) default skips the file read entirely and just uses whatever the CLIP already holds, "nothing read twice" in the author's words - which makes it a legitimately safe default rather than a mode you have to remember to set.
Inputs and outputs
model_name- a list built from ComfyUI'stext_encodersandclipmodel folders, with(from clip)first and selected. Pick a file to stream that file instead. This is the field that makes the node what it is.prompt- the prompt text. Multiline.clip(optional socket, but functionally required) - the Anima CLIP object. Even when you're streaming weights from a file, this supplies the tokenizers. The author's tooltip says it plainly: required.
One output, conditioning, into a KSampler slot.
The failure mode if you get this wrong is loud and specific: the node raises "the CLIP input has no LLM text encoder (no model.embed_tokens); choose the text encoder file in model_name". So if you feed it a non-Anima CLIP and expect streaming, you get an error rather than silently wrong conditioning. That's the good kind of failure.
Install
Part of the pack, so nothing separate:
cd ComfyUI/custom_nodes
git clone https://github.com/nyanmi-1828/ComfyUI-WeightFerry
or Manager → WeightFerry → install → restart. No extra dependencies; requirements.txt is comments only. Anima's official files come from circlestone-labs/Anima on Hugging Face - this node doesn't ship or download any model.
Where it goes wrong
The dropdown is empty or missing your file. The model_name list is built by scanning ComfyUI's text_encoders and clip folders at node-definition time. Drop a new encoder file into the folder while ComfyUI is running and it won't appear - restart (or refresh the node definitions) and it will.
Using it on a non-Anima model. This is advertised as Anima-only and the code enforces it via that model.embed_tokens check. Video models with a T5 encoder, SDXL with CLIP-L/G, Flux with T5+CLIP - use CLIP Text Encode (Streamed LLM) for those; it runs ComfyUI's own encode with the layers streamed and doesn't assume an LLM stack.
Wiring it into a workflow that already had a text encoder loaded. You can save real RAM by using a quantized encoder from file and never loading the big one - but only if nothing else in the graph touches that CLIP. The face-detail pass and the Ultimate SD Upscale pass both want a model and conditioning, not a CLIP, so this usually works out. Check the console if the load time doesn't drop.
Assuming it speeds anything up. It's still a memory node. On a card where the encoder fits, you'll pay transfer cost and get identical output. Keep it wired only if you actually need it, or if you want a drop-in slot for a bigger encoder later - which is exactly why the pack's example workflows use it for a 0.6B encoder that fits.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| model_name | COMBO | (from clip) | (from clip): the text encoder the CLIP input already holds (nothing read twice). A file: stream that file instead (needed for quantized text encoders) |
| prompt | STRING | Prompt text to encode | |
| clipopt | CLIP | Anima CLIP object (required): its tokenizers (the Qwen3 ids and the t5xxl ids for the LLM adapter) and, with model_name (from clip), its weights |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| conditioning | CONDITIONING | — |