Qwen 3.5 (GGUF)
The fast path for Qwen 3.5 vision — if you're willing to build llama.cpp
- image
- RESPONSE
- THINKING
Qwen 3.5 is a natively multimodal reasoning model - it looks at an image and talks back, and this pack lets you drop that into a ComfyUI graph. The GGUF node is the version you actually want for throughput: the README claims ~152 tokens/sec against ~17 for the transformers sibling on the same RTX PRO 6000. Nine times faster is the difference between a caption that lands in ten seconds and one you wait a minute for. If you're captioning a dataset or analyzing a pile of reference images, this is the one.
But here's the catch, and it's the whole game: this node doesn't use transformers at all. It shells out to llama.cpp's multimodal CLI, llama-mtmd-cli, as a subprocess, feeding it the GGUF weights, the vision projector, your prompt, and your image. That binary is not something pip install puts on your machine - llama-cpp-python does not include it, despite what you'd expect. You build llama.cpp from source, or the node fires back a long, apologetic "llama-mtmd-cli not found" error and tells you exactly how to fix it.
Each model lives in ComfyUI/models/LLM/<model-name>-GGUF/ and needs two files: the GGUF weights and mmproj-BF16.gguf, the vision projector that lets a text model actually see. First use auto-downloads both from unsloth's HuggingFace repos; you can also place them manually and skip the download entirely.
The inputs that matter
- model - 0.8B to 27B, default 9B. On Q4 that's roughly 1GB to 17GB, so the dropdown maps cleanly onto your VRAM.
- quantization - 17 choices, default Q4_K_XL. The "XL" quants are Unsloth Dynamic, which mixes precision per-layer instead of smearing one quant over everything - smarter than the classic Q4_K_M at the same ballpark size.
- n_gpu_layers - 99 offloads everything (default), 0 is CPU-only.
- enable_thinking - off by default here, unlike the transformers node. Flip it on if you want chain-of-thought, and remember thinking eats tokens before the actual answer.
Both outputs are strings: RESPONSE (thinking stripped) and THINKING (the reasoning, empty if disabled). Wire RESPONSE into any text display node - the shipped workflow uses PreviewAny - or string it into a prompt-rewriter loop.
How fast, and at what cost
The GGUF quality ladder is the familiar one from diffusion: Q8 is essentially fp16 at half the size, Q5 is the last tier where you can't see the difference, and Q4 is the accepted compromise when VRAM is tight. On this node the sweet spot is Q5_K_XL or Q8_0 if they fit, Q4_K_XL if they don't - at 6GB, 6.7GB, and 9.5GB respectively on the 9B. One thing it can't do: no video input. Video understanding is the transformers node's job.
Installing (the real part)
cd ComfyUI/custom_nodes
git clone https://github.com/DanielBartolic/ComfyUI-Qwen3.5.git
pip install -r ComfyUI-Qwen3.5/requirements.txt -r ComfyUI-Qwen3.5/requirements-gguf.txt
ComfyUI Manager installs the pack fine (search "Qwen3.5"), and the Python side is light - the GGUF requirements file is basically comments; you mostly need huggingface-hub, numpy, Pillow, torch. The heavy lift is the binary:
git clone https://github.com/ggml-org/llama.cpp
cmake llama.cpp -B llama.cpp/build -DGGML_CUDA=ON
cmake --build llama.cpp/build --config Release -j$(nproc)
cp llama.cpp/build/bin/llama-mtmd-cli /usr/local/bin/
Manager won't do this part for you. That's the trap, and it's a one-time cost.
Where people get burned
llama-mtmd-cli not found- build it (above) or set thecli_pathinput to your binary. The node checks the input first, then PATH, then/usr/local/binand a couple of container paths.- CUDA build sees no devices - common in containers. Pass the arch explicitly:
-DCMAKE_CUDA_ARCHITECTURES=120for Blackwell,89for Ada,90for Hopper. - CPU-only - build without
-DGGML_CUDA=ONand setn_gpu_layersto 0. - Models not downloading - drop the
.gguf+mmproj-BF16.ggufintoComfyUI/models/LLM/<name>-GGUF/yourself.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| model | COMBO | Qwen3.5-9B | Model size. 0.8B ~1GB, 2B ~2GB, 4B ~3GB, 9B ~6GB, 27B ~17GB (Q4) |
| quantization | COMBO | Q4_K_XL | GGUF quantization. XL = Unsloth Dynamic (smart mixed precision) |
| prompt | STRING | Describe this image in detail. | Text prompt for the model |
| system_prompt | STRING | Optional system prompt to set model behavior | |
| max_tokens | INT | 409664–32768 | Maximum tokens to generate |
| temperature | FLOAT | 0.700–2 | Sampling temperature (0.6-0.7 recommended for captioning) |
| top_p | FLOAT | 0.800–1 | Nucleus sampling threshold |
| top_k | INT | 201–100 | Top-K sampling |
| repeat_penalty | FLOAT | 1.000.5–2 | Penalty for repeated tokens |
| n_gpu_layers | INT | 99-1–200 | -1 or 99 offloads all layers to GPU |
| ctx_size | INT | 81921024–131072 | Context window size in tokens |
| enable_thinking | BOOLEAN | false | Enable thinking mode. Outputs reasoning in THINKING output. |
| seed | INT | 11–4294967295 | Random seed for reproducibility |
| imageopt | IMAGE | Image for vision tasks | |
| cli_pathopt | STRING | Path to llama-mtmd-cli binary. Auto-detected if empty. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| RESPONSE | STRING | — |
| THINKING | STRING | — |