ByteDance Seedance 2.5 First-Last-Frame to Video
Pin the beginning and end, let Seedance 2.0 fill in the middle
- first_frame
- last_frame
- VIDEO
First-last-frame generation is the closest thing to "directed" video you'll get from an API. Instead of hoping the model animates your whole idea from a prompt, you hand it the exact first frame and (optionally) the exact last frame, and Seedance 2.0 choreographs a believable path between them. ByteDance2FirstLastFrameNode is ComfyUI's built-in wrapper for that, and it's the node to reach for when you know how a shot should start and end and want everything in between to respect both.
It's a partner/API node like the rest of the ByteDance family: nothing runs locally, you need a logged-in Comfy account, and each call is billed through credits. The KB's ByteDance panel is the useful context here - Seedance is ByteDance's flagship, API-only video line, so this is the paid-but-polished route while the open Wan-derivatives cover the free local ground.
The inputs
- model - the interesting one. It's a dropdown that carries its own sub-options: Seedance 2.0, 2.0 Fast, 2.0 Mini, and 2.5. Pick one and it exposes a prompt (with resolution, ratio, duration, and audio toggles) that describes the motion between your frames. The model choice is quality-vs-cost: 2.0 for quality, Fast for speed, Mini for the cheapest quick takes.
- first_frame - the image the video starts on.
- last_frame - the image the video ends on. Optional: with only a first frame, it behaves like plain image-to-video.
- first_frame_asset_id / last_frame_asset_id - the pair that connects to ByteDance Create Video Asset. Use a registered asset ID instead of an image here; they're mutually exclusive with the image inputs, and this is how you keep a specific person consistent.
- seed - controls re-running, not results (nondeterministic, per the tooltip).
- watermark - toggles an "AI generated" watermark on the output.
What comes out
A single VIDEO output - the animated bridge between your frames. Save it, preview it, or feed it onward.
Gotchas
- Asset IDs and image inputs don't mix. Put both a
first_frameimage and afirst_frame_asset_idand the node rejects the run. Choose one source per end. - Good frames make good video. The first/last frames are the strongest signal you have; mismatched framing or lighting between them and the middle gets weird. Generate the two frames with the same style and character.
- Watch the model's duration ceiling. The 2.5 model's sub-options go longer, but 2.0 tiers have their own limits - and longer + higher res = pricier. A failed validation still shouldn't bill you, but a successful long render will.
- Don't expect the seed to reproduce. Same story as every partner node: seed just decides whether the node re-runs.
If character consistency across shots is the goal, the full pattern is: Create Video Asset once → this node with *_asset_id → consistent faces, shot after shot.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| model | COMBO | Seedance 2.5 for the newest model, videos up to 30 seconds and mp4/mov output; Seedance 2.0 for maximum quality and 1080p/4k; Fast for speed optimization; Mini for the fastest, lowest-cost generation. | |
| seed | INT | 00–2147483647 | Seed controls whether the node should re-run; results are non-deterministic regardless of seed. |
| watermark | BOOLEAN | false | Whether to add a watermark to the video. |
| first_frameopt | IMAGE | First frame image for the video. | |
| last_frameopt | IMAGE | Last frame image for the video. | |
| first_frame_asset_idopt | STRING | Seedance asset_id to use as the first frame. Mutually exclusive with the first_frame image input. | |
| last_frame_asset_idopt | STRING | Seedance asset_id to use as the last frame. Mutually exclusive with the last_frame image input. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| VIDEO | VIDEO | — |