GPT-5 Nano
The Runware text node
- messages
- images
- text
This is the node that makes you look at your workflow and ask why you've been wrestling a local LLM into ComfyUI at all. GPT-5 Nano is OpenAI's small, cheap reasoning model, and the Runware pack hands it to you as one node that returns a plain text string. No model download, no GGUF quantization roulette, no VRAM. You type, it thinks, ComfyUI gets the answer.
It's part of Runware's official ComfyUI pack - every Runware model ships as a node that runs on their cloud GPUs over their REST API. Your machine does none of the inference. What you need instead is a Runware API key, which is the one thing everyone forgets the first time and then never does again.
What you actually set
The required input is messages, which is a builder socket, not a text box. You create a Runware/Params messages node, add user/assistant turns, and wire it in. That's the pack's design: model nodes stay clean, and the parameters hang off typed builder nodes.
The inputs worth touching:
settings.systemPrompt- the model-level instruction that shapes every reply. This is where you set its role, tone, and rules.settings.thinkingLevel-none,low,medium, orhigh. This controls how much internal reasoning happens before it answers. Higher is better at hard problems and slower;noneturns it into a fast autocomplete-style model.mediumis the default and a sensible place to start.settings.maxTokens- how long an answer can be. Default 32,000, up to 128,000.outputFormat-TEXTorJSON. If you're feeding the output into anything downstream that parses it, JSON saves you a cleanup step.images- anIMAGEsocket, so you can pass a picture along with the text for a genuinely multimodal turn without leaving the graph.numberResults- up to 4, each with a different seed. Handy for picking a winner from variations.advanced_json- the escape hatch. Raw JSON merged into the request, which is how you attach tools and ajsonSchema. If you've never written Runware request JSON, leave it alone.
The only output is text, a STRING. Wire it into a text display node, or feed it into a prompt node to drive an image or video generation downstream. That loop - LLM writes the prompt, image node draws it - is the most common way this node ends up in a graph.
Install
ComfyUI Manager → Custom Nodes → search Runware → install → restart. Or the manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/Runware/ComfyUI-Runware
pip install -r ComfyUI-Runware/requirements.txt
Then grab an API key from runware.ai/api-keys and drop it into ComfyUI Settings → Runware API key (or export RUNWARE_API_KEY). The pack only depends on runware-sdk, pillow, and soundfile - nothing heavy, and it needs Python 3.11+.
Where people get burned
- "No Runware API key" - the single most common error, and it's exactly what it says. Set the key in Settings, restart, move on.
- Cost. This is not free, and reasoning tokens add up faster than you expect. The node's title bar prints the per-run cost (and NSFW flag if a content check ran), so glance at it before you queue 4 variations of a 128k-token answer.
- Thinking level isn't free either.
highthinking on a long prompt is where the bill sneaks up. If you only need a one-line prompt rewrite,lowis plenty.
One honest caveat: if your workflow is already running a local model happily, switching to this buys you nothing but a bill. Reach for it when you want a model you can't run locally, or you want the task off your GPU entirely.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| messages | RUNWARE_MESSAGES | — | |
| imagesopt | IMAGE | — | |
| seedopt | INT | 00–2147483647 | Random seed for reproducible generation. When not provided, a random seed is generated in the unsigned 32-bit range. |
| numberResultsopt | INT | 11–4 | Number of results to generate. Each result uses a different seed, producing variations of the same parameters. |
| includeUsageopt | BOOLEAN | false | Include token usage statistics in the response. |
| settings.maxTokensopt | INT | 320001–128000 | Maximum number of tokens to generate in the response. |
| settings.systemPromptopt | STRING | System-level instruction that guides the model's behavior and output style across the entire generation. | |
| settings.thinkingLevelopt | COMBO | medium | Controls the depth of internal reasoning the model performs before generating a response. |
| toolChoiceopt | BOOLEAN | false | Enable to set toolChoice. Off uses the model's default. |
| toolChoice.nameopt | STRING | Name of the specific tool the model must call. Required when type is `tool`. | |
| toolChoice.typeopt | COMBO | (default) | Strategy the model uses to decide when and which tools to call. |
| outputFormatopt | COMBO | TEXT | Output format for the generated text. |
| advanced_jsonopt | STRING | Optional JSON merged into the request. For: jsonSchema, tools |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |