π LLaVa Describer π¦
An old name for ComfyUI's friendliest local vision LLM node
- image
- description
First, the thing nobody tells you when they add this to a workflow: the name is a lie, and then it got renamed. "LLaVa Describer" sounds like a big model you need to hunt down and slot into ComfyUI. It's not. It's a thin node that hands your image to a separately installed Ollama server running the LLaVA vision model, and hands the model's text back to your graph. No checkpoint to download into ComfyUI, no API key, no remote service. And the node you'll actually find in the menu today is called Ollama Image Describer - this LLaVaDescriber is the old name from before the pack was rebranded to ComfyUI-Ollama-Describer. If an old workflow references it and you can't find it, that's why.
Here's the real reason to reach for it: it turns your ComfyUI graph into a captioning machine without leaving your machine. You can take any generated image, feed it to the node, and get back a description as a plain text string - then wire that string anywhere, like back into a prompt (the "image-to-text-to-image" loop people play with) or out to a file for dataset building. It's also the safe corner of the LLM-vision world: everything stays on localhost, no exfil, nothing sent to a stranger's server. After the ComfyUI_LLMVISION malware incident a while back, "local Ollama, no key" is exactly the pattern you want from a node like this.
How it actually works
The mechanism is boring in the best way. The node takes your IMAGE tensor, converts it to base64, and POSTs it over HTTP to the Ollama server at api_host (default http://localhost:11434). Ollama runs the vision model locally and returns text. If the model isn't pulled yet, the node pulls it for you on first run - which is why your first execution feels frozen for a while. It's an is_output_node, so the result prints to the UI like a text viewer node.
The inputs that matter
model- pickllava:7b-v1.6,13b, or34b. Start at 7b; the 13b and especially 34b variants will eat VRAM you probably want for actually generating images.image- the IMAGE tensor you want described.prompt- the actual instruction. The default is a danbooru-tag prompt, which tells you exactly what audience this was built for: anime dataset tagging. Change it for natural-language captions.temperature,seed_number,max_tokens- standard LLM dials. Notemax_tokensdefaults to a stingy 200; for detailed captions, bump it.keep_model_alive--1keeps the model resident in memory between calls (fast, but it squats on VRAM),0unloads immediately.system_context- optional extra context, the one optional input.
The single output is description (STRING), and it's an output node, so you'll see it rendered.
Installing it
First install Ollama itself, then pull a model:
ollama pull llava:7b
Then the node, via ComfyUI Manager (search ComfyUI-Ollama-Describer) or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/alisson-anjos/ComfyUI-LLaVA-Describer
cd ComfyUI-LLaVA-Describer
pip install -r requirements.txt # just "ollama>=0.4.8"
Restart ComfyUI. That's the whole dependency story - one Python package, no torch reinstall, no model file placement.
Where people get burned
- Ollama isn't running β the node swallows the exception and returns a string that says
Error: ...instead of failing loudly. A working-looking node that outputs "Error: connection refused" means your Ollama server is down. Start it (ollama serve), don't go hunting in ComfyUI. - First run "hangs" while it downloads a multi-gigabyte model. Give it a minute.
- VRAM pressure from 13b/34b or from
keep_model_alive: -1holding the model resident while you also generate. - Short captions - that 200-token default truncates long descriptions.
The takeaway: this is a legacy entry point to a genuinely useful little pack. If you're on a current install, search for "Ollama Image Describer" instead - same idea, more knobs.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | β | |
| model | COMBO | 3 options: llava:7b-v1.6, llava:13b-v1.6, llava:34b-v1.6 | |
| api_host | STRING | http://localhost:11434 | β |
| temperature | FLOAT | 0.20β1 | β |
| seed_number | INT | 0-1β18446744073709550000 | β |
| max_tokens | INT | 200 | β |
| keep_model_alive | INT | -1 | β |
| prompt | STRING | Return a list of danbooru tags for this image, formatted as lowercase, separated by commas. | β |
| system_contextopt | STRING | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| description | STRING | β |