FrankAI Banana Main Node
The FrankAI Banana main node
- images
- image
- text
The FrankAI Banana Main Node (class BananaMainNode) is the one node in this pack that actually does anything. Everything else - the key nodes, the prompt selector, the image collector - exists to feed it. It takes your images and your prompt, sends them to Google's Nano Banana image model, and hands you back the result as a normal IMAGE tensor. No weights download, no VRAM spike, no local model at all. Your GPU just sits there while Google's does the work.
Why would you want a cloud image model inside ComfyUI? Because Nano Banana is genuinely good at the jobs the local stack is still awkward at - photorealistic face fusion, "turn this photo into a figure," era and style transfers - and because a node in a graph you can rewire beats a browser tab on ImageFX. ComfyUI ships its own Nano Banana template, but it expects a Google Cloud / Gemini key with billing attached. This pack routes around that by calling a third-party proxy at yinothing.com/api/google/banana, and it lets you bring either a resold "frankAI" key or your own Google key. That's the trade you're signing up for: convenience and zero GPU cost, in exchange for paying per run and trusting a small unknown server with your keys and your images.
The mechanism is unglamorous but solid. The node converts each image tensor to a PNG in memory, then makes a multipart POST with up to three files plus your key and prompt, a 30-second timeout, and a JSON response. It base64-decodes the first imageUrls entry - stripping a data-URI prefix and fixing padding if present - and turns it back into a torch tensor you can wire to PreviewImage or SaveImage like any other output.
Three required inputs, and they're all worth naming:
images- an IMAGE_LIST, which in practice comes from the pack's ImageListCollector. Hard limits: minimum 1 image, maximum 3. This is image-to-image only; the README is explicit that the input side must have at least one image.key- a STRING that has to arrive over a wire (it'sforceInput), usually from GoogleApiKeyNode or FrankApiKeyNode. The node refuses to run without it.prompt- a STRING, also forced as a wire input, normally fed by the BananaPromptSelector though any text source works.
The two outputs: image (the generated IMAGE) and text. Read that text output. It normally reports how many tokens the run consumed, but it's also the pack's entire error channel: no key, no prompt, wrong image count, HTTP failures, and bad decodes all come back as a 512×512 black image plus a descriptive string in text. A black thumbnail out of this node is not a crash - it's an error message wearing a disguise, so glance at text before you start debugging a black image.
Install is about as light as this pack gets: no requirements.txt, no model files, nothing beyond what ComfyUI already ships (requests, aiohttp, Pillow, torch).
cd ComfyUI/custom_nodes
git clone https://github.com/fr0nky0ng/ComfyUI-frankAI-banana
Restart ComfyUI and the nodes land in the "FrankAI" category.
Where people get burned: the cost, mostly. Nano Banana is not free, and API use adds up fast while you iterate on prompts - the free-tier key is a teaser, not a plan. Second, yinothing.com is a tiny third-party relay with effectively zero community footprint; if it's slow, down, or gone tomorrow, there's no fallback. Third, Nano Banana's built-in content filtering is aggressive no matter whose key you use, so don't expect this to be your uncensored local stack with extra steps.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE_LIST | — | |
| key | STRING | — | |
| prompt | STRING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| text | STRING | — |