QwenVL-F Advanced (GGUF)
The Qwen-VL GGUF node with everything on the table (and the mmproj selector)
- image
- image2
- image3
- video
- RESPONSE
This is the node the fork is actually about. QwenVL-F Advanced (GGUF) is the screenshot on the README, the one with a knob for everything: the llama.cpp GGUF vision engine, an explicit mmproj_name selector, context and batch sizes, GPU offload, image token budgets, three image inputs, and even Gemma 4 support on top of the Qwen line. If the simple GGUF node is "run the defaults," this one is "build it your way."
The pitch: run Qwen3-VL vision-language models from single-file .gguf quants, so a Q4_K_M on a modest card behaves, and you control exactly how llama.cpp spends your memory. The cost is that every file and every knob is on you.
The dials that matter
mmproj_name- the fork's signature addition. Every*mmproj*.ggufon disk shows up here;auto(default) picks the projector sitting next to your model. You only touch it when you have several projectors lying around or the auto-pick grabs the wrong one.ctxandn_batch- context length (default 32768, up to 262144) and batch size (default 8192). Biggerctxmeans longer conversations/captions but more KV cache memory.n_batchis a speed/VRAM tradeoff.gpu_layers- how many layers offload to the GPU.-1means all of them; on a low-VRAM card, start there and step down until it fits. Set this before anything else if llama.cpp is crashing on load.image_max_tokens/image_min_tokens- the token budget for the vision encoder (defaults 8192 / 1024). These control how much visual detail survives into the model; too low and fine details blur into caption mush.top_k,temperature,top_p,repetition_penalty- the sampling set.top_k0 means off.frame_countfor video,pool_size(llama.cpp's memory pool, default ~4 MB),stop_words,enable_thinking,keep_model_loaded,seed.
And the three IMAGE inputs (image, image2, image3) for multi-image analysis, plus video. One RESPONSE string out - wire it to a text encoder, a display, or a caption pipeline.
Install - same fork rule, heavier dependency
Model discovery is identical to the rest of the pack: the dropdowns scan models/text_encoders and models/LLM recursively, nothing downloads itself, and a missing model raises an error listing the folders checked. The dependency is the part to get right:
cd ComfyUI/custom_nodes
git clone https://github.com/id-fa/ComfyUI-QwenVL-F
pip install -r requirements.txt
python tools/install_helper.py --python "C:\AI\ComfyUI\python_embeded\python.exe" --run
The helper resolves your CUDA version (from nvidia-smi, falling back to nvcc, then torch.version.cuda) and installs the matching JamePeng llama-cpp-python vision wheel plus a CUDA PyTorch. It installs nothing unless you pass --run - run it once without to see the plan. The wheel must include the Qwen3VLChatHandler / Qwen25VLChatHandler chat handlers, or every run dies with an ImportError.
Common issues
- Gemma 4
.gguf- auto-detected by filename and switched toGemma4ChatHandler, but that needs the JamePeng fork at v0.3.35+. Olderllama-cpp-pythonraises ImportError on load; that's the error message telling you to update, not a model problem. - OOM on load - drop
gpu_layers, shrinkctx, or moveimage_max_tokensdown before blaming the model. - Wrong projector - if captions are garbage or the model won't load, check which
mmprojis actually being used instead of trustingauto. - Censored output - the Qwen3-VL Instruct quants carry the usual assistant refusals; if that matters for your use case, find an abliterated build.
Qwen3-VL-4B or 8B GGUF at Q4_K_M/Q8_0 is the sane starting point; on the GGUF ladder Q8 is essentially fp16 quality at half the size, so take it when it fits.
Inputs (26)
| Name | Type | Default | Description |
|---|---|---|---|
| model_name | COMBO | (no models found — see console) | Pick a .gguf already present under models/text_encoders or models/LLM. Nothing is downloaded automatically — copy the file in yourself, then reload ComfyUI. |
| mmproj_name | COMBO | auto | Vision projector to pair with the model. auto picks the first *mmproj*.gguf sitting next to it. |
| 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–32768 | — |
| 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 | 327681024–262144 | — |
| n_batch | INT | 819264–32768 | — |
| gpu_layers | INT | -1-1–200 | — |
| image_max_tokens | INT | 8192256–1024000 | — |
| image_min_tokens | INT | 102464–1024000 | — |
| top_k | INT | 00–32768 | — |
| pool_size | INT | 41943041048576–10485760 | — |
| enable_thinking | BOOLEAN | false | — |
| mtp_draft_tokens | INT | 00–8 | Multi-token prediction (speculative decoding) from the NextN/MTP heads inside the GGUF — Qwen3.5 / 3.6 / 3.8 MTP builds. 0 disables it, 2 is a good starting point. Needs llama-cpp-python v0.3.48+ and is ignored while a vision (mmproj) handler is loaded, because MTP is text-only. |
| stop_words | STRING | — | |
| keep_model_loaded | BOOLEAN | false | — |
| seed | INT | 11–4294967295 | — |
| imageopt | IMAGE | — | |
| image2opt | IMAGE | — | |
| image3opt | IMAGE | — | |
| videoopt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| RESPONSE | STRING | — |