YK-Banana2 Batch 🍌 v:YK-ai001
YK-Banana2 Batch in ComfyUI
- image_1_1
- image_1_2
- image_1_3
- image_2_1
- image_2_2
- image_2_3
- image_3_1
- image_3_2
- image_3_3
- image_4_1
- image_4_2
- image_4_3
- image_5_1
- image_5_2
- image_5_3
- image_6_1
- image_6_2
- image_6_3
- image_7_1
- image_7_2
- image_7_3
- image_8_1
- image_8_2
- image_8_3
- image_9_1
- image_9_2
- image_9_3
- image_10_1
- image_10_2
- image_10_3
- output_1
- output_2
- output_3
- output_4
- output_5
- output_6
- output_7
- output_8
- output_9
- output_10
The name is half joke, but the model behind it is very real. YK-Banana2 Batch is a ComfyUI node that fires up to ten image generations in parallel at a cloud API - the "Banana" is Google's Nano Banana, the same Gemini image model the whole internet couldn't shut up about in late 2025 - and hands you ten IMAGE tensors back. No local GPU grind, no checkpoints to download. You do, however, need a paid API key from a reseller you reach over WeChat, and that's the whole game with this one.
What it actually is
This is not a local model node. It's a thin wrapper around api.kie.ai, the marketplace API, calling the model id nano-banana-pro - that's Google's Nano Banana Pro (4K native output). The author brands the resold service "YK-Banana2 Pro", so don't hunt for a separate "Banana 2" model id in the code; the "2" is branding.
The pitch, straight from the README: each of the 10 tasks takes up to 3 reference images plus its own prompt. The canonical use case is fashion transfer - "put the clothes from image 2 on the person in image 1, keep the pose and scene." If you've ever wanted a grid of one outfit on five people in a single run, this is the shape of tool for it. People who lean on Nano Banana Pro in ComfyUI do tend to route it through reseller APIs, because the marketplace pricing is noticeably cheaper than the official ComfyUI/Fal path.
How it works
The mechanism is straightforward and worth knowing because it explains the failure modes. Reference images are base64-encoded as PNG data URLs, uploaded to Kie's file endpoint, and come back as download URLs. Then the node POSTs a createTask with the prompt, image URLs, aspect ratio, resolution, and a seed, and polls recordInfo every poll_interval_sec until the job hits success or max_wait_sec runs out. The result downloads and converts straight into an IMAGE tensor.
Parallelism comes from a ThreadPoolExecutor with one worker per task - that's the "up to 10 independent tasks simultaneously" claim. Unused task slots return a blank 512×512 image, and so does a failed task, which is the gotcha: a white output is ambiguous, so keep an eye on the [YK-AI] lines in the ComfyUI console to tell "unused" from "broke."
The inputs that matter
Most of the 60-odd inputs are just the same trio repeated ten times, so really you're setting a few things:
aspect_ratio-auto, or one of1:1,2:3,9:16,16:9, etc. Applied to every task.resolution-1K,2K, or4K. 4K costs more per image on the API side, and for a 10-image batch that adds up.prompt_1(required) plusprompt_2…prompt_10, each withimage_i_1…image_i_3reference slots.api_key- optional override widget; leave empty if you've set the env var.seed,poll_interval_sec,max_wait_sec- leave the last two at defaults (3s / 300s) unless you're hitting timeouts.
Outputs are output_1 through output_10, all IMAGE, no batch concat, original resolution preserved. Each wires into whatever you'd do next - a SaveImage, a grid node, a video model.
Installing
Via ComfyUI Manager, search "ComfyUI-YK-Banana2-Batch" (or "YK-Banana2") and install, then restart. Or clone it:
cd ComfyUI/custom_nodes
git clone https://github.com/Bzbaozi/ComfyUI-YK-Banana2-Batch
Then restart ComfyUI. There's no requirements.txt and no model download - the dependencies (requests, Pillow, numpy, torch) are already in every ComfyUI install. One trap: the README's own clone command has a YOUR_GITHUB_USERNAME placeholder, so copy the real URL above.
Where people get burned
The single biggest one: nothing happens without a paid key. You get one from the pack author / reseller "YK-AI" by messaging WeChat v:YK-ai001 (it's stamped right in the display name). No key, no credit card, no internet? The node silently returns ten blank images - it doesn't even error. Set the key via env var as the README recommends:
export YK_BANANA2_API_KEY="your_key_here"
If you instead paste it into the api_key widget, the node writes it to YK_nanobanana_config.json in plaintext in your ComfyUI directory. Use the env var.
Second: every HTTP call in the source uses verify=False, meaning SSL certificate verification is disabled and every reference image you feed it leaves your machine for a third-party file server. Normal for cloud-node territory, but go in knowing what you're sending where.
Third: max_wait_sec is divided across however many tasks run, so a full 10-task batch gets ~30 seconds each at the default. And because the model is Nano Banana Pro underneath, expect Google's aggressive censorship - no planning around celebrities or copyrighted IP.
Bottom line
It's a functional, genuinely useful shape - reference-image batch work through a strong cloud model without touching your GPU - wrapped in a reseller business model that's thin on documentation and heavy on WeChat. If you're in the Nano-Banana-in-ComfyUI crowd and already have the key, it does exactly what the label says. If you don't, that WeChat message is the first step, and it's the only one that matters.
Inputs (46)
| Name | Type | Default | Description |
|---|---|---|---|
| aspect_ratio | COMBO | 11 options: auto, 1:1, 2:3, 3:2, 3:4, 4:3, +5 | |
| resolution | COMBO | 3 options: 1K, 2K, 4K | |
| seed | INT | 00–18446744073709550000 | — |
| poll_interval_sec | INT | 32–10 | — |
| max_wait_sec | INT | 30060–900 | — |
| prompt_1 | STRING | — | |
| api_keyopt | STRING | — | |
| image_1_1opt | IMAGE | — | |
| image_1_2opt | IMAGE | — | |
| image_1_3opt | IMAGE | — | |
| prompt_2opt | STRING | — | |
| image_2_1opt | IMAGE | — | |
| image_2_2opt | IMAGE | — | |
| image_2_3opt | IMAGE | — | |
| prompt_3opt | STRING | — | |
| image_3_1opt | IMAGE | — | |
| image_3_2opt | IMAGE | — | |
| image_3_3opt | IMAGE | — | |
| prompt_4opt | STRING | — | |
| image_4_1opt | IMAGE | — | |
| image_4_2opt | IMAGE | — | |
| image_4_3opt | IMAGE | — | |
| prompt_5opt | STRING | — | |
| image_5_1opt | IMAGE | — | |
| image_5_2opt | IMAGE | — | |
| image_5_3opt | IMAGE | — | |
| prompt_6opt | STRING | — | |
| image_6_1opt | IMAGE | — | |
| image_6_2opt | IMAGE | — | |
| image_6_3opt | IMAGE | — | |
| prompt_7opt | STRING | — | |
| image_7_1opt | IMAGE | — | |
| image_7_2opt | IMAGE | — | |
| image_7_3opt | IMAGE | — | |
| prompt_8opt | STRING | — | |
| image_8_1opt | IMAGE | — | |
| image_8_2opt | IMAGE | — | |
| image_8_3opt | IMAGE | — | |
| prompt_9opt | STRING | — | |
| image_9_1opt | IMAGE | — | |
| image_9_2opt | IMAGE | — | |
| image_9_3opt | IMAGE | — | |
| prompt_10opt | STRING | — | |
| image_10_1opt | IMAGE | — | |
| image_10_2opt | IMAGE | — | |
| image_10_3opt | IMAGE | — |
Outputs (10)
| Name | Type | Description |
|---|---|---|
| output_1 | IMAGE | — |
| output_2 | IMAGE | — |
| output_3 | IMAGE | — |
| output_4 | IMAGE | — |
| output_5 | IMAGE | — |
| output_6 | IMAGE | — |
| output_7 | IMAGE | — |
| output_8 | IMAGE | — |
| output_9 | IMAGE | — |
| output_10 | IMAGE | — |