Seedance 2.0 · Image to Video
The one that goes to 4K
- image_url
- last_image_url
- video
- last frame
- task id
The naming in this pack is worth thirty seconds of your attention, because the Seedance 2.0 family has four tiers and they are not interchangeable: 2.0 is the full model (this node, up to 4K, $0.07/s), 2.0 Fast is the quick tier (480p/720p, cheaper), 2.0 Mini is the cheap tier, and 2.0 Spicy is the uncensored one. Same generation of model, different price and different ceiling.
This is the full one. You give it a still, it gives you 4 to 15 seconds at 480p, 720p, 1080p or 4K, with sound in the same pass.
That 4K option is the reason to care. Most of this pack tops out at 720p, and none of the Fast or Mini nodes offer 4K at all. It's also where the money goes. The published ladder is $0.07/s at 480p, $0.152/s at 720p, $0.374/s at 1080p and $0.778/s at 4K - eleven times the base rate for sixteen times the pixels. Audio on or off costs the same at every tier, so leaving generate_audio enabled is never the expensive choice here.
Which is the honest trade: render at 720p and you're paying about a tenth of what 4K costs for a clip most people will watch on a phone.
Wiring and settings
image_url takes an IMAGE socket; Load Image in. The pack uploads it (PNG, JPEG fallback above 10 MiB) and caches the upload for 12 hours, so iterating on a prompt doesn't re-send the same picture over and over.
prompt is your direction: subject, action, camera movement, mood.
aspect_ratio- 21:9, 16:9, 4:3, 1:1, 3:4, 9:16 oradaptive(default).adaptivefollows the connected still, which is usually what you want when the still was framed deliberately.duration_seconds- a dropdown led by-1and then 4 through 15.-1is smart duration: the length is left out of the request and the model picks it. Everything else hands it a number. Either way it's the billed quantity.resolution- 480p, 720p, 1080p, 4k.generate_audio- native synchronised sound, on by default.return_last_frame- also emit the clip's final frame as anIMAGE. This is how you build a sequence: last frame of one clip becomes the first frame of the next.bitrate_mode-standardorhigh. Delivery quality only.watermark- adds the model's visible "AI generated" mark.
Optional last_image_url pins a closing frame - "only accepted together with image_url", per the author's tooltip, so it complements the first frame rather than replacing it.
seed is fixed after generate by default, so re-queueing gives you the cached result instead of a second invoice.
What you get out
Three sockets: video (a normal VIDEO, into Save Video), last frame (an IMAGE, empty until the switch is on), and task id (a string, the console id and the only thing support needs).
Install
ComfyUI Manager → SpicyAPI → Install. Hand-rolled:
cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi
Restart, paste your key under Settings > SpicyAPI (or SPICY_API_KEY in the environment for a server), restart once so the node catalogue loads for your account. The pack has no Python dependencies of its own and downloads nothing - the model never touches your disk, which is precisely why ByteDance's API-only releases sit behind nodes like this one rather than in your models folder.
Before you spend
Set Settings > SpicyAPI > Max cost per run. Every run is quoted first and anything above your ceiling stops pre-charge, which matters much more here than in an image node. Interrupting a job is not a cancel: it keeps running on SpicyAPI, is charged if it succeeds, and waits in your console for up to 14 days. A model missing from your node menu just means the catalogue predates it - restart ComfyUI.
Inputs (11)
| 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. |
| resolution | COMBO | 720p | Output resolution. Super-resolution tiers are not offered. |
| duration_seconds | COMBO | 5 | Clip length in seconds. This is the billed quantity. Pass -1 for smart duration: the model picks the length itself instead of a fixed number. |
| generate_audio | BOOLEAN | true | Generate a native soundtrack synchronised to the picture. |
| 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. |
| bitrate_mode | COMBO | standard | Encoding bitrate of the delivered file: standard, or high for crisper detail and a larger file. |
| watermark | BOOLEAN | false | Add the model’s visible "AI generated" watermark to the video. |
| 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 SpicyAPI task id, for the console logs or support. |