Qwen3.5 VL Caption (Inverse Prompt)
Qwen3.5 VL captioning with a thinking toggle and two outputs to prove it
- image
- text
- full_output
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, orbbox. bbox mode returns bounding-box coordinates for theStringToBboxnodes 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.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| model_path | COMBO | 0 options: | |
| dtype | COMBO | auto | 3 options: auto, 4bit, 8bit |
| keep_model_loaded | BOOLEAN | false | — |
| unload_other_models | BOOLEAN | true | — |
| thinking | BOOLEAN | false | — |
| lang | COMBO | 中文 | 3 options: 中文, English, bbox |
| seed | INT | 10–4294967295 | — |
| max_side | INT | 512256–2240 | — |
| imageopt | IMAGE | — | |
| video_fpsopt | FLOAT | 16.01–200 | — |
| instructionopt | STRING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |
| full_output | STRING | — |