Nodes/SDXL Auto Prompter/APNext QwenVL Vision Analyzer
ComfyUI Node

APNext QwenVL Vision Analyzer

Describe any image with Qwen3-VL

By dagthomas·Created 3 years ago·Updated about 18 hours ago· 285
APNext QwenVL Vision Analyzer
  • images
  • STRING
happy_talktrue
compressfalse
compression_level
posterfalse
qwen_modelQwen3-VL-2B-Instruct
max_tokens512
temperature0.70
keep_model_loadedtrue
use_flash_attentionfalse
seed-1
randomize_each_runtrue
custom_base_prompt
custom_title
override

This is the workhorse of the QwenVL family: give it an image, it describes it. That sounds unglamorous, but "describe this image as a prompt" is the step every image-to-image and image-to-video workflow needs, and doing it with a local model means you can caption images all day for free - no API key, no uploads, no credit card. If you've been pasting screenshots into a cloud vision API to write img2img prompts, this is the node that replaces that habit.

It's built around Qwen3-VL (2B up to 8B, with Thinking and FP8 variants), downloads its model automatically on first use, and caches it in memory when keep_model_loaded is on so subsequent runs are fast. One IMAGE input, one STRING output - the finished description. The whole node is small enough to wire inline anywhere a prompt is needed.

How it works and the toggles that matter

The default prompt makes it write a rich description of the image, and three booleans shape the output style:

  • happy_talk (on by default) - enthusiastic, lively description vs. dry professional tone. It's exactly as silly as it sounds; flip it off for a neutral read.
  • compress + compression_level - squashes the description down. soft, medium or hard depending on how terse you want it. Useful when you're feeding a video model that rewards brevity or a text encoder with a token budget.
  • poster - formats the output like a movie-poster one-liner. Great for cover art ideas, mostly harmless otherwise.

The three optional string inputs are the escape hatches: custom_base_prompt replaces the base instruction, custom_title injects a title to describe, and override takes full control of the prompt when you want something the defaults can't express ("only list the color palette as hex values").

The standard QwenVL knobs apply: qwen_model (start at 2B Instruct for speed, go 8B when detail or reasoning matters), max_tokens (default 512 - raise it if descriptions get cut off), temperature, seed/randomize_each_run, and use_flash_attention (off by default; needs the flash-attn package, speeds things up if you have it).

Install

Pack install is the shared routine - ComfyUI Manager (search "comfyui_dagthomas") or:

cd ComfyUI/custom_nodes
git clone https://github.com/dagthomas/comfyui_dagthomas
cd comfyui_dagthomas
pip install -r requirements.txt

Restart, then let the model download to ComfyUI/models/LLM/Qwen-VL/ on first use. No keys.

Common issues

  • Descriptions get truncated - raise max_tokens (up to 2048). 512 is fine for captions, short for essays.
  • Slow first run - that's the model downloading and loading; keep_model_loaded makes subsequent runs near-instant.
  • Out of memory - drop to a 2B or FP8 variant. The Thinking models are slower and heavier; use them only when you need real reasoning.
  • Output is one STRING - there's nothing to miswire, but don't expect a JSON struct. If you need structured output, the Vision Cloner's raw_json is the one to reach for.
Categorycomfyui_dagthomas/LLM

Inputs (15)

NameTypeDefaultDescription
imagesIMAGE
happy_talkBOOLEANtrue
compressBOOLEANfalse
compression_levelCOMBO3 options: soft, medium, hard
posterBOOLEANfalse
qwen_modelCOMBOQwen3-VL-2B-Instruct23 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, +17
max_tokensINT51264–2048
temperatureFLOAT0.700.1–1
keep_model_loadedBOOLEANtrue
use_flash_attentionBOOLEANfalse
seedINT-1-1–18446744073709550000
randomize_each_runBOOLEANtrue
custom_base_promptoptSTRING
custom_titleoptSTRING
overrideoptSTRING

Outputs (1)

NameTypeDescription
STRINGSTRING