Pick seedance-2 or seedance-2.5 in code by clip length, with price
A small Python helper that sends clips up to 15 s to seedance-2 and longer ones to seedance-2.5, with the 720p price from Sume token math. Runs as written.

Seedance 2.0 on Sume tops out at 15 seconds and Seedance 2.5 reaches 30, so a simple rule routes clips of 15 seconds or less to seedance-2 and longer clips to seedance-2.5. At 720p that is $5.67 against $8.67 for 15 seconds. The helper below applies the rule and prints an estimate from Sume's token formula. It chooses by length and price only; it does not claim either model looks better.
The limits behind the rule
The Video generation docs list seedance-2 durations from 4 to 15 seconds, and the Video Router docs say seedance-2.5 accepts 4 to 30. BytePlus describes Seedance 2.5 as 4 to 30 seconds natively (BytePlus: Dreamina Seedance 2.5). Read supported_durations from the catalog if you want the rule to follow the live data.
The helper
Sume's pricing is video tokens: width x height x seconds x 24 / 1024, at a list rate per 1,000 tokens, times 1.25. The rates below are the 720p list rates in the pricing code read on 2026-10-04; the 2.5 list rate for 1080p is higher, so this helper is for 720p only.
import math
LIST_PER_1000_TOKENS = {"seedance-2": 0.014, "seedance-2.5": 0.0214}
def pick_model(seconds: int) -> str:
if not 4 <= seconds <= 30:
raise ValueError("Seedance accepts 4 to 30 seconds")
return "seedance-2" if seconds <= 15 else "seedance-2.5"
def price_720p(model: str, seconds: int) -> float:
tokens = math.ceil(1280 * 720 * seconds * 24 / 1024)
return round(tokens / 1000 * LIST_PER_1000_TOKENS[model] * 1.25, 2)
for seconds in (5, 15, 16, 30):
model = pick_model(seconds)
print(seconds, model, price_720p(model, seconds))What it prints
Run it and compare against the table. Prices are estimates from Sume's list x 1.25 rule; the live number is in the catalog and on the job.
| Seconds | Model chosen | Estimate |
|---|---|---|
| 5 | seedance-2 | $1.89 |
| 15 | seedance-2 | $5.67 |
| 16 | seedance-2.5 | $9.24 |
| 30 | seedance-2.5 | $17.33 |
Where it can mislead
A cheaper model is only cheaper if its result is good enough. If 2.0 needs more takes than 2.5 for your content, the rule loses money; see cost per kept second. Note the step at 16 seconds: the price jumps because the model changes, not because of one extra second. Send the chosen id in the model field of POST /v1/video-router/generate.
Sources
Related posts
More in Developers
- Pick a subtitle translation model with a 20-cue pilot
Vendor benchmark scores do not tell you how a model handles your captions. Run the same 20 cues through each candidate, burn them, and compare on screen.
- Pin AI music model ids: music_v2_5, v6, lyria-3.5 and sume/music-auto
Which model id to pin for ElevenLabs Music, Suno and Google Lyria, and what Sume does with sume/music-auto. A config table and a rule for logging the engine.
- 1080x1350 sent as aspect_ratio: what Ideogram, Grok, Imagen get
Send pixels instead of a ratio and Sume snaps to the nearest native ratio. Tested table for 1080x1350, 1200x628 and 1500x500 across four model families.
- Poll Sume audio jobs at the recommended interval, not a fixed sleep
The Sume job status response tells you when to poll next and whether the job is terminal. Read those fields instead of hardcoding sleep(2).
Written by Sume