Qwen VL Run
Get a local model to describe your image for you
- image
- next_image
- video
- STRING
This is QwenLLMRun's sibling, except instead of just reading text, it can look at an image and tell you about it. Feed it a picture and an instruction, and it writes a description back as a string - a local, no-API-key vision-language model doing reverse prompt engineering for you: instead of writing a prompt and getting an image, you hand it an image and get a prompt-shaped description out.
How it works
Under the hood it's running Qwen2.5-VL-3B-Instruct, a vision-language model, entirely on your own GPU. You give it text (your instruction - something like "describe this image for a Stable Diffusion prompt"), and optionally an image for it to actually look at. It generates a response with the same kind of sampling controls a text LLM uses, and returns a single string.
The inputs and outputs that matter
text- your instruction to the model. Required, but defaults to empty, so fill it in.image(optional) - the picture you want described. This is the input that actually gives it something to react to; if you skip it, you're just running the model as a plain text LLM.next_image(optional) - a second image slot. Worth knowing about specifically for workflows where you want the model to compare two shots - describing motion, a transition, or a before/after - rather than just captioning one still.video(optional, typed as IMAGE) - for describing a sequence rather than a single frame. Under the hood ComfyUI represents video as a batch of image frames, which is why this input shares the IMAGE type instead of having its own.temperatureandmax_new_tokens- the sampling controls this node exposes. Note it's a shorter list thanQwenLLMRun's: there's notop_kortop_phere, just temperature.keep_model_loadedandseed- same behavior as on the text node: whether it stays in VRAM between runs, and reproducibility.
Output is a single STRING. A natural chain is: QwenVLRun describes a reference image → that description feeds into QwenLLMRun (or straight into a text encoder) as the working prompt.
How to install it
ComfyUI Manager: search "ComfyUI_OneButtonPrompt", install, restart. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/billwuhao/ComfyUI_OneButtonPrompt_Flux
Restart ComfyUI. No explicit dependency list ships in the README - if import fails, check the console for a missing package (vision-language inference typically needs transformers and image-processing libraries) and install into ComfyUI's own environment.
Common issues
First run is slow. Same story as the text node - it's pulling the Qwen2.5-VL-3B weights from Hugging Face the first time, which takes a while depending on your connection. After that it's local and fast.
Output doesn't reference the image at all. Double-check you actually wired something into image - it's optional in the schema, so ComfyUI won't complain if you forget it, but the model has nothing to look at and will just answer your text as a plain instruction.
VRAM pressure with your diffusion model loaded too. Same tradeoff as QwenLLMRun: keep_model_loaded=false is the default because a 3B vision model competes for the same GPU memory your image generator needs. Only turn it on if you've got room to spare.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | — | |
| model | COMBO | Qwen2.5-VL-3B-Instruct | 1 options: Qwen2.5-VL-3B-Instruct |
| keep_model_loaded | BOOLEAN | false | — |
| temperature | FLOAT | 0.70–1 | — |
| max_new_tokens | INT | 512128–2048 | — |
| seed | INT | 00–18446744073709550000 | — |
| imageopt | IMAGE | — | |
| next_imageopt | IMAGE | — | |
| videoopt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| STRING | STRING | — |