ComfyUI Node

QwenVL

Ask an image anything, locally — no API key, no Gemini bill

By aistudynow·Created 11 months ago·Updated 5 months ago· 15
QwenVL
  • image
  • video
  • text
â—„model_nameQwen3-VL-4B-Instructâ–º
â—„quantization8-bit (Balanced)â–º
â—„preset_promptDescribe this image in detail.â–º
â—„custom_promptâ–º
â—„max_tokens1024â–º
â—„keep_model_loadedtrueâ–º
â—„seed1â–º
â—„attention_modeautoâ–º

This is the node that made Qwen3-VL the default local captioner in this space. Drop an image (or a batch of video frames) into the socket, get back a block of text - a detailed description, OCR-ish reading of what's written, a text-to-image prompt you can feed straight to a sampler, even "what happens next" speculation. It all runs on your own GPU through Hugging Face weights, no API key, no cloud round-trip. If you've been captioning a LoRA dataset with Gemini screenshots and a prayer, this is the local replacement you're looking for.

How it works

Under the hood it's plain transformers: the node loads a Qwen VL model with AutoModelForVision2Seq, pairs it with Qwen's processor, builds a chat-style conversation with your image and prompt, and runs model.generate(). First run downloads the weights from Hugging Face into ComfyUI/models/LLM/Qwen-VL, so budget a few GB of disk and a coffee. Video input is just a batch of IMAGE frames - the node samples them down to a handful, interleaves them with the text prompt, and Qwen3-VL handles them natively.

Three details are worth knowing before you click Run. Quantization is real bitsandbytes, not a fake toggle: 4-bit for tight VRAM, 8-bit as the default, or full FP16 for maximum quality. Quantized loads force SDPA attention and need CUDA - on CPU or MPS the node quietly falls back to FP16. And keep_model_loaded is on by default, meaning the model stays resident in VRAM between runs; the first caption pays the load cost, the next ten don't.

The inputs that matter

Most of the eighteen model choices follow a pattern: Qwen3-VL-2B/4B/8B in Instruct and Thinking editions, plus FP8 pre-quantized variants. The 4B is the sweet spot for a 6–8 GB card; 8B if you have the headroom. The presets are the lazy win - one of them, "Generate a detailed Stable Diffusion prompt that includes subject, background, lighting, and style," is the single most useful caption preset in the pack.

  • model_name - pick your Qwen3-VL size and variant.
  • quantization - 4-bit if VRAM is tight, 8-bit default, FP16 if it fits.
  • preset_prompt / custom_prompt - a preset describes the job; custom_prompt fully replaces it when filled.
  • max_tokens - 1024 default is plenty for captions; raise it for long essays, keep it low for tags.
  • seed - controls sampling and frame picking, so reusing it reproduces an answer.

Output is a single text string. This node is an output node, so the text shows up in the UI and on the widget - you don't need a display node to see what it said, though you'll usually want one (or the pack's aistudynow_SaveText) to keep the caption.

Installing it

ComfyUI Manager, search "ComfyUI-QwenVL" (or just "QwenVL"), install, restart. Manual path:

cd ComfyUI/custom_nodes
git clone https://github.com/aistudynow/ComfyUI-QwenVL
# restart ComfyUI

The requirements.txt pulls transformers, bitsandbytes, accelerate, and on Linux x86_64 flash-attn. ComfyUI Manager usually handles these, but a plain git clone means you may need pip install -r requirements.txt yourself. flash-attn is optional - if its install fails, the node's attention_mode falls back to SDPA and life goes on.

Common issues

The big one is the first-run download: a 4B model plus processor is several GB, and it's not a progress-bar-friendly experience on slow connections. Set HF_HUB_ENABLE_HF_TRANSFER=1 if you're impatient. Out of memory on an 8B? Drop to the 4B or switch quantization to 4-bit. And the honest caveat from the community: the Instruct models refuse some NSFW captioning, so if that's your dataset, you'll be looking at abliterated builds (with the caveat that users report those can be "sort of brain damaged" - test before you trust a whole dataset to one). If you get weird output, check that custom_prompt is actually empty, because a filled custom_prompt beats every preset.

The author (aistudynow, who also maintains ComfyUI-JoyCaption) announced this pack on r/comfyui in October 2025 and has kept shipping optimization passes since - it's an actively-maintained, widely-installed pack, which is what you want from a node in the "runs arbitrary Python on your machine" category.

Category🧠aistudynow/QwenVL

Inputs (10)

NameTypeDefaultDescription
model_nameCOMBOQwen3-VL-4B-Instruct18 options: Qwen3-VL-2B-Instruct, Qwen3-VL-2B-Thinking, Qwen3-VL-2B-Instruct-FP8, Qwen3-VL-2B-Thinking-FP8, Qwen3-VL-4B-Instruct, Qwen3-VL-4B-Thinking, +12
quantizationCOMBO8-bit (Balanced)3 options: 4-bit (VRAM-friendly), 8-bit (Balanced), None (FP16)
preset_promptCOMBODescribe this image in detail.13 options: Describe this image in detail., Describe this video in detail., Summarize the key events in this video., Generate 5 descriptive keywords for this content., Create a detailed text-to-image prompt from this image., Generate a detailed Stable Diffusion prompt that includes subject, background, lighting, and style., +7
custom_promptSTRING—
max_tokensINT102464–2048—
keep_model_loadedBOOLEANtrue—
seedINT11–18446744073709550000—
attention_modeCOMBOauto4 options: auto, sage, flash_attention_2, sdpa
imageoptIMAGE—
videooptIMAGE—

Outputs (1)

NameTypeDescription
textSTRING—