Qwen3-VL Describe
Run your Qwen3-VL text encoder as an actual LLM — no llama.cpp, no second model
- clip
- image
- text
Here's a trick people don't expect: the CLIP you already load to condition an image model is itself a language model, and nothing stops you from running it as one. Qwen3-VL Describe from ComfyUI-NynxzNodes does exactly that - it takes a Qwen3-VL text encoder, an image, and a prompt, and generates text through ComfyUI's own inference path. No llama.cpp, no transformers, no separate model eating VRAM. The same qwen3vl_4b / qwen3vl_8b encoder you feed the pack's Text Encode (Fusion) becomes a captioner, prompt expander, or VQA bot on demand.
The author's point is a good one: captioning a reference and fusing it are the same model doing two jobs, so there's no second load and no second VRAM footprint. If you already run a Qwen-Image-family or Krea 2 workflow, this is essentially a free LLM riding on infrastructure you already have.
What you set
clip- the Qwen3-VL text encoder (the same load you use for Fusion/Qwen-Image).prompt- your instruction or question. Defaults to "Describe this image in detail."image(optional) - the picture to look at. Leave it unwired and it's a plain text prompt, which makes this a passable text LLM too.max_tokens(default 256) - generation length cap; the model also stops at its own end-of-turn token, so for simple captions the default usually suffices.system- the system prompt, defaulting to the standard "You are a helpful assistant."
Then the sampling stack - do_sample (on by default), temperature, top_k, top_p, min_p, repetition_penalty, seed. Flip do_sample off and the sampler parameters are ignored for a greedy, deterministic run. For captioning you often want deterministic; for creative prompt expansion, sampling with a bumped temperature is the point. Everything from system down folds into an "advanced" group in the UI, so the collapsed node is friendly.
The single output is text - a string you can pipe into a prompt field, a save node, or the pack's String Template Parser if you want to build workflows around the result.
What it's good for
Auto-captioning batches of images (or generated frames) to build LoRA training data - the Qwen3-VL line is the community's default local captioner for exactly this. Expanding a terse prompt into the fuller phrasing a model prefers. And plain image Q&A, which is more useful than it sounds once you start using it to inspect your own outputs ("what's actually in this frame?").
Install
Part of Nynxz's Custom Nodes: ComfyUI Manager → search "NynxzNodes" and install from the registry, or
cd ComfyUI/custom_nodes
git clone https://github.com/Nynxz/ComfyUI-NynxzNodes
No pip dependencies - this is what makes the "no llama.cpp" claim real. Hand-clones need the frontend built (pnpm install && pnpm build; web/ is gitignored), so prefer Manager/registry. Restart ComfyUI; update ComfyUI if nodes don't register.
Gotchas
The model must actually be a Qwen3-VL encoder for the vision half to work - feeding it a plain CLIP gives you a text-only model that can't see the image. And note the instruct builds carry the usual assistant-style refusals; if you caption NSFW training data, you may hit the same abliterated-build workaround the community uses for Qwen3-VL generally.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | A Qwen3-VL 4B/8B text encoder (as loaded for Qwen-Image). | |
| prompt | STRING | Describe this image in detail. | The instruction / question for the model. |
| system | STRING | You are a helpful assistant. | System prompt. |
| max_tokens | INT | 2561–4096 | Maximum new tokens to generate. Generation also stops at the model's end-of-turn token. |
| do_sample | BOOLEAN | true | Sample (on) vs greedy/deterministic (off). Off ignores temperature/top-k/top-p. |
| temperature | FLOAT | 0.700–2 | — |
| top_k | INT | 500–200 | — |
| top_p | FLOAT | 0.900–1 | — |
| min_p | FLOAT | 0.000–1 | — |
| repetition_penalty | FLOAT | 1.051–2 | — |
| seed | INT | 00–18446744073709550000 | Sampling seed (used when do_sample is on). |
| imageopt | IMAGE | Optional image to look at. Without it this is a plain text prompt. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |