Nodes/ComfyUI-EACloudNodes/OpenRouter Chat
ComfyUI Node

OpenRouter Chat

One API key, fifty free LLMs inside your workflow — OpenRouter Chat

By EnragedAntelope·Created 2 years ago·Updated about 24 hours ago· 9
OpenRouter Chat
  • image_input
  • response
  • status
  • help
api_key
modelcohere/north-mini-code:free
manual_model
base_urlhttps://openrouter.ai/api/v1/chat/completions
system_promptYou are a helpful AI assistant. Please provide clear, accurate, and ethical responses.
user_prompt
send_systemyes
temperature0.70
top_p0.70
top_k50
max_tokens1000
frequency_penalty0.00
presence_penalty0.00
repetition_penalty1.10
response_formattext
seed_moderandom
seed_value0
max_retries3
debug_modeoff
additional_params

You do not need a second GPU to put a smart language model in your ComfyUI workflow. That's the whole pitch of the OpenRouter Chat node: one API key from openrouter.ai, one node, and the entire catalog of models OpenRouter fronts - dozens of them free. It is a chat-completion client wearing a ComfyUI jacket, and it's the node people actually mean when they say "put an LLM in ComfyUI without running Ollama."

Why would you want an LLM in the graph at all? The modern answer: prompt generation has become an in-workflow step, not a browser tab. The KB's own reading of the landscape is that LLM-assisted prompting is now the norm - on LLM-encoded models like Anima or Klein, the encoder is itself an LLM reading an instruction, so having another LLM write that instruction is translation between two things that speak the same language. In practice that means: feed a rough idea in, get a structured, camera-and-lighting-savvy prompt out, wire the response straight into your text encoder. It's also the obvious tool for batch captioning, JSON metadata, or "why is this prompt giving me fingers" debugging.

How it works

Under the hood it's a plain HTTP call to OpenRouter's OpenAI-compatible endpoint (https://openrouter.ai/api/v1/chat/completions). The node builds a message array - your system_prompt first, then your user_prompt - and POSTs it with a bearer token. Vision is handled by base64-encoding the image into the message content, the standard trick that makes the same endpoint speak to Llama-4, Qwen-VL, and the rest.

The model dropdown is the clever bit: instead of a hardcoded list that rots, the node fetches OpenRouter's public model catalog on load and caches it for five minutes. New models appear without a pack update - hit Refresh on the node to re-pull. If OpenRouter is unreachable, you still get "Manual Input" so nothing bricks.

The inputs that actually matter

The node exposes a lot of sliders; you'll touch maybe five.

  • api_key - your OpenRouter key. Required, and the tooltip is blunt about it: the key is visible in workflows. Redact before you share anything.
  • model - dropdown of currently-free models, or "Manual Input" with a custom provider/model:free (or paid) id in manual_model.
  • user_prompt - the thing you're asking. Required. This is the field you'd wire a node's text output into if you're chaining.
  • system_prompt - sets behavior. The default ("You are a helpful AI assistant…") is fine to overwrite when you want tag-style output or a strict JSON contract.
  • response_format - text or json_object. Pick JSON and the model will actually return parseable JSON, but tell it what fields you want in the prompt or you'll get a shrug.
  • temperature - 0.7 default; drop toward 0.2 for consistent structured output.

The ones to leave alone until you're chasing something: top_k, the three penalties, seed_mode/seed_value, max_retries. Outputs are response (the text/JSON - wire this into a Show Text node or a prompt writer), status (which model answered and the token counts), and help (a static usage cheat sheet).

Installing it

ComfyUI Manager is the easy road: search ComfyUI-EACloudNodes and install. Manually:

cd ComfyUI/custom_nodes
git clone https://github.com/EnragedAntelope/ComfyUI-EACloudNodes
cd ComfyUI-EACloudNodes
pip install -r requirements.txt

Then restart ComfyUI. Good news: requirements.txt is just Pillow, requests, torch, and torchvision - you already have all four, and there are no model files to download. The whole pack is three source files.

Where people get burned

  • Sharing a workflow leaks your key. It's stored as a plain string input. Strip it or use an env-style loader before posting a workflow.
  • Free models are a moving target. OpenRouter retires free endpoints with little notice; the "default" model you see is whatever the fetch returned, so it can drift between runs. If a dropdown entry 404s, that's why - pick a current one or type it manually.
  • Image too big. Vision inputs cap at 2048×2048, and the node tells you to resize rather than guessing.
  • Trust, but verify. Custom nodes run arbitrary Python with full OS access - the ecosystem has a documented history of exactly this being abused (the LLMVISION incident), and this is a third-party pack. Small install surface and readable source, but check the repo before you paste a key into it.
CategoryOpenRouter

Inputs (21)

NameTypeDefaultDescription
api_keySTRING⚠️ Your OpenRouter API key from https://openrouter.ai/keys (Note: key will be visible - take care when sharing workflows)
modelCOMBOcohere/north-mini-code:freeSelect a free OpenRouter model or choose 'Manual Input' for custom models. Models with 'vision' or 'vl' support image inputs. Use ComfyUI's Refresh to update this list from OpenRouter's API.
manual_modelSTRINGEnter a custom model identifier (only used when 'Manual Input' is selected). Format: provider/model-name[:free]. Leave empty if using dropdown.
base_urlSTRINGhttps://openrouter.ai/api/v1/chat/completionsOpenRouter API endpoint URL. Leave as default unless using a proxy or alternate endpoint.
system_promptSTRINGYou are a helpful AI assistant. Please provide clear, accurate, and ethical responses.Optional system prompt to set the AI's behavior and context. Defines the assistant's role, personality, and guidelines.
user_promptSTRINGMain prompt or question for the model. For vision models, describe what you want to know about the image. Required field.
send_systemCOMBOyesToggle system prompt sending. Set to 'no' if the model doesn't support system prompts or you want to skip it.
temperatureFLOAT0.700–2Controls response randomness and creativity. Lower values (0.0-0.3) = more focused and deterministic. Higher values (0.7-2.0) = more creative and varied.
top_pFLOAT0.700–1Nucleus sampling threshold. Controls diversity of word choices. Lower values (0.0-0.3) = more focused vocabulary. Higher values (0.7-1.0) = more diverse word selection.
top_kINT501–1000Limits vocabulary to top K most likely tokens. Lower values = more focused. Higher values = more diverse. 50 is a balanced default. Range: 1-1000.
max_tokensINT10001–32768Maximum number of tokens to generate in the response. Note: actual limit varies by model. Higher values allow longer responses. Range: 1-32,768.
frequency_penaltyFLOAT0.00-2–2Penalizes tokens based on their frequency in the output. Positive values reduce word repetition. Range: -2.0 to 2.0. 0.0 = no penalty.
presence_penaltyFLOAT0.00-2–2Penalizes tokens that have already appeared in the output. Positive values encourage topic diversity. Range: -2.0 to 2.0. 0.0 = no penalty.
repetition_penaltyFLOAT1.101–2OpenRouter-specific repetition penalty. Values > 1.0 reduce repetition. 1.0 = off. Higher values = stronger penalty. Range: 1.0-2.0.
response_formatCOMBOtextResponse format: 'text' for natural language, 'json_object' for structured JSON output. When using JSON, instruct the model in your prompt to output JSON.
seed_modeCOMBOrandomSeed behavior control: 'fixed' uses the seed_value below, 'random' generates new seed each time, 'increment' increases by 1, 'decrement' decreases by 1.
seed_valueINT00–9007199254740991Seed value for reproducibility when seed_mode is 'fixed'. Use same seed + parameters for similar outputs. Valid range: 0-9007199254740991 (JavaScript safe integer limit).
max_retriesINT30–5Maximum number of automatic retry attempts for recoverable errors (rate limits, temporary server issues). 0 disables retries. Range: 0-5.
debug_modeCOMBOoffEnable detailed error messages and request debugging information. Useful for troubleshooting API issues or parameter problems.
image_inputoptIMAGEOptional image input for vision-capable models. Supported: llama-4-maverick/scout, nemotron-nano-12b-v2-vl, qwen2.5-vl-32b. Maximum size: 2048x2048.
additional_paramsoptSTRINGAdditional OpenRouter API parameters in JSON format. Example: {"min_p": 0.1, "top_a": 0.5}. Use for advanced model-specific parameters not exposed in the UI.

Outputs (3)

NameTypeDescription
responseSTRING
statusSTRING
helpSTRING