teamToken Image
Nano-banana and GPT Image in your graph, with no GPU and no weights
- image
- images
- cost_usd
There is no nano-banana checkpoint to download. Google never shipped one, GPT Image is a product rather than a file, and no amount of VRAM gets you either - the closed models have no open weights at all, which is the whole reason API-wrapper nodes exist. teamToken Image is one of those: a thin HTTP client with a node's face on it. Your prompt goes out to the teamToken gateway, a base64 PNG comes back, and a perfectly ordinary IMAGE socket comes out the other side as if a local sampler had made it.
That's the pitch, and it's worth being clear about the trade. You get the strongest instruction-following and text-in-image models available, on hardware you don't own, at per-image prices. You give up privacy (prompt and reference image leave the machine), reproducibility (there's no seed to fix), and offline operation.
How it works
The node POSTs a small JSON body to /v1/images/generations on the gateway. The gateway polls the provider for up to ~150 seconds and, if the image is ready, hands back base64 inline; if generation outruns that window it returns a 202 with a job id and the node keeps polling until the bytes arrive. Either way you get one stacked IMAGE tensor back.
Two mechanism details are worth knowing before you spend anything:
seedis never sent to the API. Media generation server-side is non-deterministic and the endpoint doesn't accept a seed, so the widget exists purely to steer ComfyUI's own cache. Identical inputs reuse the previous result and are not re-billed; moving the seed forces a fresh, paid generation. It also ships withcontrol_after_generate, so one click on the dropdown is enough to force a fresh image.- The model list is live. The dropdown is fetched from the gateway's public catalog (
GET /cabinet/api/public/media-models) in a background thread, so new models and repriced tiers show up without a pack update. A bundled snapshot keeps the dropdown populated when you're offline. If you ever see(no models - check API/network), that's the fallback also missing - check the gateway URL.
The inputs that matter
Required are just model and prompt. Of the optional ones, these are the three you'll actually touch:
aspect_ratio(default1:1) andresolution(1K/2K/4K) - separate from the model name, unlike some providers. The node always sends both, so "default" really means 1:1 at 1K unless you change them.n- how many images in one request, 1 to 10. They come back as a single batchedIMAGE, so a Save Image node writes all of them. If the provider returns a mixed batch of sizes, the node zero-pads each frame onto the largest canvas rather than dropping generations you already paid for; crop downstream if that bites.image- optional reference image. With it, the same node acts as image-to-image and your prompt turns into an edit instruction.
api_key and server_url are overrides. Leave them empty - a key typed into the node gets saved into the workflow file and travels with anything you share. Outputs are images (wire it anywhere an IMAGE goes) and cost_usd, a string with the exact charge for that call.
Install
ComfyUI-Manager: search ComfyUI-teamToken and install. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/TeamToken-store/ComfyUI-teamToken
pip install requests
# restart ComfyUI
requests is the only dependency - the pack deliberately doesn't pin torch or Pillow, since ComfyUI supplies them and pinning risks a resolver fight. No models, no GPU, nothing to download. Get a key at app.teamtoken.store → Keys, then set it once via Settings → teamToken → API key, or:
export TEAMTOKEN_API_KEY=sk-... # before launching ComfyUI
Where people get burned
402 and 401. A 402 is "insufficient balance" - your credits ran out. A 401 is a missing or wrong key. Errors surface with the provider's own code, so [EMPTY_PROMPT] means exactly what it says: an empty or whitespace-only prompt is rejected before anything is billed.
"Nothing changed and I got the same image." That's the cache, not a bug - and it's free. Change the seed if you wanted a different one.
Old job ids expire. Results live 7 days server-side. The node returns bytes immediately, so this only matters if you re-poll an old id; re-running an expired one throws a "this result expired" error.
Weird host errors. The client refuses to send your key over plaintext HTTP or to an untrusted host - a shared workflow can't point server_url at an attacker to harvest the key. Running your own gateway? Add its host: export TEAMTOKEN_ALLOWED_HOSTS=gateway.example.com.
One honest note on cost: the bundled catalog lists nano-banana-pro around $0.027/image and grok-image at $0.02, while gpt-image-2 ranges from roughly $0.06 for low/1K to about $0.94 for high/4K. Those are snapshot numbers and the live catalog is authoritative, but they tell you the shape of the thing - 4K at n=10 is not a cheap experiment.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| model | COMBO | Image model, fetched live from the teamToken catalog | |
| prompt | STRING | What to generate; with an IMAGE input it guides the edit | |
| aspect_ratioopt | COMBO | Output aspect ratio (default 1:1) | |
| resolutionopt | COMBO | Output resolution tier (default 1K) | |
| nopt | INT | 11–10 | How many images to generate in one request |
| imageopt | IMAGE | Optional reference image for image-to-image | |
| seedopt | INT | 00–18446744073709550000 | Change to force a fresh (paid) generation; identical inputs reuse the cached result |
| api_keyopt | STRING | Overrides the teamToken settings key. ⚠️ This value is saved INTO the workflow file — prefer the teamToken Settings pane or $TEAMTOKEN_API_KEY so your key isn't shared with the workflow | |
| server_urlopt | STRING | Leave empty to use the teamToken settings / env / default gateway |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| cost_usd | STRING | — |