OpenRouter Studio · Image
Every closed image model on OpenRouter, one node, your own key
- images
- masks
- local job id
- metadata JSON
- artifact paths JSON
- actual cost USD
This is the node for the models you can never download. Nano Banana Pro, GPT Image, Recraft V3, whatever the OpenRouter image catalogue is advertising this week - all reachable from a normal ComfyUI graph and billed to your own OpenRouter key. No Comfy credits, no reseller subscription. If you've wanted a closed image model inside your local pipeline, this is the bring-your-own-key door.
Let's be upfront about the tradeoff, because it's the same one every API wrapper makes: the model is not on your machine. Your prompt and reference images leave it, the model's content filter applies with no community bypass, and per-call cost adds up faster than people expect. The reason you reach for this anyway is the reason nobody can argue with - Nano Banana has no weights. An API node is the only door for that, and the community's line on the whole category is basically "fine for a model you can't run, wrong default for one you can." Keep that frame and this node is honest value.
How it works
The clever bit is the catalogue-driven form. The model input is a live combo populated from OpenRouter's media catalogue (merged with a bundled snapshot at startup). Pick a model and the whole panel repopulates with just the controls that model actually advertises - FLUX gets steps and guidance, Recraft gets style controls, OpenAI models get moderation - instead of one lowest-common-denominator form. That's what strict_validation (on by default) enforces: it rejects a control the selected model doesn't advertise before you spend money on a request that would fail anyway.
Reference slots appear in the model panel (reference_1, reference_2…) and take normal IMAGE wires. Oversized local references are downscaled before upload per reference_max_megapixels (default 16). You can also use @image_ref1 shortcuts in the prompt - a local convenience the node expands into plain language before submission. Note that a blank prompt is rejected outright: a reference is visual context, not a substitute for instructions.
Two inputs beginners usually leave alone but should know about: studio_reference_manifest is local-only Reference Inspector metadata that Studio manages automatically (it's never sent to OpenRouter), and rerun_nonce is the answer when re-running an identical workflow just hands you back the same result - bump it to force a genuinely fresh request. request_timeout_seconds (default 600) is how long a single generation POST may take.
Outputs
- images (
IMAGE) and masks (MASK) - decoded from the response. The mask is alpha/padding-derived, handy for compositing or feeding a real inpaint pass. - local job id, metadata JSON, artifact paths JSON, actual cost USD.
Raw bytes are saved to ComfyUI/output/openrouter_studio/. SVG results (Recraft, notably) are preserved as raw .svg and rasterized with resvg-py just for the preview - so you get the vector, not a degraded raster.
Install
Needs ComfyUI 0.28.0+ (Manager shows the requirement before you install). In Manager, search node packs for OpenRouter Studio, Install, restart. The "One key. The whole studio." screen opens automatically - paste your OpenRouter key and Connect. That's it: no model downloads, and the dependencies are light (Pillow, resvg-py, typing-extensions). The key lives in your ComfyUI user directory (__openrouter_studio/credentials.json), never in the workflow JSON.
Troubleshooting
- Model or option missing: right-click any OpenRouter Studio node → Refresh OpenRouter catalogue. If OpenRouter is unreachable the pack falls back to its last cache, then the bundled snapshot.
- A run ended without a definitive response: this pack deliberately never auto-retries a generation POST (OpenRouter documents no idempotency contract, so a retry could bill you twice). Check OpenRouter activity before resubmitting.
- Credential file "too permissive":
chmod 600the exact path in the error message. - SVG generated but preview failed: the raw
.svgis still in the output directory.
Honest caveat: the pack is new (v0.3.0, August 2026), so there's no battle-tested community reputation behind it yet. It's arbitrary Python that holds your key and calls the network by design - read the repo before trusting it, exactly as you should with any API pack. For "I need a closed image model inside my graph without Comfy's credit storefront," this is the cleanest path around.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| model | COMBO | Every image model in the current OpenRouter image catalogue. | |
| strict_validation | BOOLEAN | true | Reject controls not advertised for the selected model or endpoint before submission. |
| save_raw_artifacts | BOOLEAN | true | Save returned PNG/JPEG/WebP/SVG bytes in ComfyUI/output/openrouter_studio. |
| reference_max_megapixels | FLOAT | 161–80 | Oversized local references are downscaled before upload. |
| request_timeout_seconds | INT | 60030–3600 | — |
| studio_reference_manifest | STRING | Local-only Reference Inspector metadata. OpenRouter Studio manages this automatically; it is never sent to OpenRouter. | |
| rerun_nonce | INT | 00–2147483647 | Increment intentionally to request a fresh result with otherwise identical inputs. |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| masks | MASK | — |
| local job id | STRING | — |
| metadata JSON | STRING | — |
| artifact paths JSON | STRING | — |
| actual cost USD | FLOAT | — |