🍌 Grsai Nano Banana Batch (CSV/Excel)
A spreadsheet, a concurrency slider, and 50 images later
- image_1
- image_2
- image_3
- image_4
- images_batch
- status
The single GrsaiNanoBanana node is for one image. This is the one for "I have a CSV of 200 prompts and I want 200 images before lunch." It reads prompts from a .csv, .xls, or .xlsx column, optionally prefixes every one with shared styling text, attaches up to four reference images to all of them, and runs the batch with a concurrency slider you actually control. Output is a single big IMAGE batch plus a status string with the credit tally.
This is the node the pack's README is bragging about when it says "deep CSV/Excel batch automation." It's also the node that will teach you the most expensive lesson in cloud-model land if you're careless: every row is a billed render. The defaults are sane (concurrency 10, max_count 50) but "50 renders in one click" is a real credit event. Check your balance before, not after.
The inputs that matter
file_path- your CSV/Excel. Drag or paste the path.column_name(defaultprompt) - the column holding the prompt text. Exact match or every row fails.prompt_prefix- text prepended to each prompt (e.g. "cinematic, 4k, ").model- the samenano-banana-fast…nano-banana-2-clfamily; defaultnano-banana-fast(the cheap one - the batch default knows what it's doing).concurrency(1–50, default 10) - parallel renders. High is fast, and fast is expensive if a runaway loop is involved.max_count(1–100, default 50) - hard cap on rows processed. This is your safety valve.executions_per_prompt(1–10, default 1) - how many times each prompt renders. rows × executions = total bill.aspect_ratio,image_size- as in the single node.api_key+image_1…image_4(optional) - reference images shared by every job.
Outputs: images_batch (IMAGE) and status (STRING with per-run counts).
How it works
Readable source, Grsai side: pandas loads the file, prompts are assembled (prompt_prefix + cell), the row count is clamped to max_count, and a ThreadPoolExecutor with max_workers=concurrency fires nano_banana_generate_image per prompt. Failures are collected per row, not fatal to the batch, and the status line reports success/failure/credits at the end. It's synchronous - the node blocks until the whole batch finishes.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/jieg9341-lab/ComfyUI-nkxx
restart (or ComfyUI Manager, "ComfyUI-nkxx"). Auto-installs requests, pandas, openpyxl, yt-dlp, opencv-python, aiohttp. Get a Grsai key at nkxx.grsai.ai.
Common issues
- "列 'prompt' 不存在": header mismatch with
column_name. Open the file and check. - Whole batch fails fast: usually a dead key or zero credits, not 200 bad prompts. Read the first error, check
积分in status. - Credit shock: always test with
max_count: 2first.executions_per_promptandconcurrencyare both multipliers; change one at a time. - Filtering follows the model: Google refuses what it refuses, per row. The batch can't bypass it, it just logs it.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| file_path | STRING | — | |
| column_name | STRING | prompt | — |
| prompt_prefix | STRING | — | |
| model | COMBO | nano-banana-fast | 6 options: nano-banana-fast, nano-banana-pro, nano-banana-pro-vt, nano-banana-pro-cl, nano-banana-2, nano-banana-2-cl |
| concurrency | INT | 101–50 | — |
| max_count | INT | 501–100 | — |
| aspect_ratio | COMBO | auto | 11 options: auto, 1:1, 16:9, 9:16, 4:3, 3:4, +5 |
| image_size | COMBO | 默认 | 4 options: 默认, 1K, 2K, 4K |
| executions_per_prompt | INT | 11–10 | — |
| api_keyopt | STRING | — | |
| image_1opt | IMAGE | — | |
| image_2opt | IMAGE | — | |
| image_3opt | IMAGE | — | |
| image_4opt | IMAGE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| images_batch | IMAGE | — |
| status | STRING | — |