Bytedance Seedance 2.0 Image-to-Video
Animate a frame, optionally end on another
- start_frame
- end_frame
- client
- video_url
Seedance 2.0 Image-to-Video is the sibling of the pack's Seedance T2V node: instead of a pure text prompt you give it a start frame and describe the motion, and it animates from there. The headline feature is the optional end frame - you can specify both the first and last frames and let the model bridge the motion between them. That's video continuation as a node input, and it's the kind of control you'd normally hack together from multiple generations.
The mechanism is straightforward hosted API: your image goes to WaveSpeed's Seedance 2.0 endpoint as a base64 data URI (if you wire a tensor) or a URL (if you pass a string), the prompt describes the desired motion, and after polling you get a video_url STRING back. It supports the same four model tiers as the T2V node - standard, Turbo, Fast, Fast Turbo - with the same caveat that Turbo variants are 720p/1080p only.
The inputs that matter
start_frame- an IMAGE tensor, the preferred input; takes precedence over the URL when connected and is sent as base64start_frame_url- the fallback string URL when no tensor is connectedend_frame/end_frame_url- the optional final frame, same tensor-vs-URL pattern; leave both empty for open-ended motionprompt- describes the desired motionmodel- the four-tier Seedance dropdownduration- 4 to 15 secondsaspect_ratio- 16:9, 9:16, 4:3, 3:4, 1:1, 21:9resolution- 480p / 720p / 1080pgenerate_audio- native synchronized audio, on by defaultenable_web_search- real-time info during generationseed- reproducibility, -1 for random
The tensor-first design is the thing to appreciate here. Because start_frame is a real IMAGE input, you can chain this node straight off anything that outputs a tensor - a local checkpoint's VAE decode, an edit node, even another video's first frame extracted to a tensor. No hosting a URL, no Load Image round-trip.
Install and setup
cd ComfyUI/custom_nodes
git clone https://github.com/eRepublik-Labs/comfyui-nodes-erpk.git erpk
cd erpk && pip install -r requirements.txt
Or "ERPK Custom Nodes" from ComfyUI Manager, restart, and set a WaveSpeed API key in ERPK Settings (right-click canvas). Output goes to Preview Anything like every other video node here.
Troubleshooting
If you've read the T2V article, the gotchas carry over: Turbo tiers reject 480p, generate_audio bills by default, and reference/duration caps are enforced server-side. The one node-specific mistake is wiring both start_frame and start_frame_url with conflicting content - the tensor silently wins, so if you're fighting "why is it using the wrong image," check whether a tensor is connected. Same for end_frame. And a practical tip: for a clean loop or a seamless A→B transition, put real thought into the end frame's composition - the model bridges what's there, and a wildly different end frame gives you a wild jump.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| model | COMBO | Seedance 2.0 | Model variant: standard, Turbo (faster, 720p/1080p only), Fast (cheaper), or Fast Turbo (Fast family + turbo, 720p/1080p only) |
| prompt | STRING | Text description of the desired motion | |
| start_frameopt | IMAGE | Start frame as a ComfyUI IMAGE tensor. Preferred input — takes precedence over `start_frame_url` when connected. Sent to WaveSpeed as a base64 data URI. | |
| start_frame_urlopt | STRING | Start frame image URL. Fallback when `start_frame` IMAGE input is not connected. | |
| end_frameopt | IMAGE | End frame as a ComfyUI IMAGE tensor for video continuation. Preferred input — takes precedence over `end_frame_url` when connected. | |
| end_frame_urlopt | STRING | End frame image URL for video continuation. Fallback when `end_frame` IMAGE input is not connected. | |
| clientopt | WAVESPEED_AI_API_CLIENT | WaveSpeed API client (optional if API key is configured in Settings) | |
| durationopt | INT | 54–15 | Video duration in seconds (4-15) |
| aspect_ratioopt | COMBO | 16:9 | Video aspect ratio |
| resolutionopt | COMBO | 720p | Video resolution |
| seedopt | INT | -1-1–2147483647 | Random seed for reproducibility (-1 for random) |
| enable_web_searchopt | BOOLEAN | false | Enable web search for real-time information during generation |
| generate_audioopt | BOOLEAN | true | Generate native audio synchronized with the output video |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video_url | STRING | — |