🧪 QwenVL Multi-Image
Ask Qwen to look at several images at once — no API key, it runs on your GPU
- images
- images_batch_2
- images_batch_3
- text
Most ComfyUI nodes make images. This one reads them. 🧪 QwenVL Multi-Image loads a Qwen vision-language model (Qwen2.5-VL or Qwen3-VL) onto your GPU, lets you hand it one image or several at once, ask it something in plain English, and returns text. No API call, no key, nothing leaves your machine - the model just downloads from HuggingFace on first use, same as any checkpoint.
The honest use case is captioning and analysis, not magic. If you're captioning a LoRA dataset you'd normally reach for JoyCaption or Florence 2; QwenVL's party trick is that it can take several images in a single inference, so "compare these two" and "describe the progression across these three" are first-class prompts rather than something you stitch together. It's also a solid way to sanity-check what a batch of generations actually looks like before you wire them anywhere.
How it works
The node leans on the official transformers pipeline. It converts every ComfyUI image tensor to PIL, flattens all of them plus your user_prompt into a single chat message, runs it through the model's chat template, and calls model.generate(). Under the hood that's Qwen2VLForConditionalGeneration + AutoProcessor from HuggingFace transformers, plus qwen_vl_utils for vision processing - standard stuff, nothing proprietary.
The standard node generates greedily (no sampling knobs). If you want temperature and friends, that's the sibling node, 🧪 QwenVL Multi-Image (Advanced).
The inputs that matter
Most of the fields you can leave alone. The ones you'll actually touch:
images- the IMAGE input. A batch counts as multiple images, so you can feed it a whole batch from a Load Image batch or an output of a previous pass.model_name- 13 Qwen models, from the 2B Qwen2.5-VL up to 72B. Default isQwen/Qwen3-VL-4B-Instruct, which is the sane starting point. 8B Instruct runs about 17.5GB downloaded.user_prompt- your question. Be specific: "compare the color palettes" beats "what do you see". Number the images in the prompt if order matters.quantization-None (FP16)/8-bit (Balanced)/4-bit (VRAM-friendly). This is the VRAM dial: 8-bit is the right default for most people, 4-bit if you're under ~8GB and the model grumbles.keep_model_loaded- caches the model in VRAM between runs. Keep it on if you're doing several inferences with the same model; turn it off if you're hopping between models.seed- locks the output so you can compare runs fairly. Change one variable at a time with a fixed seed; that's the only way to diagnose anything.
Also present but rarely touched: system_prompt (set a role like "you are an art critic"), max_tokens, and two optional extra image inputs images_batch_2 / images_batch_3 for wiring in a couple more Load Image nodes without building a batch.
The output is a single text string. Wire it into ShowText (or any text consumer) and you're done.
Installing it
Easiest route: ComfyUI Manager → search "QwenVL Multi-Image" → install → restart. Or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/hardik-uppal/ComfyUI-QwenVL-MultiImage.git
cd ComfyUI-QwenVL-MultiImage
pip install -r requirements.txt
Then restart ComfyUI and look under the 🧪AILab/QwenVL category. One gotcha: the pack's own README still shows YOUR_USERNAME in its clone instructions - a leftover from whatever skeleton generated the repo. Use the real URL above, not the one in the README.
Dependencies are the heavy part. requirements.txt pulls in transformers, accelerate, bitsandbytes (needed for 8/4-bit quantization), qwen-vl-utils, and sentencepiece. bitsandbytes is the one that bites on Windows or old CUDA builds - if the 8-bit load fails with an import error, that's usually where to look.
Gotchas & troubleshooting
- First run is slow. It's downloading the model, possibly many GB. Subsequent runs with
keep_model_loadedon are dramatically faster. - Out of memory → drop to a smaller model (2B/3B), switch to 4-bit, reduce
max_tokens, or feed fewer images at once. - The README advertises Flash Attention 2 support. Don't buy the speedup claim: there's no
flash-attnin the requirements, and the code's "enable FA2" is a cosmetic config toggle. It works fine without it. - Model download fails → check disk space (2–30GB per model) and that you can reach HuggingFace.
- Node won't import →
pip install -r requirements.txt --upgrade.
It's a young, lightly-starred pack in the same neighborhood as the ComfyUI_LLMVISION incident, so the usual custom-node caution applies: review what you install. That said, the model downloads are signed HuggingFace artifacts from the Qwen org, and the node logic itself is short enough to eyeball.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| model_name | COMBO | Qwen/Qwen3-VL-4B-Instruct | 13 options: Qwen/Qwen3-VL-4B-Instruct, Qwen/Qwen3-VL-8B-Instruct, Qwen/Qwen3-VL-32B-Instruct, Qwen/Qwen3-VL-8B-Thinking, Qwen/Qwen3-VL-32B-Thinking, Qwen/Qwen3-VL-8B-Instruct-FP8, +7 |
| system_prompt | STRING | You are a helpful assistant. | — |
| user_prompt | STRING | Describe these images in detail. | — |
| quantization | COMBO | 8-bit (Balanced) | 3 options: None (FP16), 8-bit (Balanced), 4-bit (VRAM-friendly) |
| max_tokens | INT | 102464–4096 | — |
| keep_model_loaded | BOOLEAN | true | — |
| seed | INT | 11–4294967295 | — |
| images_batch_2opt | IMAGE | — | |
| images_batch_3opt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |