Wan 3.0 · Text to Video
Wan 3.0 text to video is the tier you should be iterating on
- video
- task id
Here's the workflow question nobody asks before buying credits: which Wan do you draft on? This node. Same family as Wan 3.0 Pro, a third of the price per second at the starting tier, and it renders 480p, 720p or 1080p instead of starting at 1080p. Write your prompt here twenty times, then take the one that works to the Pro node and spend real money once.
The blunt context
Wan 3.0 is API-only. Alibaba stopped shipping open weights after Wan 2.2 - no checkpoint, no GGUF, nothing to trial locally. So if you want this generation of Wan inside a ComfyUI graph at all, a node like this one is the door. The pack generates it from the model's published schema, so the widgets you see are the model's actual fields.
That also means the usual local knobs are missing by design: there's no sampler, no scheduler, no CFG, no step count, no Lightning LoRA to bolt on. You set a prompt, a length, a resolution and a few switches, and the service's own pipeline does the rest. People who live in local Wan 2.2 workflows find this either liberating or infuriating depending on how much they like tuning. For drafting, it's fast and it's cheap.
What you set
prompt - subject, action, camera, light, pacing, and boundaries for the shot. "Boundaries" is doing quiet work in that list: say what must not happen, and say where the shot ends.
resolution is 480p, 720p or 1080p - the useful one is 480p for blocking out motion and camera, 720p for judging whether a take is worth keeping. aspect_ratio gives you 16:9, 9:16, 1:1, 4:3, 3:4 or adaptive.
duration_seconds takes 2 to 30, or -1 for smart duration, where the model picks a length from the prompt instead of you. Handy when you genuinely don't know whether a beat needs four seconds or seven. Annoying when you're comparing seeds, because the variable you didn't fix is now length.
generate_audio is on by default and gets you a synced soundtrack - a real part of what Wan 3.0 sells. enable_prompt_expansion is off by default on this node, unlike the Pro one. That's a good default: what you typed is what gets sent, and when a seed produces something good you can trust that reproducing it means reproducing the same prompt.
enable_thinking sits here too, off by default. With no reference material on this node there's not much for it to reason about, so it rarely earns its extra latency - the tooltip's "helps with complex references" is aimed at the reference-to-video sibling.
Outputs are video - a plain ComfyUI VIDEO, ready for Save Video or a frame extractor - and task id, the string that identifies the run in PopNow's API console.
Under the hood
On queue, the node assembles the request from your widgets, leaving out anything still at "model default" or -1. It fetches a quote, holds at most that amount, submits with an idempotency key so retries can't spawn a second billed task, polls until the job finishes, then downloads the MP4 and decodes it into ComfyUI's video type. The status line on the node ends with what the run actually cost.
Cost starts at 6.75 credits per second (1 credit = $0.001) - roughly 34 credits for five seconds, so about three and a half cents for a draft. Higher resolution tiers move the rate up.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/popnow-ai/popnow-comfyui
Or install PopNow through ComfyUI Manager and restart. Nothing else is needed: no extra Python packages, no model downloads, no GPU. Create a key at popnow.ai/api/console/keys, restart ComfyUI, paste it in Settings > PopNow (or set POPNOW_API_KEY), and restart a second time so the node list is rebuilt from your account catalog.
Where people get burned
seed defaults to fixed, so queueing the same graph twice gives you the same video and no second charge. That's deliberate. Switch control-after-generate to randomize when you want variety - and remember every run is billed.
A 400 that names a field means the value wasn't legal for the model; the node's description links the model page that lists what is. 40201 is an empty wallet. Cancelling a run stops the wait, not the server-side job.
And if a node you read about on PopNow's site is missing from the menu, restart ComfyUI - the list is built at startup.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Describe the subject, action, camera, light, pacing, and boundaries for the shot. | |
| aspect_ratio | COMBO | 16:9 | Output aspect ratio; adaptive follows the input media and the intent. |
| enable_thinking | BOOLEAN | false | Let the model reason about the brief and the reference material before generating. Helps with complex references; slower. Switches on by itself when a reference file or link is given. |
| resolution | COMBO | 720p | Output resolution. |
| duration_seconds | COMBO | 5 | Requested output length in seconds. Pass -1 for smart duration: the model picks the length from the prompt and any input media instead of a fixed number. |
| generate_audio | BOOLEAN | true | Request generated audio with the video. |
| enable_prompt_expansion | BOOLEAN | false | Allow the service to expand the submitted creative brief before generation. |
| seed | INT | 00–2147483647 | Same seed and settings, same result. Set 'control after generate' to randomize to get a new result on every run; every run is billed. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| task id | STRING | The PopNow task id, for the API console logs or support. |