Nodes/ComfyUI-QwenVL-MultiImage/🧪 QwenVL Multi-Image (Advanced)
ComfyUI Node

🧪 QwenVL Multi-Image (Advanced)

The same multi-image Qwen node, with the sampling dials exposed — and one trap

By hardik-uppal·Created 10 months ago·Updated 10 months ago· 4
🧪 QwenVL Multi-Image (Advanced)
  • 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
temperature0.7
top_p0.90
top_k50
repetition_penalty1.1
num_beams1
keep_model_loadedtrue
seed1
deviceauto

🧪 QwenVL Multi-Image (Advanced) is the same pack's standard node with the training wheels off. It loads the same Qwen2.5-VL / Qwen3-VL vision models, accepts the same one-or-many image inputs, and returns the same single text string - but it adds the sampling controls the basic node hides, plus a device override. If the standard node's "describe and be done" output isn't working for you, this is the variant you swap in, not a different tool.

The whole family installs together from hardik-uppal/ComfyUI-QwenVL-MultiImage - see the standard node's page for the full install and model-download story. This one is about the knobs.

What the extra inputs actually do

Everything from the standard node is here (images, model_name, system_prompt / user_prompt, quantization, max_tokens, keep_model_loaded, seed, plus the optional images_batch_2 / images_batch_3). On top of that:

  • temperature (default 0.7) - randomness. Lower for focused, factual answers; higher if you want the model to free-associate.
  • top_p (0.9) and top_k (50) - the usual nucleus/top-k sampling pair. Leave them near default until you have a reason not to.
  • repetition_penalty (1.1) - push it up (1.2–1.5) when the model starts looping on long captions.
  • num_beams (1) - beam search. This is the trap: when num_beams is above 1, the code switches to beam decoding and temperature, top_p, and top_k are silently ignored. Crank the beams for quality, then wonder why your temperature edits do nothing - that's why. Keep num_beams at 1 if you want sampling control.
  • device (auto / cuda / cpu) - force a device. Usually leave on auto; it's the escape hatch when something is being routed to the wrong GPU or you're stuck debugging on CPU.

How it works

Same mechanism as the standard node: images get flattened into one chat message, the Qwen model runs via transformers + qwen_vl_utils, and you get text back. The difference is only in the generation call - sampling params get passed to model.generate() when num_beams == 1, and the cache key includes your chosen device, so switching devices reloads the model rather than reusing a warm one.

When to reach for it

If you're captioning a LoRA dataset and the greedy output reads stiff or repeats itself, this node lets you tune it - a touch more temperature for variety, a bit of repetition penalty to kill loops. If you're comparing images and want consistent, dry answers, keep temperature low and num_beams at 1. For most people the standard node is enough; grab this one when the output quality, not the plumbing, is the problem. And fix the seed while you tune - changing one variable at a time is the only way to tell what actually moved the needle.

Category🧪AILab/QwenVL

Inputs (16)

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
temperatureFLOAT0.70.1–2
top_pFLOAT0.900–1
top_kINT501–100
repetition_penaltyFLOAT1.11–2
num_beamsINT11–10
keep_model_loadedBOOLEANtrue
seedINT11–4294967295
deviceCOMBOauto3 options: auto, cuda, cpu
images_batch_2optIMAGE
images_batch_3optIMAGE

Outputs (1)

NameTypeDescription
textSTRING