BytePlus Seedance 2.5 Text to Video
30 seconds with sound, for a price
- VIDEO
- draft_task_id
- last_frame
- response
Seedance is the closed video model the open community measures itself against, and 2.5 is the version where two things changed: clips go to 30 seconds, and the model generates audio alongside the picture - dialogue, ambience, effects. That second part is why the prompt box tells you to put spoken lines in double quotes to steer the generated dialogue. Local video models mostly can't do that yet.
This is the plainest node in the pack's video half. Prompt in, video out, no reference media to manage, no uploads, no Comfy.org login. If you want to know whether the pack works before wiring up a thirteen-node pipeline, start here.
How it works
The node submits a content-generation task to ModelArk and the pack's executor polls it until it finishes, reporting progress to the node - that's the bar you see filling up on the canvas. Because it's polling a queue, a five-second clip and a thirty-second clip behave identically on your side: you wait.
The model picker is the interesting part, and it's a picker rather than three separate nodes. Seedance 2.5 (1080p, up to 30 s, mp4 or mov), Seedance 2.5 Draft (a 480p preview, more on that in a second), Seedance 2.5 Premium (4K), Seedance 2.5 Premium Draft, plus Seedance 2.0, 2.0 Fast and 2.0 Mini for cheaper generations up to 15 s.
Under the model you picked you get prompt, resolution, ratio, duration (4–30 on 2.5, 4–15 on the 2.0 family), generate_audio (default on) and, on 2.5, output_format (mp4 or mov). Then three inputs sit outside the picker: seed, watermark, generation_count and non_blocking.
Outputs and the settings that actually matter
VIDEOis a list. Withgeneration_countabove 1 you get every video back, each generated fromseed + N, and the next node down runs once per video.last_framecollects their final frames as one batch,responseis the task JSON, anddraft_task_idis for the draft workflow.seeddoes one job: it decides whether the node re-runs. BytePlus results aren't reproducible from a seed, and the tooltip is upfront about it. Change the seed (or the prompt) to force a fresh call - otherwise ComfyUI serves the cached result and you never touched the API.non_blockingsubmits and returns immediately; you run the node again to collect the finished video. That's for people queuing several long jobs at once rather than staring at a bar.- Draft mode is the pack's best cost saver. Pick a Draft model, set the seed control to fixed so the node doesn't regenerate the draft on the next run, and you get a 480p preview plus its
draft_task_id. Connect that ID to BytePlus Seedance 2.5 Draft to Final Video and the final render reuses the draft's prompt, references, duration, aspect ratio, seed and audio setting - at 1080p (2.5) or 4K (Premium). Draft IDs stay valid for seven days.
Nothing gets saved by the node itself. Connect a Save Video or the result lives only in the session, and a node whose output nobody consumes doesn't run at all - so an idle Seedance node costs zero.
Install and key
cd ComfyUI/custom_nodes
git clone https://github.com/byteplus-sa/ComfyUI-BytePlus-ModelArk
pip install -r ComfyUI-BytePlus-ModelArk/requirements.txt
Restart ComfyUI (0.31.0 or newer), or install from Manager by searching BytePlus ModelArk. Then save the ModelArk API key and its region in Settings → BytePlus - ap-southeast-1 or eu-west-1, and the key must be from the region you pick - or put BYTEPLUS_API_KEY and BYTEPLUS_REGION in user/.env. Activate the Seedance 2.5 model in the ModelArk console first; the key doesn't grant you a model you haven't enabled.
Where people get burned
Cost, and the shape of it. Video is metered per second of output, which is why the reaction to Seedance arriving in ComfyUI was considerably less enthusiastic than the reaction to the demo reel. A 30-second 1080p clip with audio is not cheap, and generation_count multiplies it silently - three generations is three bills, not one with options. Draft mode exists precisely so you don't pay 1080p prices to find out your prompt was wrong.
Second: the double-quote convention is not decoration. Lines in quotes get spoken; the rest is description. Mix them up and you get a narrator reading your stage directions, or silence.
Third, if you're on a 2.0 model and wondering where your 4K went - 4K is the 2.5 Premium and 2.0 tiers, and the resolution list changes with the model you select. Read the picker, not a tutorial from six months ago.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| model | COMBO | Seedance 2.5 for the newest model, videos up to 30 seconds and mp4/mov output; Seedance 2.5 Draft for a quick 480p preview whose draft_task_id renders the 1080p final in the BytePlus Seedance 2.5 Draft to Final Video node; Seedance 2.5 Premium for 4k output, and Seedance 2.5 Premium Draft for its 480p preview (rendered in 4k); Seedance 2.0 for maximum quality and 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. |
| generation_count | INT | 1 | Number of separate generations to run in parallel. With several, generation N uses seed + N so the results differ. |
| non_blocking | BOOLEAN | false | Submit the task and return at once; run the node again to collect the finished video. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| VIDEO | VIDEO | The generated video, or every video of a generation_count batch (the next node runs once per video). |
| draft_task_id | STRING | Task ID of a Seedance 2.5 Draft or Seedance 2.5 Premium Draft run. Connect it to the BytePlus Seedance 2.5 Draft to Final Video node to render the final (1080p, or 4k for Premium). Several drafts (generation_count above 1) give one ID per line. |
| last_frame | IMAGE | Last frame of each generated video, as one image batch in the same order as the videos. |
| response | STRING | Task responses as JSON. |