OpenRouter Models
OpenRouter Models — the boring node that keeps your LLM workflow honest
- models
- status
The third node in the EACloudNodes pack doesn't talk to any model at all. It's a lookup tool: it pulls OpenRouter's full model catalog, filters it, sorts it, and dumps it as readable text. No chat, no generation, no magic. And honestly, it earns its place - because the one genuinely annoying thing about the pack's OpenRouter Chat node is that the free-model landscape shifts constantly. Models get retired, free endpoints turn paid, new ones land weekly. This node is the way to find out what's actually available right now, inside ComfyUI, instead of clicking through openrouter.ai in a browser.
Use it when you're about to type a manual_model id into OpenRouter Chat and want to confirm it still exists, or when you want to find "a vision model with a big context window that's free today." It answers both.
How it works
It's a single authenticated GET to https://openrouter.ai/api/v1/models with your key. The filter_text field is where the work happens: terms are space-separated and AND-ed together, and they match against a model's id, name, and description. The special case is the word free - that one isn't a text match, it checks the actual pricing fields and only keeps models where prompt/completion/image/request costs are all zero. So free (the default) genuinely means free, and free claude means "free models with claude in the name."
Sorting is by name, pricing (per-token prompt cost), or context_length, each ascending or descending. Output is a formatted text block per model - id, name, context length, and per-token pricing - which you can read directly or pipe anywhere text flows.
Inputs and outputs
Just four inputs, all required, all simple:
api_key- your OpenRouter key. Annoying note: the catalog endpoint is public, but this node insists on a key anyway. Same visibility warning as the rest of the pack - the key sits plain-text in the workflow.filter_text- defaultfree. Leave empty to list everything.sort_by-name,pricing, orcontext_length.sort_order- ascending or descending.
Outputs are models (the formatted list as a STRING) and status (a success/failure line, e.g. "Found 47 models"). Unlike the chat nodes there's no help output and it isn't an output node - it's a mid-graph utility, wire models into a text display or a save node.
Installing it
Same pack, same one-time setup as its siblings. ComfyUI Manager: search ComfyUI-EACloudNodes. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/EnragedAntelope/ComfyUI-EACloudNodes
cd ComfyUI-EACloudNodes
pip install -r requirements.txt
Restart and the three nodes register together. Dependencies are just Pillow, requests, torch, torchvision - nothing new, no model downloads.
Common issues
The failure modes are handled in-node with friendly status messages: 401 means a bad key, 429 means you're rate-limited, 500 means OpenRouter's having a bad day (their status page is the fix). The one real gotcha is filter_text semantics - it's AND, not OR, so free gpt narrows hard and can return nothing if no model matches both. And "no models found" with free as the filter is worth a double-take: either the free catalog genuinely shrank, or you're rate-limited and seeing an empty response. As always with a third-party node handling your API key, glance at the source before you trust it - it's two hundred lines and readable.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | ⚠️ Your OpenRouter API key from https://openrouter.ai/keys (Note: key will be visible - take care when sharing workflows) | |
| filter_text | STRING | free | Filter models by text. Examples: 'free' for free models (pricing=$0), 'gpt' for GPT models, 'free claude' for free Claude models. Leave empty to show all models. Multiple terms are AND-ed together. |
| sort_by | COMBO | name | Sort models by: 'name' (alphabetically), 'pricing' (cost per token), or 'context_length' (maximum input size in tokens). |
| sort_order | COMBO | ascending | Sort order: 'ascending' (A-Z, low to high) or 'descending' (Z-A, high to low). |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| models | STRING | — |
| status | STRING | — |