Seedance 2.5 · Image to Video
30 seconds from one frame, for a price
- image_url
- last_image_url
- video
- last frame
- task id
Thirty seconds. That's the number that separates Seedance 2.5 from everything else in this pack's ByteDance section - the previous generation tops out around fifteen. Thirty seconds of native-audio video from a single still is a genuinely different format: not a clip, a scene. It's also 18.51 credits per second, so a full 30-second run is about 555 credits. Per shot.
Do that math before you wire it up, because it shapes how you use the node. Short durations at 720p for exploration; 30 seconds only when the first four already convinced you.
How it works
Your image is uploaded (once per content hash, cached for 12 hours) and becomes the first frame; the model animates forward from there. Generation runs on PopNow's servers, which is the only option - Seedance has no open weights, so this is a closed model behind an API call, with the trade-offs that always carries: per-call cost, your input leaving the machine, and ByteDance's filter applying with no local bypass.
Worth noting what 2.5 changes besides length. Reference capacity jumps hard - up to 30 reference images on the reference-to-video sibling - and duration becomes a proper integer slider instead of a fixed list of choices. This node also drops the previous generation's bitrate_mode switch in favour of output_format.
Inputs that actually matter
image_url- theIMAGEthat opens the clip. Aspect ratio comes from this picture, which is why…aspect_ratio- only acceptsadaptiveon this node. The tooltip says so outright: Seedance 2.5 frames an image-to-video clip on the first frame, so there's no ratio to choose. Don't hunt for a bug; there's one option on purpose.last_image_url- optional closing frame, and it's only accepted alongsideimage_url. Set both and you've defined a shot from A to B: the model's job becomes plausibly getting you there in the time allowed.duration_seconds- integer, 4 to 30. The billed quantity. Long clip plus high resolution is where the meter runs.resolution- 480p, 720p or 1080p. There's no 4K tier here; 2.0 offers one, 2.5 doesn't.generate_audio- on by default, synchronised to picture. If you're going to mix your own sound, turn it off; you're paying for it either way and generated audio on a silent-B-roll shot is just an extra variable.enable_web_search- off by default. Ignore it unless the prompt genuinely needs current facts.seed- fixed by default. Randomize via the control-after-generate widget for new takes, one bill each.
Outputs
video into Save Video, last frame as an IMAGE when return_last_frame is on - a natural first frame for a second segment - and task id for the console or support.
Small gotcha: the last frame socket is always there. With the switch off, downstream nodes get blocked with a "turn on return_last_frame" message rather than an empty image. Confusing the first time, obvious after.
Install
Search PopNow in ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/popnow-ai/popnow-comfyui
Then key it up: popnow.ai/api/console/keys → Settings > PopNow, or POPNOW_API_KEY in ComfyUI's environment. Restart twice - once for the pack, once so the node list is built from your account's catalog. No pip install; the pack's dependency list is empty by design.
Troubleshooting, in order of likelihood
PopNow 40201- out of credits. At 18.51 credits a second this happens faster than you expect. Drop to 480p or shorten.PopNow 40004- unsupported combination. Usuallylast_image_urlwithoutimage_url, or a 30-second run at a resolution the model won't serve.- The clip starts before your prompt "kicks in" - normal. The first second or so is your still being animated. Write the prompt for what happens after the frame you supplied.
- Cancelling stops your wait, not the job. It finishes server-side, bills if it succeeds, and sits in the API console. Set
Settings > PopNow > Max credits per runso a mis-clicked 30-second 1080p run can't go through.
For anyone using SDXL-era pose sheets or a character LoRA pipeline locally, this is the same job done by a rented model: you bring the frame you already like, and 2.5's job is to keep its face, wardrobe and light for as long as you asked. Thirty seconds is the first time that's been enough for a shot with a beginning, a middle and an end.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | What to generate: subject, action, camera movement and mood. | |
| image_url | IMAGE | URL of the image used as the first frame. | |
| aspect_ratio | COMBO | adaptive | Aspect ratio of the generated video. Seedance 2.5 frames an image-to-video clip on the first frame, so adaptive is the only accepted value. |
| resolution | COMBO | 720p | Output resolution. Super-resolution tiers are not offered. |
| duration_seconds | INT | 54–30 | Clip length in seconds. This is the billed quantity. |
| generate_audio | BOOLEAN | true | Generate a native soundtrack synchronised to the picture. |
| output_format | COMBO | mp4 | Container of the returned video. |
| enable_web_search | BOOLEAN | false | Let the model search the web for information related to the prompt before rendering. |
| 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. |
| return_last_frame | BOOLEAN | false | Also return the clip’s final frame as a separate image. |
| watermark | BOOLEAN | false | Ask the model to watermark the video as AI-generated. |
| last_image_urlopt | IMAGE | URL of the image used as the closing frame. Only accepted together with image_url. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| last frame | IMAGE | Needs return_last_frame turned on. |
| task id | STRING | The PopNow task id, for the API console logs or support. |