Which AI video model makes a 25-second clip? Duration check in Python
Only some Sume video models accept 25 seconds in one request. See each model's duration range and filter a target length in a few lines of runnable Python.

Which video models can make 25 seconds in a single request?
On Sume, seedance-2.5 (4 to 30 seconds) and wan-3.0 (2 to 30 seconds). Among the general text-to-video models, everything else stops at 15 seconds or earlier (special-purpose models such as h3-max-recast and higgsfield-genjutsu also reach 30 seconds), so a 25-second clip from those models needs several requests joined in an editor. Seedance 2.5 and Wan 3.0 also take reference images, so a long shot can still keep one subject across the whole length.
The vendors agree on the long end. ByteDance Seed says Seedance 2.5 makes up to 30 seconds per generation, and Alibaba's Wan 3.0 page says native 30 seconds. Google's Gemini Omni 1.1 Flash post describes extension up to 40 seconds in 10 second steps, but Sume's catalog takes 3 to 10 seconds per Omni request.
Duration ranges per request
The table is the part of the catalog that decides how many requests you need. It lists the shortest and longest duration each model accepts in a single call, so read it before you write a storyboard that assumes one long take.
| Model | Shortest | Longest |
|---|---|---|
| seedance-2.5 | 4 s | 30 s |
| wan-3.0 | 2 s | 30 s |
| seedance-2, seedance-2-fast, seedance-2-mini | 4 s | 15 s |
| kling-3 | 4 s | 15 s |
| minimax-h3, minimax-h3-max | 5 s | 15 s |
| gemini-omni-flash-1.1 | 3 s | 10 s |
Filter by target length in Python
Keep the ranges in one dict and ask which models fit. Re-read supported_durations from GET /v1/videos/models when you deploy, because the catalog can change.
RANGES = {
"seedance-2.5": (4, 30), "wan-3.0": (2, 30),
"seedance-2": (4, 15), "seedance-2-fast": (4, 15), "seedance-2-mini": (4, 15),
"kling-3": (4, 15), "minimax-h3": (5, 15), "minimax-h3-max": (5, 15),
"gemini-omni-flash-1.1": (3, 10),
}
def fits(seconds: int) -> list[str]:
return [m for m, (lo, hi) in RANGES.items() if lo <= seconds <= hi]
def requests_needed(seconds: int, model: str) -> int:
lo, hi = RANGES[model]
return -(-seconds // hi)
print(fits(25))
print(requests_needed(25, "minimax-h3-max"), requests_needed(25, "wan-3.0"))When one request is not enough
Splitting into several requests means several jobs, each with its own price and its own Idempotency-Key. Cut points will show in the result unless you plan the shots. If the story really is one continuous take, pick one of the two long models and let the job run: poll the status route, or take a webhook, rather than holding an HTTP connection open for a 30-second render.
Price follows the same arithmetic, so test it before you commit a catalog. A model priced per second multiplies by the seconds you ask for, and the reservation at submit is an estimate that Sume releases or refunds when a job fails. Read the list price for your chosen model and resolution from the current catalog, not from an old table, and keep the aspect ratio and resolution explicit so a replay of the same request gives the same job.
One more guard belongs in the function above: reject a duration that is not an integer. The duration field is an integer number of seconds, so send 8, not 7.5.
Sources
Related posts
More in Developers
- Which API: speech, transcript, music, captions or audio track?
Pick the Sume endpoint by the job: TTS for narration, STT for a transcript, Music for a score, captions for burned text, audio detach for a video's sound.
- Sume TTS source errors: which are safe to retry (status table)
Every tts_ error code in Sume's script-source API with its HTTP status, whether it charges, and whether a retry can help. A table for client error handling.
- Word timestamps to video frame numbers at 29.97 fps in Python
Sume STT words[] carry start and end in seconds. Convert them to frame indexes with exact 30000/1001 math so cuts do not drift on long timelines.
- Workers OAuth Provider v1 or Sume's hosted MCP: which do I need?
Cloudflare's v1 OAuth library is for building your own MCP server. To call Sume tools from Claude or Cursor, connect Sume's hosted endpoint and skip the build.
Written by Sume