BytePlus Seedance Text to Video
The cheap shot, and why you might still want it
- VIDEO
- last_frame
- response
Seedance 2.5 is the headline. This is the generation you use when you need a lot of B-roll and you're paying by the second: six seconds of a coffee cup steaming, a shot of traffic for a title card, a background plate for a talking head. Seedance 1.0, and specifically seedance-1-0-pro-fast, is the sweet spot for that - cheaper per second than the 2.x line, quick to render, and entirely good enough when the clip is going to be behind text anyway.
It's also the node where the pack's design philosophy is clearest: these nodes match ComfyUI's built-in ByteDance partner nodes input for input, but they call BytePlus with your key and bill your BytePlus account. If you already have BytePlus contract pricing, that's the whole argument.
How it works
Prompt in, video out, no reference media, no uploads, no Comfy.org login anywhere in the path. The node submits the task, the pack's executor polls it, and progress shows on the node itself.
model is a plain picker here rather than the 2.5 family's dynamic combo - seedance-1-0-pro or seedance-1-0-pro-fast - and the default is the fast one, which tells you what the author thinks this node is for.
promptdrives everything. Describe camera movement explicitly, because 1.0's shot understanding is thinner than 2.5's.resolutionruns 480p to 1080p.aspect_ratiohandles the framing, anddurationtakes 2 to 12 seconds. Short clips are where this model shines; the longer you ask, the more likely you get drifting motion.camera_fixedis the sneaky-important one. It appends a "fix the camera" instruction to your prompt - and the tooltip is honest that BytePlus doesn't guarantee the model obeys. On a locked-off B-roll shot it helps a lot; on a tracking shot, turn it off.enable_offline_inferenceuses the flex tier: a lower price in exchange for results coming back within 48 hours. That's genuinely useful for batch work you don't need now, and a trap if you're iterating.watermarkadds the "AI generated" mark.generation_countfires parallel generations, each onseed + N, andnon_blockingsubmits and returns so you can collect later.
Outputs: VIDEO (a list when you generate more than one - the next node runs once per video), last_frame (final frames as one image batch, for chaining or for a thumbnail), and response (the task JSON).
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 through Manager by searching BytePlus ModelArk. Save the ModelArk API key and its region in Settings → BytePlus - ap-southeast-1 by default, eu-west-1 if that's where your key lives - or write BYTEPLUS_API_KEY / BYTEPLUS_REGION into user/.env. Then enable the model in the ModelArk console.
Nothing is saved automatically: connect a Save Video node. And a node whose output isn't consumed doesn't run, so this one costs nothing while it sits there unwired.
Where people get burned
Model deprecation, first and foremost. BytePlus retires Seedance generations on a schedule - the 1.5 Pro generation was deprecated in September 2026 with a shutdown in November, and the pack keeps its task history visible in Video Query Tasks purely so old jobs can still be found. If a tutorial tells you to paste a model ID that isn't in the picker, that's why. Stay on the IDs the node offers.
Second, seed: it decides whether the node re-runs, not what you get. BytePlus results aren't reproducible from it. Change the seed to force a new render; don't expect the same render twice.
Third, a cost note that surprises people: generation_count isn't "give me options, I'll keep one" at a discount. It's N fully billed generations, returned as a batch. On video, draft or plan before you turn that dial up.
And the honest tradeoff - this node is the cheap option, not the good one. For anything with a person, a face, or dialogue, 2.5's 30-second clips and generated audio are in a different league. Reach for 1.0 when you need volume, coverage and speed, and you're treating the model as a plate rather than a performer.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| model | COMBO | seedance-1-0-pro-fast-251015 | 2 options: seedance-1-0-pro-250528, seedance-1-0-pro-fast-251015 |
| prompt | STRING | The text prompt used to generate the video. | |
| resolution | COMBO | The resolution of the output video. | |
| aspect_ratio | COMBO | The aspect ratio of the output video. | |
| duration | INT | 52–12 | The duration of the output video in seconds. |
| seedopt | INT | 00–2147483647 | Seed to use for generation. |
| camera_fixedopt | BOOLEAN | false | Specifies whether to fix the camera. The platform appends an instruction to fix the camera to your prompt, but does not guarantee the actual effect. |
| watermarkopt | BOOLEAN | false | Whether to add an "AI generated" watermark to the video. |
| enable_offline_inferenceopt | BOOLEAN | false | Use the flex (offline) service tier: lower price, results within 48 hours. |
| generation_countopt | INT | 1 | Number of separate generations to run in parallel. With several, generation N uses seed + N so the results differ. |
| non_blockingopt | BOOLEAN | false | Submit the task and return at once; run the node again to collect the finished video. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| VIDEO | VIDEO | The generated video, or every video of a generation_count batch (the next node runs once per video). |
| last_frame | IMAGE | Last frame of each generated video, as one image batch in the same order as the videos. |
| response | STRING | Task results as JSON, or the pending task IDs of a non_blocking run. |