OneThingAI Image Understanding
Let a cloud vision model describe your images — OneThingAI Image Understanding
- image
- STRING
Here's the thing that will either sell you on this node or make you close the tab: it does not load a model, it does not touch your GPU, and it costs you no VRAM. OneThingAI Image Understanding takes an image in your ComfyUI graph, ships it off to a cloud vision API, and hands back a plain-text description. In an ecosystem where half your nodes are 5GB model downloads, that's refreshing - or a dealbreaker, depending on how you feel about your images leaving the machine.
What it's actually for
This is an image-to-text node in the narrow, literal sense: IMAGE in, STRING out. Feed it a generated image and have it write the prompt back out, or describe a reference photo you're trying to match. Where it shines is as the text source for a workflow: wire the STRING output into a text display node, a prompt builder, or anything that consumes natural language.
If your real goal is bulk-captioning a LoRA training dataset, pause before you pick this. That job's community standard is a local captioner - JoyCaption or Florence 2 for natural language, WD14 for tags - free and private. This node is the paid-cloud route: zero setup beyond a key, but your images leave the box and you pay per call.
How it works
The mechanism is transparent - the whole node is one file. It takes your IMAGE tensor, converts it to a PIL image, encodes it as base64 PNG, and builds an OpenAI-style chat payload: your system_prompt (if set), a user message containing your user_content text plus the image as a data:image/png;base64,... URL. That gets POSTed to https://api-model.onethingai.com/v1/chat/completions - yes, an OpenAI-compatible endpoint - with a Bearer token from your API key.
Then the resilience part: the request runs through a urllib3 retry adapter that retries on 429, 500, 502, 503, and 504 with exponential backoff, up to your retries count. One quirk: if the API call throws, the node doesn't raise - it returns an "Error: ..." string as its output. Handy for debugging, but a downstream node can silently receive an error message as if it were a description.
The inputs and outputs that matter
The input list looks long, but a beginner really sets two of them:
api_key- the OneThing AI key, pasted as plain text. Leave it empty and the node hard-fails with "API key is required" rather than calling the API.user_content- the actual instruction, defaulting to "Please describe this image in detail." Want a caption instead? Type that. Want tags only? Say so.system_prompt- optional system-level instruction, empty by default. Set the "persona" of the describer once here and leaveuser_contentfree.model- defaults togpt-4o. The node doesn't validate model names, so you can point it at whatever the API accepts; knowing which names are valid is on you.max_tokens(default 500, up to 10000),retries(default 3),timeout(default 20s) - tune these if responses come back truncated or timed out.
The single output is a STRING - wire it into a text display node or any text-hungry downstream node.
Installing it
The README's route is a straight clone, and here's the good news: its requirements.txt is just Pillow and requests, both of which a stock ComfyUI already ships. The "dependency" step is effectively a no-op - no torch reinstall, no version pinning wars:
cd ComfyUI/custom_nodes
git clone https://github.com/OneThingAI/ComfyUI_Onething_CV.git
pip install -r requirements.txt
Restart ComfyUI and you'll find "OneThingAI Image Understanding" under OneThingAI/CV. One honest caveat: this pack isn't in the ComfyUI Manager registry as of this writing, so Manager search likely comes up empty - the clone above is the reliable path.
Common issues
- "API key is required" - the node raises before it ever calls the network. Paste the key into the node widget; there's no shared/global key field in this pack.
- Timeouts on big images - everything is base64 PNG over the wire, so a huge render is a fat payload. Bump
timeouttoward 100s and/or downscale the input first. Error:in the output string - that's the node's error channel, not a crash. Retries are already handled internally; a persistent error usually means a bad key, no internet, or the service being down.- Privacy - images go to a third party's servers; nothing in the README or code says otherwise, so don't feed this sensitive or licensed content.
Where you might get burned: OneThing AI is a niche service with basically no community footprint on r/comfyui or r/StableDiffusion - no threads about its uptime, pricing, or model quality to lean on. If the service is solid, this is a handy utility; if it goes quiet, you've got a dead node and the answer is a local captioner anyway. Great for occasional descriptions inside a workflow; don't build anything critical on it.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| api_key | STRING | — | |
| model | STRING | gpt-4o | — |
| system_prompt | STRING | — | |
| user_content | STRING | Please describe this image in detail. | — |
| retries | INT | 30–5 | — |
| timeout | INT | 205–100 | — |
| max_tokens | INT | 500100–10000 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| STRING | STRING | — |