Seedance – Video Generator
One Seedance Node, Four Ways to Start a Video
- first_frame
- last_frame
- reference_image_1
- reference_image_2
- reference_image_3
- reference_image_4
- reference_video
- reference_audio
- video
- last_frame
- frames
- video_url
- video_path
- last_frame_url
This is the whole pack in one node. The same repo ships four specialist Seedance nodes and one unified SeedanceVideoGenerator that auto-detects which mode you want from what you connect. Wire nothing into the image sockets and it's text-to-video. Connect a first_frame alone and it's first-frame image-to-video. Add a last_frame and it becomes interpolation. Connect a reference_image_1 instead and it switches to reference mode. One node, four personalities, zero mode-switching dials to get wrong.
Underneath it's the same story as its siblings: an API wrapper around ByteDance's closed Seedance video models on the BytePlus ARK endpoint. No local weights exist for these models - they're API products, full stop - so the node packages your inputs, submits a task, polls until it's done, downloads the mp4, and hands you a native ComfyUI VIDEO plus the extracted last frame.
When to reach for it vs. the specialists
The unified node shines in a template workflow you plan to reuse: one node whose mode changes based on what you connect, no node-swapping when you want a different starting point. It also exposes both models - dreamina-seedance-2-0-260128 (Seedance 2.0) and seedance-1-5-pro-251215 - where the specialist nodes hard-code the 2.0 model.
The trade-off is clarity. If you're still learning, the specialist nodes are nicer to read on a canvas: "Image to Video (First Frame)" tells you what it does. The unified node hides that in the connections, which is also where people trip. More on that below.
What you actually set
The required set is the pack standard: api_key, prompt, model, ratio, duration, resolution, generate_audio, watermark, return_last_frame, poll_interval, max_wait. The optional set is everything the specialists have, all on one node:
first_frame- connect alone for first-frame mode, withlast_framefor interpolation.last_frame- only meaningful alongsidefirst_frame.reference_image_1through_4- connect any of them and you've switched to reference mode (addressed as[Image 1-4]in the prompt).reference_video/reference_audio-[Video 1]/[Audio 1]in the prompt; URL fallbacks included.
Outputs are the pack's six: video, last_frame, frames, video_url, video_path, last_frame_url. The last_frame → next node's first_frame chaining trick works here too.
Install
ComfyUI Manager, search comfyui-seedance-nodes. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/theclueless-ai/comfyui-seedance-nodes
pip install -r ComfyUI/custom_nodes/comfyui-seedance-nodes/requirements.txt
requests, Pillow, numpy, opencv-python, and nothing to download model-wise. Set ARK_API_KEY (or the node's api_key field), restart, find it under Seedance / Video Generation.
Where people get burned
- Mode is decided by connections, and that surprises people. Connect an image to
reference_image_1when you meant it as the opening frame, and you've silently switched from first-frame mode to reference mode. The node prints[Seedance] Mode detected: ...to the console - check it when a run doesn't behave. - Model/duration mismatch. Pick
seedance-1-5-pro-251215and ask for 15 seconds: the node clamps to its 12-second cap. Fine, but if you were counting on the full length, that's the explanation. - The usual API package. Empty key errors immediately; 1080p long jobs can outlive the 600s default
max_wait(raise it); every run is metered and sends your inputs to ByteDance's servers with their moderation in charge of what comes back.
Inputs (27)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | BytePlus ARK API key. Leave empty to use ARK_API_KEY env variable. | |
| prompt | STRING | A girl holding a fox, the camera slowly pulls out. | Text description of the video. Use [Image 1-4] for reference images, [Video 1] for reference video, [Audio 1] for reference audio. |
| model | COMBO | dreamina-seedance-2-0-260128 | dreamina-seedance-2-0-260128 → T2V / first-frame / first+last modes. seedance-1-0-lite-i2v-250428 → reference image mode. |
| ratio | COMBO | 16:9 | 6 options: 16:9, 9:16, 1:1, 4:3, 3:4, adaptive |
| duration | INT | 54–15 | Video duration in seconds. Seedance 2.0 supports 4–15 s. seedance-1-5-pro-251215 is capped at 12 s. |
| resolution | COMBO | default | Output resolution. 'default' lets the API decide. |
| generate_audio | BOOLEAN | false | — |
| watermark | BOOLEAN | false | — |
| return_last_frame | BOOLEAN | true | Ask the API to return a watermark-free PNG of the last frame. Connect last_frame → first_frame of the next node to chain videos. |
| poll_interval | INT | 105–60 | Seconds between status-check requests. |
| max_wait | INT | 60060–3600 | Maximum seconds to wait for the task. |
| first_frameopt | IMAGE | Connect to enable I2V mode. Alone → first-frame mode. With last_frame → interpolation mode. | |
| last_frameopt | IMAGE | Connect with first_frame to enable first+last interpolation mode. | |
| first_frame_urlopt | STRING | HTTP URL override for first_frame. | |
| last_frame_urlopt | STRING | HTTP URL override for last_frame. | |
| reference_image_1opt | IMAGE | Enables reference mode ([Image 1] in prompt). | |
| reference_image_2opt | IMAGE | Second reference image ([Image 2] in prompt). | |
| reference_image_3opt | IMAGE | Third reference image ([Image 3] in prompt). | |
| reference_image_4opt | IMAGE | Fourth reference image ([Image 4] in prompt). | |
| ref_url_1opt | STRING | HTTP URL override for reference image 1. | |
| ref_url_2opt | STRING | HTTP URL override for reference image 2. | |
| ref_url_3opt | STRING | HTTP URL override for reference image 3. | |
| ref_url_4opt | STRING | HTTP URL override for reference image 4. | |
| reference_videoopt | VIDEO | Connect any ComfyUI VIDEO node (Load Video, another Seedance output, etc.). Takes priority over reference_video_url. Reference as [Video 1] in the prompt. | |
| reference_video_urlopt | STRING | HTTP URL of a reference video. Used only when reference_video is not connected. Reference as [Video 1] in the prompt. | |
| reference_audioopt | AUDIO | Connect any ComfyUI AUDIO node (Load Audio, etc.). Takes priority over reference_audio_url. Reference as [Audio 1] in the prompt. | |
| reference_audio_urlopt | STRING | HTTP URL of a reference audio track. Used only when reference_audio is not connected. Reference as [Audio 1] in the prompt. |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| last_frame | IMAGE | — |
| frames | IMAGE | — |
| video_url | STRING | — |
| video_path | STRING | — |
| last_frame_url | STRING | — |