QwenVL Advanced (GGUF)
The GGUF QwenVL node with llama.cpp's whole control panel
- image
- video
- RESPONSE
"QwenVL Advanced (GGUF)" is the llama.cpp equivalent of the transformers Advanced node: same GGUF vision pipeline as its plain sibling - Qwen3-VL .gguf weights plus an mmproj projector, auto-downloaded into models/llm/GGUF, driven through llama-cpp-python - but with llama.cpp's full tuning surface exposed. Same pack, same install, same two-file model format. The reason to use this over the plain GGUF node is when the defaults don't fit your hardware: llama.cpp has its own VRAM, context, and batch dials, and sometimes you need them.
What the extra knobs actually do
Start with the ones that matter most. gpu_layers (default -1 = all) controls how many layers get offloaded to the GPU; set it lower to leave VRAM for your diffusion model. ctx is the context window in tokens - 8192 by default, and this matters more than it does for a text LLM because each sampled video frame eats context tokens. n_batch is how many tokens llama.cpp processes per batch; the default 512 is fine, raising it speeds up long prompts at the cost of a bit more memory. image_max_tokens (default 4096) is the token budget the vision projector gets per image - the single most important dial for caption quality, since a cramped budget means the model literally can't "see" all of a busy image.
Then the sampling row, which mirrors the transformer Advanced node: temperature (0.6), top_p (0.9), top_k (0 = off), and repetition_penalty (1.2). Same logic as before - lower temperature for disciplined training captions, higher for creative descriptions - with top_k as an extra llama.cpp-native trim. frame_count (default 16) samples video inputs down before prompting, pool_size is the llama.cpp KV-cache pool size in bytes (you almost never touch it), and device lets you force cpu or mps instead of auto. max_tokens goes to 4096 here, up from 2048 on the plain version.
The inputs that matter
- gpu_layers - your VRAM trade dial; drop it if the captioner and the sampler are fighting.
- image_max_tokens - raise it if captions miss details in busy images; each token is vision budget, not text.
- ctx - raise it for long video-plus-prompt inputs; watch that it eats VRAM on a llama.cpp model.
- temperature / top_p - the quality-vs-creativity pair from every other node in this pack.
Inputs are image and video (this version drops the extra image_2/image_3 sockets of the plain node), output is a single RESPONSE string, and like the plain GGUF node it is not an output node - wire RESPONSE into a ShowText, aistudynow_SaveText, or your conditioning path to see or use the text.
Getting it
The full pack install applies unchanged - ComfyUI Manager, search "ComfyUI-QwenVL", or:
cd ComfyUI/custom_nodes
git clone https://github.com/aistudynow/ComfyUI-QwenVL
The one thing to budget for is llama-cpp-python, the pack's heaviest dependency: it compiles from source and wants a C/C++ toolchain, so the install can take several minutes or need a prebuilt wheel for your Python version. Every model in the pick list (4B/8B, Instruct/Thinking, F16/Q8_0/Q4_K_M) downloads on first use along with its mmproj projector into models/llm/GGUF.
Where people get burned
The classic mistake is cranking ctx to "big" and then wondering why the card fills up - every context token is held in the KV cache, so a 131k context on a 4B is a memory decision, not a freebie. Second, if captions come back oddly short or vague on detailed images, that's image_max_tokens starving the vision side, not the model being dumb. Third, an entry that downloaded without its mmproj file runs and silently ignores images - the console warns, but you may never look at the console. And if gpu_layers is set low enough to spill the model to CPU, generation gets dramatically slower; llama.cpp will do it, but that's the "why is this taking a minute per caption" answer. The plain GGUF node is the right starting point; this one exists for when the defaults are on the wrong side of your GPU budget.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| model_name | COMBO | Qwen3VL-4B-Instruct-F16.gguf | 12 options: Qwen3VL-4B-Instruct-F16.gguf, Qwen3VL-4B-Instruct-Q4_K_M.gguf, Qwen3VL-4B-Instruct-Q8_0.gguf, Qwen3VL-4B-Thinking-F16.gguf, Qwen3VL-4B-Thinking-Q4_K_M.gguf, Qwen3VL-4B-Thinking-Q8_0.gguf, +6 |
| device | COMBO | auto | 3 options: auto, cpu, mps |
| preset_prompt | COMBO | 🖼️ Detailed Description | 9 options: 🖼️ Tags, 🖼️ Simple Description, 🖼️ Detailed Description, 🖼️ Ultra Detailed Description, 🎬 Cinematic Description, 🖼️ Detailed Analysis, +3 |
| custom_prompt | STRING | — | |
| max_tokens | INT | 51264–4096 | — |
| temperature | FLOAT | 0.600–2 | — |
| top_p | FLOAT | 0.900–1 | — |
| repetition_penalty | FLOAT | 1.200.5–2 | — |
| frame_count | INT | 161–64 | — |
| ctx | INT | 81921024–262144 | — |
| n_batch | INT | 51264–32768 | — |
| gpu_layers | INT | -1-1–200 | — |
| image_max_tokens | INT | 4096256–1024000 | — |
| top_k | INT | 00–32768 | — |
| pool_size | INT | 41943041048576–10485760 | — |
| keep_model_loaded | BOOLEAN | true | — |
| seed | INT | 11–4294967295 | — |
| imageopt | IMAGE | — | |
| videoopt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| RESPONSE | STRING | — |