GRSAI Generate Image
Nano Banana without a GPU — GRSAI's hosted image API, in your graph
- image
- image1
- image2
- image3
- image4
- history
- image
- text
- history
Remember the "Nano Banana" hype - Google's Gemini image model that people were calling the best edit model around, and then couldn't run locally? GRSAI Generate Image is the workaround: it calls a third-party hosted API that serves nano-banana and friends (gpt-image, sora-image) and drops the result back into ComfyUI as a normal IMAGE tensor. No 3090, no quantization dance - just a credit card and an API key.
It's one of the many LLM/API nodes in the YogurtNodes pack (yogurt7771/ComfyUI-YogurtNodes). If you're already running the Gemini/OpenAI siblings from this pack, this one slots into the same family: async submit, poll until done, return tensors.
How it works
The node submits your prompt to GRSAI's /v1/draw/ endpoint, then polls at poll_interval_ms (default 2000ms) until the job finishes, giving up after max_wait_seconds (default 300). The finished image comes back as an image output you can preview, save, or pipe straight into an upscale pass. It also returns text (often the model's caption or status) and history for chaining.
The model_name dropdown is the fun part: defaults to nano-banana-pro, but the full list includes gpt-image-2, gpt-image-1.5, sora-image, and the whole nano-banana line (-fast, -pro, -4k-vip). These are the hosted-API names, not the open weights - this is a paid service, and the -vip/-4k variants are the premium tiers. Mind the bill.
Inputs that matter
prompt- the only thing you must write. Text-to-image, or edit instructions when you also feed an image.model_name- pick your poison.nano-banana-prois a solid default for editing; the others trade speed/cost.aspect_ratioandimage_size- ratio (auto,1:1,16:9…) and size (1K/2K/4K). 4K exists; it's also where the wait and the price go up.draw_type-autoinfers the endpoint from the model name. Leave it alone unless you know why you're changing it.api_key- the widget, or the pack'sapi_key.json/ env fallback. GRSAI keys come from grsaiapi.com.
For editing, feed image (plus image1–image4) as reference, or pass URLs through image_urls - it accepts a JSON array or newline/comma-separated list.
Outputs: image, text, history.
Install
Standard YogurtNodes procedure - ComfyUI Manager (search "YogurtNodes"), or:
cd ComfyUI/custom_nodes
git clone https://github.com/yogurt7771/ComfyUI-YogurtNodes.git
cd ComfyUI-YogurtNodes
pip install -r requirements.txt
Restart, then find it under Yogurt Nodes / LLM. Dependencies are just requests and pillow-adjacent stuff - nothing heavy, because the heavy lifting happens on someone else's server.
Troubleshooting
The honest warning first: GRSAI is a small third-party API with almost no community footprint - I couldn't find meaningful Reddit or forum discussion of it. Treat it as a paid convenience, not infrastructure. That means:
- "It hangs forever." You're polling a remote job. Check
max_wait_seconds- bump it if 4K or the-vipmodels are timing out on a busy server. And settimeouton each request; 0 (never) can strand a queue. - API key/auth errors - the key has to be the GRSAI one, not a Google one. The nano-banana names are GRSAI's, not Google's.
- Cost surprises. Every successful generation is a paid API call, and retries (
retry_count) repeat the request. If a workflow loops on a batch, the bill loops too. proxy_url- same format as the other Yogurt LLM nodes (protocol://user:pass@addr:port); set it if you're behind a proxy.
If you just want local image editing without subscriptions, this is not the node - that's what the Qwen / Flux-inpaint side of your stack is for. But if you want the newest hosted model in the middle of a ComfyUI workflow without a GPU upgrade, this is about as plug-and-play as it gets.
Inputs (22)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | API key for accessing the GRSAI API | |
| base_url | STRING | Base URL for the GRSAI API, leave blank to use config/env/default host | |
| model_name | COMBO | nano-banana-pro | GRSAI model name from the GRSAI documentation |
| system_prompt | STRING | Optional system prompt prepended locally before the request prompt | |
| prompt | STRING | Prompt content for image generation or editing | |
| aspect_ratio | COMBO | auto | Output image ratio documented by GRSAI |
| image_size | COMBO | 1K | Output image size documented by GRSAI |
| retry_count | INT | 1 | Number of retries when submit or poll fails |
| poll_interval_ms | INT | 2000 | Polling interval in milliseconds for task result queries |
| max_wait_seconds | INT | 300 | Maximum total time to wait for GRSAI task completion |
| chat_template | STRING | <-system-> {{system_instruction}} <-/system-> <-user-> {{prompt}} <-/user-> | Local prompt template used to combine the system prompt and prompt |
| proxy_url | STRING | Proxy URL, format: protocol://user:pass@addr:port | |
| timeout | INT | 00–2147483647 | Timeout for each request in seconds, 0 means no timeout |
| imageopt | IMAGE | — | |
| image1opt | IMAGE | — | |
| image2opt | IMAGE | — | |
| image3opt | IMAGE | — | |
| image4opt | IMAGE | — | |
| image_urlsopt | STRING | Reference image URLs or data URLs, accepts JSON array or newline/comma separated values | |
| historyopt | HISTORY | — | |
| extraopt | STRING | {} | Extra request parameters in JSON format |
| draw_typeopt | COMBO | auto | Endpoint type for /v1/draw/. Use auto to infer from the selected model name |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| text | STRING | — |
| history | HISTORY | — |