PopNow Generate
One node, 248 models, and a JSON field you have to get right
- image
- image
- url
- path
The escape hatch
PopNow's pack ships a node per model - one for Kling, one for Nano Banana Pro, and so on down a catalog of a couple of hundred. PopNow Generate is the node that ignores all of that: you type a model's call name, put the rest of its settings in a JSON blob, and it runs whatever you asked for. It's the same node type as the standalone popnow_api.py that popnow.ai's docs handed out before this pack existed, so older workflows open fine and keep working.
Reach for it in three situations. The catalog grew a model this morning and your install hasn't restarted. You want to sweep one parameter across five models without wiring five nodes. Or you want a video model's output as a file on disk rather than a VIDEO socket, which is exactly what this node hands you.
Inputs, and the one that trips everyone
model- a call name from popnow.ai/docs/models, likeminimax/h3/image-to-video. The default isgoogle/nano-banana-2.1/text-to-image, which is a decent smoke test.prompt- what to make. Here's the subtlety: your prompt is placed in the field namedprompt, or intextfor speech models, and it's only inserted ifoptionsdoesn't already set that field. A prompt in the widget loses to a prompt in the JSON.options- the model's other fields as a JSON object:{"resolution": "2k"},{"duration_seconds": 5},{"aspect_ratio": "9:16"}. Not an array, not a bare number. Malformed JSON fails before anything is sent, which is the good outcome.image(optional) - anIMAGEyou want sent along. It's uploaded for you.image_field- where that image goes.image_urlfor most video models,image_urlsfor editing models - note the plural: a field whose name ends insreceives the whole batch, so batching three images into one socket sends three references.
Outputs are image, url and path, and they behave differently by model type, which is the single most confusing thing about this node:
- Image models:
imageholds the result,urlis the signed link,pathis empty. - Video and audio models: the file is downloaded to
ComfyUI/output/popnow_<task id>.mp4(or.webm/.mp3/.wav) and returned inpath. Theimageoutput returns a blank 64×64 placeholder so the graph doesn't break. If you wired a Preview Image to it and see a black square, nothing is wrong - look atpath. urlis a signed link with a short life, roughly twenty minutes. Fine for a download, useless for anything you save and reopen tomorrow.
What it costs
Each run is quoted first, capped by Settings > PopNow > Max credits per run, and refunded if it fails. The node prints the final charge and the task id when it finishes. One arithmetic warning: the README says a credit is $0.001, while the node descriptions price things as if a credit were a cent (Nano Banana Pro at "16.08 credits / $0.1608"), which happens to match real market rates. Don't do budget math off the README - read the badge and the quote.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/popnow-ai/popnow-comfyui
Restart, then add your key at Settings > PopNow (or export POPNOW_API_KEY). Restart again - the catalog is fetched at startup, and a stale node list is the most common "my model is missing" cause. If you still have custom_nodes/popnow_api.py from the old single-file install, delete it; you'd be running two copies of the same node type.
There are no dependencies to install and no weights to download, which is both the pack's selling point and its catch: everything you generate leaves your machine and hits a vendor's filter. That's the deal with any API node - you cannot get around a closed model's moderation by patching something local, because there's nothing local to patch.
Troubleshooting
No PopNow API key is set and PopNow 401 are the same problem wearing two hats: no key, wrong key, revoked key. 40201 is an empty wallet. 400 naming a field means the model doesn't accept that value - the node's description links the model page, and the options JSON is where you fix it. 40004 means the combination isn't servable. 40310 wants you to verify your email. content_rejected and generation_failed are the model's answer and are refunded.
If an error ends in request_id ..., keep that string - it's the exact handle support needs. And remember that cancel only stops your side of the wait: the task keeps generating on PopNow and is charged if it lands.
Last thing: PopNow itself has no real community footprint yet - searching the usual discussion archives returns nothing. The node works and the source is readable and MIT, but you're early, so keep credits small and read the code before you trust it with a long workflow.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| model | STRING | google/nano-banana-2.1/text-to-image | A call name from https://popnow.ai/docs/models, such as minimax/h3/image-to-video. |
| prompt | STRING | A lighthouse on a cliff at dusk, warm window light | — |
| options | STRING | {"aspect_ratio": "16:9", "resolution": "1k"} | The model's other fields as JSON, such as {"resolution": "2k"}. |
| imageopt | IMAGE | Uploaded for you and put in image_field. | |
| image_fieldopt | STRING | image_url | Which field gets the image: image_url for most video models, image_urls for editing. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| url | STRING | Signed file URL, valid for about 20 minutes. |
| path | STRING | Saved video or audio file, in ComfyUI/output. |