Nodes/OllamaTools for ComfyUI/🖼️ Pic Describer
ComfyUI Node

🖼️ Pic Describer

Ask a local vision model what's in your image — no API key, no cloud

By max-dingsda·Created about a year ago·Updated 5 months ago· 4
🖼️ Pic Describer
  • image
  • description
modelministral-3:latest
styleneutral
promptdescribe the image
cleanup_outputtrue

So you've got an image you generated, or one you found, and you want the recipe back. That's the whole point of 🖼️ Pic Describer: you feed it an image and a local vision model writes a natural-language description you can drop straight back into a prompt. It's your img2img rerun buddy, your ControlNet re-prompt, your "what did I actually generate here" answer. And the name isn't lying - it calls no cloud API and needs no key. It talks to Ollama, which is running on your own machine.

This is the node I'd reach for when I want a caption as a prompt, not a clinical label. "A woman stands against a white wall" is the useful level of detail, and that's what it gives you.

How it works

The node is a thin wrapper around Ollama's /api/generate endpoint. It takes your image tensor, converts it to a PNG in memory, base64-encodes it, and posts it along with your instruction to http://localhost:11434/api/generate. The model is loaded, it describes what it sees, and the text comes back as a STRING.

Under the hood it sends keep_alive: "0s", which means Ollama unloads the model right after the call instead of keeping it warm. That's actually nice for your VRAM budget - the vision model gets out of the way before your KSampler needs the memory - but it also means every single run pays a cold-start load. First description is slow; the rest are less slow but never instant.

The inputs that matter

  • image - the IMAGE you want described, usually straight from Load Image. Only the first frame of a batch is used.
  • model - a dropdown with llava:latest, llama3.2-vision:latest, ministral-3:latest, qwen3-vl:2b, and gemma3:latest. Here's the trap: the default is ministral-3, which is a text-only model. Point it at an image and Ollama errors out. If it's your first run, switch to llava:latest or qwen3-vl:2b before you hit go, and ollama pull that model first.
  • style - neutral, creative, sfw, or nsfw. This isn't decoration; it rewrites the instruction entirely. Neutral gets a precise object/action/setting read, creative tells it to write like a text-to-image prompt, and nsfw is the unapologetic "include visible body parts" mode. All wrapped around your own prompt.
  • prompt - your extra instruction, default describe the image. This is where you steer it: "describe the lighting", "focus on the clothing", "describe as a prompt for SDXL".
  • cleanup_output - default on. It strips <think> reasoning blocks (DeepSeek-style models spew those) and the "The left image / The right image" lines that vision models hallucinate when comparing image pairs. Leave it on.

Output: a single description string. Wire it into a ShowText|pysssss node to read it, or feed it into a text node that goes to your CLIPTextEncode for an img2img rerun.

Installing it

Everything in this pack installs the same way. ComfyUI Manager: search OllamaTools and hit install. Or the manual route:

cd ComfyUI/custom_nodes
git clone https://github.com/max-dingsda/OllamaTools.git

Restart ComfyUI. The only real dependencies are requests and Pillow, which are almost certainly already in your ComfyUI environment. Then install and start Ollama itself, and pull a vision model:

ollama pull llava:latest

That's it. No key, no account, no config file.

Where people get burned

The #1 cause of a blank or broken result is Ollama simply not running - the node returns an [ERROR contacting Ollama: ...] string in place of the description. On Windows that means the Ollama tray app has to be up; on Linux, ollama serve. Second: a model that isn't pulled yet. Third: forgetting the text-only default model can't see images. The dropdown list is hardcoded, too - if you pulled a vision model that isn't in the list, you can't select it from this node, which is a real limitation for a pack that's otherwise this simple.

CategoryOllamaTools

Inputs (5)

NameTypeDefaultDescription
imageIMAGEThe image you want the LLM to describe. Usually from 'Load Image'.
modelCOMBOministral-3:latestMultimodal LLM used for describing the image.
styleCOMBOneutralChoose how the image should be interpreted: factually, creatively, or filtered for SFW/NSFW.
promptSTRINGdescribe the imageAdditional instruction or focus for the image description. Used alongside style.
cleanup_outputBOOLEANtrueRemove hallucinations and verbose reasoning from the LLM output.

Outputs (1)

NameTypeDescription
descriptionSTRING