ComfyUI Node

Caption Creator

Caption images locally with Qwen3-VL — no API key, no cloud

By Merserk·Created 9 months ago·Updated about a month ago· 6
Caption Creator
  • image
  • text
model_precisionint8
auto_downloadtrue
words100

Caption Creator is the pack's heavyweight: a local Qwen3-VL vision-language model that writes a factual caption for each image you feed it, entirely on your machine. No API key, no cloud round-trip, no per-image cost. You drop an image (or a whole batch) in, pick a model precision, set roughly how many words you want, and get clean descriptive text out. It's the captioning step for people building training datasets or batch-renaming their galleries, and it's the one node in Flow Assistor with a real model download attached.

How it works

Under the hood it loads a Qwen3-VL text encoder in ComfyUI's native format - one of two ConvRot-quantized variants, int8 or int4 - and runs one generation pass per image. Thinking is disabled, the decoder's caption is returned unchanged (no cleanup, no repetition trimming, no truncation to your word count), and the whole thing is tuned for factual description rather than creative flourish. A few mechanical details worth knowing:

  • words (0–200) is a target, not a cutoff - generation ends naturally after a complete sentence. 0 requests an unrestricted detailed caption.
  • Images are downscaled to a maximum 784-pixel edge before the vision pass, so feeding it 4K images doesn't blow up memory; there's a fixed 512-token emergency ceiling as a safety net, independent of your requested length.
  • The node uses ComfyUI's model manager to keep the text encoder resident on the GPU when VRAM allows, falling back to managed offloading otherwise.
  • It writes device residency, token count, and timing to the console, and shows the caption in a scrollable on-node preview.

Inputs: image (batches supported), model_precision (int8 or int4), auto_download (default on), and words. Output: text - one caption per image, separated by newlines.

The model download and the version caveat

This is where Flow Assistor's "no dependencies" story breaks - deliberately. With auto_download on (the default), the first run pulls the model into ComfyUI/models/text_encoders/flow-assistor/ from the author's Hugging Face repos. That's a multi-gigabyte download on first use; if you're on a metered connection, flip auto_download off and place the files yourself. And because it relies on ComfyUI's native Qwen3-VL support, it needs a recent ComfyUI with CLIPType.KREA2 and Qwen3-VL ConvRot support in the text-encoder loader - the node detects an outdated loader and prints an explicit upgrade error instead of failing mysteriously.

The honest take

Local captioning with Qwen3-VL is a pattern that's genuinely taken off - the community leans on Qwen3-VL for describing images to feed back into models like Z-Image, and the Lora Training essay's dataset-curation advice (caption what should vary, leave what shouldn't) applies directly to what you do with these captions. This node packages that into a ComfyUI-native, one-node affair. The trade-offs: it's heavy (a real model, real VRAM), the word count is loose by design, and "factual" means it won't invent stylistic flavor you didn't ask for. For dataset building it's excellent; for stylized gallery captions you may want to rephrase.

Installing

Part of ComfyUI-Flow-Assistor - ComfyUI Manager (search "Flow Assistor") or:

cd ComfyUI/custom_nodes
git clone https://github.com/Merserk/ComfyUI-Flow-Assistor.git

Restart after cloning. Requires a current ComfyUI (the pack is V3-only, and this node additionally needs the native Qwen3-VL loader support). Expect the first run to download the model.

Where people get burned

The classic one-two: an old ComfyUI build (the pack won't load or the node demands a loader upgrade), and the first-run download being mistaken for a hang. Watch the console for the download progress and the Downloading model lines. Also, one caption per image with thinking disabled means no chain-of-thought chatter in the output - if your captions look "too simple," that's the design, not a failure; raise words or use 0 for the long-form version.

Categoryflow-assistor/image/caption

Inputs (4)

NameTypeDefaultDescription
imageIMAGEA ComfyUI IMAGE tensor; batches are supported.
model_precisionCOMBOint8Choose the Qwen3-VL ConvRot model precision to load.
auto_downloadBOOLEANtrueDownload a missing model into models/text_encoders/flow-assistor.
wordsINT1000–200Approximate words per caption, not a hard limit. Set to 0 for an unrestricted detailed caption.

Outputs (1)

NameTypeDescription
textSTRING