Nano Banana Edit Image (Ace Data Cloud)
Edit an Image by Describing the Change — If You Can Host the Image Publicly
- status
- task_id
- image_urls_json
- trace_id
If you've read anything about keeping a character consistent in 2026, you know the answer stopped being "train a LoRA" and became "generate once, then edit that image." Instruction editing didn't just become popular, it ate the old stack: IP-Adapter is SDXL-era, InstantID and PuLID went flat, and the work moved to edit models that look at your reference while they work.
Nano Banana is the closed member of that family - the one you can't run. AceNanoBananaEdit is how it gets into your graph: you give it a picture and a sentence, it gives you the same picture with the change applied. Google's Pro tier is the one with the reputation here (4K native, "thinking mode", up to 14 reference images), which is roughly why people tolerate the API detour at all.
Same caveat as the pack's other nodes, and it's bigger here: this is a vendor pack with a key in its pocket. Zero threads in our corpus mention Ace Data Cloud. Read it before you trust it with a customer's face.
The mechanism
It's the same endpoint as the generate node - POST /nano-banana/images - but with action: edit and an image_urls array attached. Like Generate, the submission is async and paid, and it's sent exactly once: the client retries read-only lookups, never a billable submit. You get back a task ID, then Retrieve Task collects the images.
Before any of that, the reference URLs get validated hard. Each one must be public HTTPS, must have no username or password embedded, and must not resolve to localhost, anything ending .local, or a private IP. Duplicates get deduped. That validation is the whole personality of this node.
Inputs that matter
- prompt - the instruction. "Change the background to a starry night" is the default and it's a fair model of the register: describe the delta, not the whole image.
- reference_image_urls - multiline. Either a JSON array (
["https://..."]) or one URL per line. Plainhttp://fails, and so doeshttp://127.0.0.1:8188/view?filename=...- the backend is fetching this server-side, so your local ComfyUI is not a valid source. Upload the reference somewhere public first: an S3 bucket, a CDN, a GitHub raw URL, a throwaway host. This is the step people fight. - model, aspect_ratio, resolution, count - same nine models, seven ratios, three resolutions and 1-to-4 count as Generate. Again,
nano-bananaandnano-banana-2-liteare 1K-only. More than one reference image helps identity work; how many the model will take is the model's business, not a knob here.
Outputs: status, task_id, image_urls_json, trace_id. Feed task_id to Retrieve Task, then the URLs to Load Images.
Install
Manager → search Nano Banana under publisher acedatacloud, or:
cd ComfyUI/custom_nodes
git clone https://github.com/AceDataCloud/NanoBananaComfyUI.git
cd NanoBananaComfyUI
python -m pip install -r requirements.txt
The only dependency is requests; there is nothing to download and no GPU involved. Then export the key and restart the ComfyUI process:
export ACEDATACLOUD_API_KEY='paste-your-key-here'
python main.py --cpu
Where people get burned
"Reference images must use public HTTPS URLs." Nine times out of ten it's because you reached for a local file path or a localhost URL. The node cannot see your disk. Wireframe it as: host the image, paste the public link, run.
"At least one reference image URL is required." Empty field. It also fires if you paste a JSON array of something that isn't strings.
HTTP 401/403 on an edit that looks innocent is often the content filter, not your key. Google's moderation rides along with the model, and no reseller strips it - the community answer on that has always been "no, it's strict, forget it." There are no weights here to abliterate.
Your inputs leave the machine. The reference image - your character, your client's product, whatever - is posted to api.acedata.cloud for processing and re-hosted on their CDN. That's the mechanism, not a bug, but only submit what you have permission to send.
And an edit is not a patch. Instruction editors re-emit the whole frame, so pixels you never mentioned will move. If you need untouched regions, mask-and-stitch instead of asking for subtlety.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Change the background to a starry night. | — |
| reference_image_urls | STRING | — | |
| model | COMBO | nano-banana-2-lite | 9 options: nano-banana, nano-banana-2-lite, nano-banana-2, nano-banana-2.1, nano-banana-pro, nano-banana:official, +3 |
| aspect_ratio | COMBO | 1:1 | 7 options: 1:1, 3:2, 2:3, 16:9, 9:16, 4:3, +1 |
| resolution | COMBO | 1K | 3 options: 1K, 2K, 4K |
| count | INT | 11–4 | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| status | STRING | — |
| task_id | STRING | — |
| image_urls_json | STRING | — |
| trace_id | STRING | — |