Nodes/ComfyUI-QwenVL-MultiImage/🧪 QwenVL Multi-Image
ComfyUI Node

🧪 QwenVL Multi-Image

Ask Qwen to look at several images at once — no API key, it runs on your GPU

By hardik-uppal·Created 10 months ago·Updated 10 months ago· 4
🧪 QwenVL Multi-Image
  • images
  • images_batch_2
  • images_batch_3
  • text
model_nameQwen/Qwen3-VL-4B-Instruct
system_promptYou are a helpful assistant.
user_promptDescribe these images in detail.
quantization8-bit (Balanced)
max_tokens1024
keep_model_loadedtrue
seed1

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 is Qwen/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_loaded on 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-attn in 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.

Category🧪AILab/QwenVL

Inputs (10)

NameTypeDefaultDescription
imagesIMAGE
model_nameCOMBOQwen/Qwen3-VL-4B-Instruct13 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_promptSTRINGYou are a helpful assistant.
user_promptSTRINGDescribe these images in detail.
quantizationCOMBO8-bit (Balanced)3 options: None (FP16), 8-bit (Balanced), 4-bit (VRAM-friendly)
max_tokensINT102464–4096
keep_model_loadedBOOLEANtrue
seedINT11–4294967295
images_batch_2optIMAGE
images_batch_3optIMAGE

Outputs (1)

NameTypeDescription
textSTRING