RunNode LLM API Node
Prompt, image or video in, text out
- ref_image
- video
- describe
This is the node to reach for when the other four in the pack are too opinionated. RunNode's translator nodes rewrite your text, the Midjourney node imposes a whole --v 6.0 format on it - this one just calls an LLM and gives you the raw answer back. Give it a role, a prompt, and optionally an image or a video clip, and it hands you a STRING you can wire anywhere. If you want a vision-language model sitting in your graph doing one bespoke job (caption an image, describe a frame, answer a question about your render), this is the one.
The name is honest: it does not run a model. It's an API call. Under the hood it uses the openai Python SDK against any OpenAI-compatible /chat/completions endpoint - no GPU, no model files, nothing to download. An attached ref_image gets encoded to base64 WebP and sent as an image_url; a video gets sampled down to a handful of keyframes (five by default, no way to change that on this node) which are sent the same way. Neat detail: when it detects visual input, it switches which config provider it uses - the pack keeps a separate vllm provider block for vision models, and a plain llm block for text-only calls.
The inputs that matter are just a few:
api_baseurl- required, and the one people forget. There's no default, and the code quietly falls back to your config file or environment variables if you leave it blank... which, if none are set, means it silently points atapi.openai.comwith an empty key. That's how you get an auth error that makes no sense.api_keyandmodel- your key and the model name the endpoint expects.role- the system prompt ("You are a helpful assistant" by default). This is where you actually steer the node.prompt,temperature(0.6),seed- the ask itself.
The single output, describe, is a plain string. Wire it into a text-display node, into a CLIP Text Encode, or straight back into another node's text input. That's the whole point of an LLM as a graph node - it operates on text, upstream of the sampler, so it can feed anything that accepts a string.
To install: ComfyUI Manager → search "RunNode Prompter", or the manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/SF-Runnode/ComfyUI_rn_prompter
Then restart ComfyUI. There are no model downloads. One real gotcha: the pack ships no requirements.txt, and it imports openai at load time. If ComfyUI throws a module error, that's why:
pip install openai
in your ComfyUI environment. Where people get burned: blank api_baseurl falling back to OpenAI with no key, and forgetting that the default config points at an internal endpoint (llm-oneapi.bytebroad.com) that means nothing outside the org that built this. The pack is barely known on the wider internet - 0 impressions on comfy.icu, no community threads - so don't expect hand-holding. One more thing to know: the node re-runs on every queue even if nothing changed, so it makes a paid API call each time. And since it's an API wrapper by design, it holds a key and phones home - worth double-checking that api_baseurl is exactly the server you intend before you paste your key into it.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| api_baseurl | STRING | — | |
| api_key | STRING | — | |
| model | STRING | — | |
| role | STRING | You are a helpful assistant | — |
| prompt | STRING | Hello | — |
| temperature | FLOAT | 0.60 | — |
| seed | INT | 100 | — |
| ref_imageopt | IMAGE | — | |
| videoopt | VIDEO | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| describe | STRING | — |