Puter.js Image Generator
The Node That Sneaks Nano Banana and GPT-Image Into Your ComfyUI Graph
- image
- IMAGE
This node runs zero of your own VRAM. The Puter.js Image Generator is a bridge: it takes your prompt, phones home to the Puter cloud platform, and drops a finished image back into your workflow as a normal IMAGE tensor - as if a local sampler had made it. In one dropdown it can hand you Nano Banana (Gemini), GPT-Image, DALL·E 3, Flux Pro, Imagen, and SDXL. None of those except the last two are ever going to run on your machine, so if you've been envying closed-model quality from inside a local graph, this is the shortest path in.
What it actually is
Meisoftcoltd/ComfyUI-Puter.js is a small two-language pack: a Python node and a Node.js "bridge" script. The Python half is a thin wrapper - it packages your prompt, model, and optional input image, then shells out to node puter_bridge.js with those as command-line arguments. The bridge is where the real work happens: it loads the @heyputer/puter.js SDK and calls puter.ai.txt2img(), which is Puter's hosted text-to-image endpoint. The returned image lands in a temp PNG, gets loaded back as a tensor, and the temp files are cleaned up. From the canvas it's one node; underneath it's an HTTP client wearing a GPU's coat.
The KB's API-wrapper-node essay frames exactly this pattern: an API-wrapper node is the right tool for a model you cannot run locally, and the wrong default for one you can. That's your compass here. Pick gemini-3-pro-image-preview or gpt-image-2 and you're using the node for what it's for. Pick SDXL and you're just paying cloud credits for a model you probably already have.
The inputs that matter
- prompt - multiline text, defaulting to a mountain landscape. This is what you'd expect.
- model - a dropdown of ten.
defaultlets Puter pick; the others map to real products:gemini-2.5-flash-image-preview,gemini-3-pro-image-previewandgemini-3.1-flash-image-previeware Google's Nano Banana line,gpt-image-2anddall-e-3are OpenAI,black-forest-labs/flux-schnellandflux-1.1-proare BFL, andgoogle/imagen-4.0-ultraplusstabilityai/stable-diffusion-xl-base-1.0round it out. - quality -
default/low/medium/high/standard/hd. One catch baked into the source: it's silently ignored whenever the model name contains "gemini", because those models choke on the quality param. Not a bug, a patch. - image (optional) - connect any image to enable image-to-image. The node base64-encodes it and passes it as
input_imageto Puter.
Output: a single IMAGE tensor. Wire it into a Save Image or Preview Image node, or straight into an upscaler.
Installing it
You need Node.js 18+ - the whole point is that Puter.js is a JavaScript SDK, so this is one of the rare ComfyUI packs where Python isn't enough. Check with node -v and install from nodejs.org if it's missing. Then, via ComfyUI Manager (search "Puter" or paste the repo URL) or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/Meisoftcoltd/ComfyUI-Puter.js
cd ComfyUI-Puter.js
npm install # install.py runs this automatically under Manager
Restart ComfyUI and you'll find the node under PuterAI. The only real dependency is @heyputer/puter.js; no model files, nothing heavy.
The gotcha the README forgets
The README never mentions a token, but the bridge requires one: without it you get "No se encontró el archivo puter_token.txt" and the node fails. Puter's model is "user pays, no developer API keys," which means your Puter account covers the cost. Sign up at puter.com, grab your auth token from your account settings, and save it to a plain-text file:
cd ComfyUI/custom_nodes/ComfyUI-Puter.js
echo "YOUR_PUTER_AUTH_TOKEN" > puter_token.txt
Generation draws on Puter's free monthly credit allowance, then on paid credits once it's gone - per-call metered, so the SDXL option is the fastest way to burn through freebies. Also keep the KB's security frame in mind: this node's whole job is shipping your prompts and images to someone else's server, so treat it as a node that phones home by design, and give a fresh pack like this a skim of its puter_bridge.js before you trust it with anything sensitive.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | A peaceful mountain landscape at sunset | — |
| model | COMBO | default | 10 options: default, gemini-3.1-flash-image-preview, gemini-3-pro-image-preview, gemini-2.5-flash-image-preview, gpt-image-2, dall-e-3, +4 |
| quality | COMBO | default | 6 options: default, low, medium, high, standard, hd |
| imageopt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |