CLIP Generate Text (Image List)
The CLIP node in the Ollama pack — no server, no key, just your model's own tokenizer
- clip
- images
- video
- audio
- generated_text
Here's the twist that makes this node worth a second look: despite living in a pack called Ollama-ImageList, CLIP Generate Text (Image List) never touches Ollama. No server, no URL, no API key. It extends ComfyUI's official Generate Text node, the one from comfy_extras/nodes_textgen.py, with three things the stock node lacks: a real system-role prompt, one-call IMAGE list support, and chat-format auto-detection. If you want the "LLM in the graph" pattern (prompt enhancement, captioning, scene description) without running a second server, this is the on-device path.
The mechanism is the important part, because it's what makes this different from a thousand LLM wrapper nodes. It doesn't load a model - it takes the CLIP object your checkpoint/CLIP loader already created and calls its tokenize(), generate(), and decode() methods directly. That means it reuses the official model implementation's offload, dtype, generation and thinking behavior, and it means it only works with CLIPs that actually implement text generation: Qwen3-VL, Qwen3.5, and Gemma 4 style generation CLIPs. A plain conditioning encoder won't do anything useful here, and the node won't pretend otherwise.
The real subtlety is the system prompt. ComfyUI's CLIP object has no universal system-message slot, so this node builds the model-specific chat template itself. With model_format set to auto it inspects the tokenizer class and picks the Qwen or Gemma template; you can also pin it manually. Empty system uses the stock model template, which means unknown generation CLIPs still behave exactly like the official Generate Text node. But a non-empty system with an unrecognized tokenizer is an error - it refuses to guess at special tokens rather than silently producing garbage. That refusal to fake it is the best feature in the whole node.
The inputs you'll actually set: clip (from a text-generation CLIP loader), system, prompt, and model_format. max_length (default 512) bounds generation, sampling_mode is a dynamic combo, and thinking enables reasoning if the model supports it. images accepts a single, batch, list, or nested list and sends them in one call, preserving each image's resolution - no resizing or montage. video is treated as an image batch at assumed 24 FPS, and audio passes through to models that handle it. One sharp edge: Qwen tokenizers don't consume video or audio, so connecting those inputs errors rather than silently dropping them - same for mixing Gemma video and images. use_default_template (default on) applies the model's chat template; turn it off only when your prompt is already a complete raw template, in which case system isn't allowed.
Output is a single generated_text string, ready for a ShowText node or another step in a pipeline. Thinking output isn't stripped - it comes through in the decode() result like the official node does.
Install is the pack standard:
cd ComfyUI/custom_nodes
git clone https://github.com/craftingmod/ComfyUI-Ollama-ImageList
Then restart. Two requirements to know up front: this pack needs a modern ComfyUI (V3 node API, so 0.19.3+), and you need a generation-capable CLIP model loaded - this is the mid-2026 ecosystem's native-CLIP text generation, the same idea the KB's LLM-in-ComfyUI writeup calls "the LLM you drop into the graph yourself," just running inside the model you already have rather than through Ollama.
If you're already running Ollama, the Ollama Generate node in this pack is arguably simpler. If you want zero extra infrastructure and your Qwen or Gemma CLIP can already generate text, this is the one - it's the leanest way to get a system prompt and a batch of images into a native generation call in a single shot.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | — | |
| system | STRING | — | |
| prompt | STRING | — | |
| model_format | COMBO | auto | Auto-detect the tokenizer, or manually select its chat format. |
| max_length | INT | 5121–32768 | — |
| sampling_mode | COMBO | 2 options: [object Object], [object Object] | |
| imagesopt | IMAGE | — | |
| videoopt | IMAGE | Video frames as one IMAGE batch; assumed to be 24 FPS. | |
| audioopt | AUDIO | — | |
| thinkingopt | BOOLEAN | false | Operate in thinking mode if the model supports it. |
| use_default_templateopt | BOOLEAN | true | Apply the model chat template. Disable only when prompt already contains the complete model-specific template. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| generated_text | STRING | — |