FLUX 3 · Image to Video
The draft tier is the whole point
- image_url
- last_image_url
- video
- task id
You've got a still you like and you want it to move. This node hands that still to Black Forest Labs' FLUX 3 video model on PopNow's servers and gives you back a VIDEO you can save or keep working on, plus synced sound if you want it. Nothing runs on your card.
Let's be clear about what it is, because the name on the tin invites confusion: this is an API node. It needs an account and a key, and it's billed per second of output. In a community that reads "not local, through an API" as a reason to skip a release, that's the honest trade - FLUX 3 video is another model you can't download, so calling it is the only door there is.
How it actually works
Under the hood there's no sampler and no checkpoint. The node builds a request from the fields your catalog exposes, uploads your opening frame to PopNow (the file gets a popnow://f/... reference only your key can use), quotes the run, submits it, and polls until the job finishes. Then it downloads the MP4 and hands it back as a ComfyUI VIDEO value, which is why Save Video accepts it with no conversion step.
Two things in that pipeline are worth knowing. Uploads are cached per key for 12 hours, so re-running with a different prompt does not re-send the same picture. And every task is submitted under an idempotency key, so a network retry can't quietly bill you for a second render.
The inputs that matter
image_url is the opening frame, and the tooltip says what it's for: the subject keeps its look from this image. Wire Load Image in and stop worrying about it.
prompt should describe motion and sound, not the picture. The frame already establishes the subject. Say what moves, how the camera behaves, what it sounds like - "she turns to the window, hair lifting in the draught, a low string swell" beats a paragraph retelling the image.
Then the two fields that decide your bill. quality has standard (renders at your chosen resolution) and draft (a fast, lower-cost preview at 720p). In the bundled price table draft runs about a third of the standard 720p rate - and it's the difference between iterating and gambling. duration_seconds is 5 to 20 whole seconds, and it multiplies everything.
There's a gift here too: generate_audio costs the same either way according to the tooltip. Leave it on. And aspect_ratio defaulting to model default means "follow the opening image", which is what you usually want - a value the model doesn't need is simply left out of the request.
If you want a specific destination, wire a second picture into last_image_url and the clip travels from the opening frame to that one.
Outputs
video - the clip. Send it to Save Video, or upstream into another node if you're stitching. Note it's just the one video output: there's no last-frame image socket on this node, so if you plan to chain clips, use FLUX 3 · Video Extend rather than grabbing a frame.
task id - the PopNow task id. Keep it. If a render fails or looks wrong, that's the string support asks for.
Installing it
In ComfyUI Manager, search PopNow, install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/popnow-ai/popnow-comfyui
Then get a key at popnow.ai/api/console/keys, restart, open Settings > PopNow and paste it (or launch ComfyUI with POPNOW_API_KEY=sk-popnow-...). Restart one more time so the node list is rebuilt from your account's catalog.
There's nothing else to install - no torch version to fight, no model files. The nodes use only what ComfyUI already ships. If you used the old single-file node from popnow.ai, delete custom_nodes/popnow_api.py first.
Where people get burned
Credits, not VRAM, is the constraint now. Each node shows a rate (credits per second) that updates as you change settings, and every run is quoted before anything is held - but a rate is not a total, and 20 seconds at standard 1080p is a real number. Set Settings > PopNow > Max credits per run before you start experimenting; a run quoted above the ceiling stops before charging anything.
Seeds start on fixed on purpose - queueing the same graph twice reuses the first result instead of paying again. Flip control_after_generate to randomize when you want a new take. Every take is billed.
And cancelling stops the wait, not the job: the render keeps running on PopNow and is charged if it succeeds. The clip lands in your API console either way.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Describe the subject, action, camera, light and sound for the shot. | |
| image_url | IMAGE | Opening frame. The subject keeps its look from this image. | |
| aspect_ratio | COMBO | model default | Output aspect ratio. Omit it to follow the opening image. |
| quality | COMBO | standard | standard renders at the chosen resolution; draft is a fast, lower-cost preview at 720p. |
| resolution | COMBO | 720p | Output resolution. draft renders at 720p only. |
| duration_seconds | INT | 55–20 | Output length in whole seconds, 5 to 20. |
| generate_audio | BOOLEAN | true | Generate synchronized sound with the video. The price is the same either way. |
| last_image_urlopt | IMAGE | Optional closing frame: the clip moves from the opening image to this one. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| task id | STRING | The PopNow task id, for the API console logs or support. |