Wangsu Banana Image Generator
The same Gemini image models, minus the OpenRouter middleman
- image1
- image2
- image3
- image4
- image5
- image6
- image7
- image8
- image9
- image10
- image
- status
This is the pack's other Gemini node, and it does the exact same trick as its big sibling - call Google's image models through an API and hand the result back as a ComfyUI tensor - except the request goes to Wangsu instead of OpenRouter. "Banana" is the giveaway: it's the community's shorthand for the Nano Banana / Gemini image stack, and this node only offers the two current members of it, gemini-3-pro-image-preview and gemini-3.1-flash-image-preview.
Why would you use this when the main node exists? Same reason people pick any reseller over first-party: region, billing, and price. Wangsu is a large Chinese CDN and cloud outfit that resells the same Google models on OpenAI-compatible endpoints, which makes this the on-ramp if OpenRouter or Google Cloud isn't payable or reachable where you live. If you already have a Wangsu account, this is a one-line .env change to keep working in ComfyUI. If you don't, honestly, just use the OpenRouter node - there's no quality difference, because it's literally the same model behind both.
How it works
The mechanism is near-identical to the OpenRouter node: the OpenAI SDK, chat.completions.create, and an extra_body with modalities: ["image", "text"], an image_config (plus a mirrored eca_image_config) carrying resolution and aspect ratio. Two real differences. First, your system_prompt is folded into the user message as a text block rather than sent as a real system role - worth knowing if you're porting prompts and wondering why a system instruction feels weaker. Second, the returned image is usually an actual URL (sometimes a data: URL), which the node downloads itself with a 60-second timeout. So you need outbound access to Wangsu's servers, not just the API endpoint.
The inputs that matter
It has two inputs the main node lacks, and they're why you'd pick it for iteration:
temperature- 0 to 2, default 0.6. The tooltip says it all: 0 is deterministic, higher is more creative. This is the main way to steer how wild generations get.seed- -1 (random each run) up to a 32-bit max. Set a fixed seed and you can actually reproduce a generation, which is more than the pack's other nodes offer.
Everything else is familiar: system_prompt, user_prompt, model, resolution (0.5K–4K), aspect_ratio (seven ratios), and optional image1–image10 for reference images. Outputs are image and status. Same 0.5K restriction as the main node - it's rejected unless the model is the 3.1 Flash.
Install
Same pack, same install: ComfyUI Manager → search OpenRouterImage, or clone and pip install -r requirements.txt. The one extra step is pointing it at Wangsu in the node's .env file:
cd ComfyUI/custom_nodes/ComfyUI-OpenRouterImage
echo 'WANGSU_BASE_URL=https://your-wangsu-endpoint' >> .env
echo 'WANGSU_API_KEY=your-key' >> .env
Restart and it'll appear under image_generation as "Wangsu Banana Image Generator."
Two honest caveats
First, this node is undocumented - the pack README only describes the OpenRouter node; the .env variable names in the code and .env_example are the real documentation. That's a hint about the pack's maturity, not a problem with the node itself, but go in eyes open. Second, the model is still Google's, so everything that's true of Gemini applies: per-call cost, prompts and reference images leaving your machine, content-policy refusals at the source, SynthID watermark. The reseller changes the billing, not the model.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| system_prompt | STRING | You are an expert image generation assistant. Create high-quality, detailed images based on the user's description. | — |
| user_prompt | STRING | A beautiful landscape with mountains and a sunset | — |
| model | COMBO | gemini-3-pro-image-preview | 2 options: gemini-3-pro-image-preview, gemini-3.1-flash-image-preview |
| resolution | COMBO | 1K | 4 options: 0.5K, 1K, 2K, 4K |
| aspect_ratio | COMBO | 1:1 | 7 options: 1:1, 2:3, 3:2, 16:9, 9:16, 4:3, +1 |
| temperature | FLOAT | 0.600–2 | Controls randomness: 0 = deterministic, higher = more creative |
| seed | INT | -1-1–2147483647 | Seed for reproducible generation. -1 = random each run |
| image1opt | IMAGE | — | |
| image2opt | IMAGE | — | |
| image3opt | IMAGE | — | |
| image4opt | IMAGE | — | |
| image5opt | IMAGE | — | |
| image6opt | IMAGE | — | |
| image7opt | IMAGE | — | |
| image8opt | IMAGE | — | |
| image9opt | IMAGE | — | |
| image10opt | IMAGE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| status | STRING | — |