小珠光qwenVL
A real vision-language model running on your own GPU, inside the graph
- image
- result
Most of ComfyUI looks at an image and returns a different image. This node (小珠光 qwenVL) looks at an image - and your question about it - and returns text. It runs an actual Qwen3-VL instruct model on your GPU, through HuggingFace transformers, inside the graph. The jobs it's good at are the ones the KB's LLM-in-graph essay lays out: caption an image into a detailed description, analyze composition or style, answer "what's in this frame," then feed that text to a prompt encoder or a video-prompt node. It's a description/understanding model, not a generator.
Mechanically it's the standard transformers Qwen3-VL stack: the model loads from a local directory (the pack looks under ComfyUI/models/LLM/Qwen-VL/), and the node keeps it resident when keep_model_loaded is on so consecutive calls don't reload. You can run the FP8 variants (default) or the full-precision 4B/8B builds, with optional 4-bit/8-bit quantization on top via bitsandbytes for tight VRAM. Image pixels get fed through a min_pixels/max_pixels budget that controls how many vision tokens the image consumes - lower for speed and memory, higher for detail.
Inputs that matter:
- text - your instruction. For captioning: "describe this image in detail." For analysis: ask a question. This is a chat model; prompt it like one.
- model - the checkpoint (Qwen3-VL 4B/8B, Instruct or Thinking, FP8 or full). Thinking variants reason before answering and cost more tokens.
- quantization - none / 4bit / 8bit. This is the VRAM lever. Note the FP8 models are already 8-bit; adding 4bit on top of FP8 is unusual - mostly you pick the FP8 checkpoint as-is, or the full-precision model with a quant.
- keep_model_loaded - leave on unless VRAM is tight.
- temperature - sampling randomness, default 0.7.
- max_tokens - answer length cap, default 1024.
- min_pixels / max_pixels - image token budget (default 20 / 100). Bigger max = sharper vision, fatter VRAM.
- seed -
-1means no fixed seed. - attention - sdpa (default), flash_attention_2, or eager. SDPA is the safe default; flash-attn is faster on Ampere+ if you've installed it.
- image - the optional IMAGE input. Leave it disconnected and it's a plain text LLM.
One output: result (STRING) - the model's answer.
Two honest caveats. First, the dependency weight: this needs transformers>=4.57.1, qwen-vl-utils, and bitsandbytes for quant - all in the pack's declared deps, and all heavy. It also loads models locally only; there's no HF auto-download path, so the checkpoint must actually sit in models/LLM/Qwen-VL/ or you'll get a load error. Second, the quality reality check from the KB: an 8B Qwen3-VL is a solid local captioner, but it can fumble multi-subject attribution - "who's wearing what" gets mixed up - and the Instruct builds carry the usual assistant-style refusals. Fine for SFW scene description and prompt seeds; don't bet a training dataset's accuracy on it.
Install the pack (ComfyUI Manager → ComfyUI-xiaozhuguang), restart, put a Qwen3-VL checkpoint in ComfyUI/models/LLM/Qwen-VL/, and you've got a private, offline vision model in your workflow. The pack's got a Bilibili tutorial if you want the author's worked example.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | — | |
| model | COMBO | Qwen3-VL-4B-Instruct-FP8 | 8 options: Qwen3-VL-4B-Instruct-FP8, Qwen3-VL-4B-Thinking-FP8, Qwen3-VL-8B-Instruct-FP8, Qwen3-VL-8B-Thinking-FP8, Qwen3-VL-4B-Instruct, Qwen3-VL-4B-Thinking, +2 |
| quantization | COMBO | none | 3 options: none, 4bit, 8bit |
| keep_model_loaded | BOOLEAN | true | — |
| temperature | FLOAT | 0.70–1 | — |
| max_tokens | INT | 1024128–256000 | — |
| min_pixels | INT | 2010–50 | — |
| max_pixels | INT | 10050–200 | — |
| seed | INT | -1 | — |
| attention | COMBO | sdpa | 3 options: sdpa, flash_attention_2, eager |
| imageopt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| result | STRING | — |