Provider: GRSAI
The Relay Provider With No Paper Trail At All
- provider
Let's start with the evidence, because it frames everything else: "GRSAI" appears in zero threads of the entire reddit corpus this KB is built from. The pack that wraps it has zero mentions too. So this isn't a node you found through a tutorial - you either have a GRSAI key already, or you're evaluating relays and this one surfaced.
That's not a knock. The reseller layer around Google's and OpenAI's image models is a crowded, mostly invisible market - kie.ai, laozhang, cometapi, apiyi and a long tail of near-identical proxies - and the graph-builder's job is just to get whichever one you picked wired into ComfyUI. This node is the pack's dedicated GRSAI pipe, and it's unusual in that it knows GRSAI's draw protocol specifically rather than pretending the endpoint is OpenAI-shaped.
Why a relay at all
Four reasons, and only three survive contact with reality: cost (volume discounts undercut the first-party rate), region (the official API isn't available or isn't payable where you are), billing (one key and a card instead of a cloud project and a billing account), and filtering (some relays run looser moderation). That last one is vendor marketing until proven - your prompt still gets handed to the vendor's model, which does its own refusing.
The fields
This provider has more dials than most, because generation on GRSAI is a task: you submit a draw job and poll it.
- api_key - blank resolves to
grsai(orgrsai_api_key) inapi_key.json, thenGRSAI_API_KEY. Nothing found means a clear error rather than a mystery. - base_url - no default filled in the node; leave empty for the built-in endpoint (
grsaiapi.com), or set it if your account points elsewhere. Agrsai_base_urlkey in the JSON works as a fallback. - max_wait_seconds - default 600, range 30–3600. This is the ceiling on waiting for the draw task to finish. The pack's tooltip is explicit: maximum time to wait for the draw task.
- proxy_url - optional; same
http://orsocks5://form as the rest of the pack. - timeout - per-request network timeout, seconds,
0means no limit.
Output: one provider socket. Wire it into Nano Banana or GPT Image - those are the families it routes for. Not every version in those dropdowns is available through GRSAI, and picking one that isn't gives you the "not available via provider, supported providers are…" error rather than a silent substitution.
The two timeouts, and why they're separate
This is the part people misread, so worth stating plainly: timeout governs a single HTTP request; max_wait_seconds governs the whole job, polling included. Setting timeout to 0 thinking "no timeout is safest" doesn't help a draw task that's queued behind someone else's credits - max_wait_seconds is the one to raise for that. Conversely, if your relay is just slow to answer at all, timeout is the one to bump. They fail with different errors and people spend an evening on the wrong field.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/yogurt7771/ComfyUI-YogurtNodes
cd ComfyUI-YogurtNodes
pip install -r requirements.txt
Manager install is fine too - search "YogurtNodes", then look for "Provider: GRSAI (Yogurt Nodes)" on the canvas, since display names get the suffix at runtime.
Key file, custom_nodes/ComfyUI-YogurtNodes/yogurt_nodes/llm/api_key.json:
{ "grsai": "your-key", "grsai_base_url": "https://your-endpoint.example" }
Read this before you paste a key
A relay provider is the highest-risk shape of node in this ecosystem, and this one has the least community scrutiny possible - nobody on Reddit is going to notice if it changes. Ask yourself two questions. Did you choose this relay, or did you find the pack first and now need a relay to justify it? And do you know what happens to your prompts and reference images on that endpoint? The pack's own architecture answers a related worry well: GRSAI declares no official-key fallback, so a blank field errors rather than quietly shipping your openai key to a third party. That's the pack being careful. The relay's own behaviour is still the relay's.
If the answer to the first question is "I need to cut costs on a big batch," sure. If it's "this seemed cheaper," run the numbers against your own key first - the middleman sees every prompt either way.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | Leave empty to use 'grsai' from api_key.json, then the GRSAI_API_KEY environment variable. | |
| base_url | STRING | API base URL; leave empty for the default endpoint. | |
| max_wait_seconds | INT | 60030–3600 | Maximum time to wait for the draw task. |
| proxy_url | STRING | Proxy URL, e.g. http://127.0.0.1:7890 or socks5://127.0.0.1:1080. | |
| timeout | INT | 00–3600 | Request timeout in seconds; 0 means no limit. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| provider | YOGURT_LLM_PROVIDER | — |