👁️ Polza Vision
Hand any image to GPT-4o, Claude or Gemini from inside your graph
- image
- text
- cost_rub
- total_tokens
Polza Vision is the multimodal twin of Polza Chat: you feed it an image plus a text prompt, it hands the pair to a frontier vision model, and you get a text reply back. Same aggregator, same single API key, same "the model runs on someone else's GPU" deal. In the LLM-in-the-graph world, this is the VLM-captioning slot - describing a reference image to seed an img2img prompt, checking what a render actually shows, or building a describe-and-redraw loop where its text output feeds back into a generator.
The usual two jobs apply. For captioning a LoRA training set, the community default is still a local captioner like JoyCaption or Florence-2 - offline, uncensored, free per call. Polza Vision is the API path, and you pick it for exactly the reason you pick any API path: genuine frontier-chat quality when you need it and don't care about local or NSFW. Just know the trade is real - your image leaves your machine, and the vendor's moderation is the ceiling on what it will describe.
How it works
The mechanics are simple and worth understanding because they explain one behavior that surprises people. The node takes your ComfyUI IMAGE tensor, converts each frame to a base64 PNG data URI, and stuffs them into a standard chat-completions message as image_url content - alongside your text prompt - then POSTs to the chat endpoint. Because it sends every frame in the batch, a batch of 6 images means 6 images worth of tokens in one call. A detail of low downsamples the vision input server-side, which is both faster and cheaper; high spends more for finer readings. Set it to low unless you actually need the detail.
The inputs that matter
- image - required. Any IMAGE tensor; batch frames all get analyzed.
- prompt - required, defaults to "Describe this image in detail." This is where you scope the job: "describe the lighting," "extract the clothing tags," "write a prompt that would regenerate this."
- model - dropdown, defaults to
openai/gpt-4o. Vision-capable models likeanthropic/claude-sonnet-4-5-20250929orgoogle/gemini-2.5-flash-preview. As with the other nodes, click Load models first to populate it. - system_prompt - optional instruction that shapes the reply ("reply only with JSON").
- detail -
auto/low/high, discussed above. The one input you'll actually tune for cost.
temperature and max_tokens are standard chat knobs you can mostly leave alone.
Outputs
Three: text (the analysis - wires into any STRING slot, including another Polza node's prompt field), cost_rub (the call's cost in rubles), and total_tokens (so you can see how expensive that 6-frame batch got). The node's own widget shows a preview plus the token/cost line.
Installing it
Part of the ComfyUI-Polza pack. ComfyUI Manager → search ComfyUI-Polza → install → restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/PioneerMNDR/ComfyUI-Polza
cd ComfyUI-Polza
pip install -r requirements.txt
Restart, then get a key at polza.ai and set it via the node's api_key field, POLZA_API_KEY, or a config.json in the node folder. Nothing to download - the vision models live upstream.
Common issues
First-run failure is almost always the same as the rest of the pack: you hit Queue with the model dropdown still at "Click Load models," and the node politely returns that message as its output text instead of an analysis. Set the key, load the models, run again.
The subtler issue is the batch one. People drop a folder-load of frames into the image input expecting "analyze the folder" and instead get one fat, multi-thousand-token call - and the bill reflects it. If you want per-image descriptions, feed frames one at a time, or accept the batch cost knowingly.
And the category-level caveats apply unchanged: every call is metered (the node even re-runs on every queue pass, since it's marked always-changed), your images go to Polza's upstream providers, and the filters follow the models - a Gemini refusal is a Gemini refusal, no local weights to abliterate. Read the MIT-licensed source if you want to see exactly what's transmitted. For a one-off "what am I looking at," it's excellent. For a 10,000-image dataset, get JoyCaption running locally first.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| prompt | STRING | Опиши это изображение подробно. | — |
| api_keyopt | STRING | API‑ключ (пусто → env / config.json) | |
| modelopt | COMBO | openai/gpt-4o | Vision‑модель: openai/gpt-4o, anthropic/claude-sonnet-4-5-20250929, google/gemini-2.5-flash-preview … |
| system_promptopt | STRING | — | |
| temperatureopt | FLOAT | 1.000–2 | — |
| max_tokensopt | INT | 20481–128000 | — |
| detailopt | COMBO | auto | Детализация изображения (low = быстрее/дешевле) |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |
| cost_rub | FLOAT | — |
| total_tokens | INT | — |