Nodes/ComfyUI_QwenVL_PromptCaption/Qwen3.5 VL Caption (Inverse Prompt)
ComfyUI Node

Qwen3.5 VL Caption (Inverse Prompt)

Qwen3.5 VL captioning with a thinking toggle and two outputs to prove it

By WingeD123·Created 10 months ago·Updated 4 months ago· 46
Qwen3.5 VL Caption (Inverse Prompt)
  • image
  • text
  • full_output
model_path
dtypeauto
keep_model_loadedfalse
unload_other_modelstrue
thinkingfalse
lang中文
seed1
max_side512
video_fps16.0
instruction

Same idea as the pack's Qwen3Caption - feed an image in, get a text-to-image prompt back out - but on the newest Qwen generation, and with one extra knob that changes how you use it: a thinking toggle. Qwen3.5-VL can reason before it answers, and this node lets you decide whether that reasoning happens. Flip it off for fast, direct captions; flip it on when you want the model to actually work the problem, like identifying the right object to ground in a cluttered scene.

It's part of WingeD123/ComfyUI_QwenVL_PromptCaption, the pack that runs Qwen VL models locally through transformers with no API. This is the newest node in the lineup, which is exactly why the install step differs from the others: Qwen3.5 needs a bleeding-edge transformers (5.2.0 or newer), so you can't get away with the older version that the Qwen2.5 nodes tolerate.

How it works

Mechanically it's Qwen35Caption using Qwen3_5ForConditionalGeneration from transformers, running the same prompt-inversion message the rest of the pack uses: image plus an instruction to act as an expert prompt engineer. The twist is the reasoning loop. With thinking on, the model produces a <think> block before its answer; the node hands you both in separate outputs - text is the clean final prompt, full_output is the whole generation including the reasoning trace. That's genuinely useful: you can peek at what the model was considering, which helps you tune instruction when captions come back missing something obvious.

Everything else carries over from Qwen3Caption: image is optional (text-only chat works), a multi-frame tensor becomes video with video_fps, seed seeds generation, and unload_other_models (default True) clears ComfyUI's VRAM before loading so the caption model doesn't fight your checkpoint. There's a result cache keyed on image hash and prompt, so identical runs short-circuit.

The inputs that matter

  • model_path - dropdown over ComfyUI/models/text_encoders. Empty until you add a Qwen3.5-VL model.
  • thinking - the headline feature. Default False for speed; True for deeper (and slower) analysis.
  • lang - 中文, English, or bbox. bbox mode returns bounding-box coordinates for the StringToBbox nodes in this pack.
  • dtype - auto/4bit/8bit. The reasoning pass burns extra tokens, so if you're VRAM-tight, 4bit.
  • keep_model_loaded - True when running several images back to back.
  • seed / max_side / video_fps / instruction - as on the Qwen3 sibling.

Outputs: text (final prompt) and full_output (full generation with the thinking trace). Both are STRINGs.

Install and model setup

ComfyUI Manager (search "ComfyUI_QwenVL_PromptCaption") or:

cd ComfyUI/custom_nodes
git clone https://github.com/WingeD123/ComfyUI_QwenVL_PromptCaption

then restart. The critical dependency is transformers>=5.2.0 - the README calls this out explicitly, and if the node fails to load the model class, this is the first thing to check. Then place a Qwen3.5-VL model folder in ComfyUI/models/text_encoders (the pack auto-downloads nothing). This is new enough that you can't yet reuse an existing ComfyUI model file like the 2.5 generation trick, so budget a real download.

Troubleshooting

On a fresh install, "Failed to load model" is almost always the transformers version - upgrade it and restart. thinking makes runs noticeably slower and eats more VRAM; if a run OOMs, turn it off or drop to 4bit before you blame the node. And note the bbox output from this node isn't pixel-perfect - it's normalized 0–1000 coordinates meant for StringToBbox, so wire them through that node rather than parsing by hand. The two-output design is the giveaway that this node expects a pipeline, not a copy-paste.

Categoryimage/caption

Inputs (11)

NameTypeDefaultDescription
model_pathCOMBO0 options:
dtypeCOMBOauto3 options: auto, 4bit, 8bit
keep_model_loadedBOOLEANfalse
unload_other_modelsBOOLEANtrue
thinkingBOOLEANfalse
langCOMBO中文3 options: 中文, English, bbox
seedINT10–4294967295
max_sideINT512256–2240
imageoptIMAGE
video_fpsoptFLOAT16.01–200
instructionoptSTRING

Outputs (2)

NameTypeDescription
textSTRING
full_outputSTRING