Replicate lucataco/qwen3-vl-8b-instruct
Ask a vision model what's in your image β then feed the answer back into your workflow
- VIDEO
- text
- API_JSON
Sometimes your workflow's problem isn't generating an image - it's understanding one. Qwen3-VL is a vision-language model, and lucataco's 8B instruct build on Replicate is one of the more sensible hosted ways to run one: you hand it an image (or a video), it describes it, answers questions about it, and returns text. In ComfyUI terms that means this node sits at the front of a pipeline: caption a batch of images for a LoRA dataset, write alt-text, generate prompts from reference photos, or build an auto-tagger that feeds your prompt back into a generation node. It's the "eyes" a CPU-only ComfyUI install otherwise doesn't have.
The node is a standard Replicate schema node with a text output: text (STRING - the model's answer) and API_JSON (the payload that was sent). Feed the text output into the pack's Save Text With Filename node and you've built a batch captioner in four nodes. That pairing is, honestly, the most common real use of this node.
Inputs worth knowing:
prompt(default "Describe what is happening in the media content") - your instruction. This is a multiline string and it does what you'd expect; the model follows it.max_new_tokens(default 512) - cap on the reply length. If the model keeps cutting itself off on long descriptions, raise it.temperature(default 0.7) andtop_p(default 0.9) - the usual sampling dials. For captioning you mostly want them low-ish so descriptions are stable and repeatable; for creative prompt-generation you can let them loose.VIDEO(aVIDEO-labeled input that's actually IMAGE-typed, accepting frames) plusvideo_fps(default 1) andvideo_max_pixels(default 200704) - the model handles video by sampling frames. Keepvideo_fpslow unless you're genuinely reviewing motion; every frame you add is tokens and time.dry_runandforce_rerun- the pack-wide pair. Dry-run tests your wiring for free; force_rerun busts ComfyUI's output cache when you want a real new call.
There's no image-specific "upload" input in the schema - you wire your IMAGE through the VIDEO input (yes, the naming is weird; it's a schema-mapping artifact of a model whose input is media-typed). If you're coming from local VLM workflows expecting separate image and video ports, just know this one node covers both.
Install is the pack standard - ComfyUI Manager, search ComfyUI-API-DockerCPU, or:
cd ComfyUI/custom_nodes
git clone https://github.com/trustypangolin/ComfyUI-API-DockerCPU
cd ComfyUI-API-DockerCPU
pip install -r requirements.txt
Set REPLICATE_API_TOKEN and restart; it's under π¨ DockerCPU API/π¨ Replicate.
The catches are the usual ones for hosted inference: it's pay-per-call, so a captioning run over a few thousand images is a real line item - always dry-run on a handful first. And vision models hallucinate details in the way LLMs do: if your captions feed a LoRA training run, skim the first batch of output before committing, because garbage captions train garbage LoRAs. But as a way to give a GPU-less ComfyUI install eyes, this is the node.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| dry_run | BOOLEAN | false | β |
| force_rerun | BOOLEAN | false | β |
| VIDEOopt | IMAGE | β | |
| max_new_tokensopt | INT | 5121β4096 | β |
| promptopt | STRING | Describe what is happening in the media content | β |
| temperatureopt | FLOAT | 0.700β2 | β |
| top_popt | FLOAT | 0.900β1 | β |
| video_fpsopt | FLOAT | 1.000.1β10 | β |
| video_max_pixelsopt | INT | 2007040β1048576 | β |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| text | STRING | β |
| API_JSON | STRING | β |