Nano Banana Retrieve Tasks (Ace Data Cloud)
One Node to Collect a Whole Night of Queued Nano Banana Tasks
- results_json
Retrieve Task asks about one ID and waits for it. That's fine for a single image and tedious for twenty. AceNanoBananaRetrieveBatch is the bulk read: hand it a list of task IDs, get back the status of every one of them in a single request, and not a cent charged, because it queries rather than generates.
If the pack's async split - submit now, collect later - is what put you off the whole thing, this node is the answer to it. Queue thirty edits before bed, collect them in the morning with one call.
How it works
One POST to /nano-banana/tasks with action: retrieve_batch and your array of IDs. Read-only, so it gets the same three-attempt retry treatment the single retrieve does while the paid submits get exactly one shot. No waiting, no polling loop, no wait_seconds - it reports whatever the tasks are right now and returns.
The normalization is where the useful behavior lives. For each task it looks for a completion state or image URLs, and if a task has failed it records that as status: "failed" instead of throwing. So one dead job among twenty doesn't take out the whole batch - you get a result row you can act on. Non-dict entries get skipped silently, and a malformed batch response does raise, because at that point there's nothing sensible left to do.
Inputs and outputs
- task_ids_json - multiline, a JSON array of strings. The field must be a nonempty array, and every element must be a nonempty string, or you get "Task IDs must be a nonempty JSON array of strings." This is the part that catches people: it's a real JSON array,
["abc123", "def456"], not one ID per line. That's the difference from the Edit node's reference field, which accepts either format. - Output: results_json - a single string holding a JSON array, one object per task:
status,task_id,image_urls,trace_id. Plus a small UI panel that prints how many tasks were retrieved.
Yes, it's a string rather than an IMAGE, and that's correct - different tasks can have different sizes and different counts, so there's no honest way to batch them into one tensor. Read the array, take the image_urls from the tasks that succeeded, and send those to Load Images one task at a time.
Install
ComfyUI Manager → Custom Nodes → search Nano Banana, confirm publisher acedatacloud, install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/AceDataCloud/NanoBananaComfyUI.git
cd NanoBananaComfyUI
python -m pip install -r requirements.txt
requests>=2.31,<3 and nothing else - no model downloads, no GPU, no heavy wheels. Key in the process environment, then restart ComfyUI:
export ACEDATACLOUD_API_KEY='paste-your-key-here'
python main.py
Where people get burned
Nothing to watch it with. results_json is a string, so there's no image preview and no obvious node to route it into. The README's advice - "Copy the task ID from Preview as Text" - is the same shape of problem in the other direction. In practice you either read the panel, or wire it into a text-display node, or paste it somewhere you can see it. It's a reporting node, not a pipeline node.
Task IDs you never wrote down. This node can only collect IDs you kept. The Generate and Edit nodes try to make that easy by printing the ID in their own panel output, but once the graph has run and the panel is gone, the ID is in the Comfy console log or nowhere. Keep a scratch text file when you're queueing in bulk.
"Nano Banana returned an invalid batch result." The service returned something the node couldn't parse - usually a service-side hiccup rather than your IDs. Since this is a free read, just run it again.
One failed task isn't a failed batch. People queue a bunch, see an error row, and assume the whole thing is dead. Read the array - failures are marked individually, and the successes still hold URLs worth collecting.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| task_ids_json | STRING | [] | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| results_json | STRING | — |