Back to blog
Video17 min read

AI Video Duration Parameters by Model (2026 Reference Table)

Every AI video duration parameter, with the resolution and frame-rate couplings that break it: LTX, Seedance, Kling, Veo 3.1, Sora 2, Runway, Wan, Luma, Hailuo and Grok. Sourced and dated.

NH
Nafiul Hasan
Founder, Prompt Architects

TL;DR: AI video duration is a parameter, never prose, and on most models it is coupled to resolution and frame rate. Seedance 2.5 tops out at 30 seconds, LTX Fast at 20, Kling 3.0 at 15, Veo 3.1 at 8. Raise the resolution and the ceiling usually drops.

One honesty note first. Prompt Architects writes the prompt, not the video. Nothing on this page renders a clip. This is a reference table for the field you set alongside the prompt.

Every roundup of AI video duration publishes the same thing: a maximum number per model. That number is almost always true and almost always useless, because the value you are allowed to send depends on what else is in the request. Ask LTX for 20 seconds at 4K and you get an error. Ask Veo 3.1 for 6 seconds at 1080p and you get an error. Ask Luma for 10 seconds with a pinned last frame and you get an error. The number was never the hard part.

How Do You Set AI Video Duration on Each Model?

With a numeric or string field in the request body, on all eleven surfaces below. None of them read a duration out of your prompt text. The field name and the accepted values are the whole story.

Model / surfaceFieldAccepted valuesWhat it is coupled to
ltx-2-5-fast, ltx-2-3-fastduration int, nullable6, 8, 10, 12, 14, 16, 18, 20 at 720p/1080p and 24/25 fps; 6, 8, 10 otherwiseResolution and fps
ltx-2-5-produration6, 8, 10 (720p, 1080p only)Resolution
ltx-2-3-produration6, 8, 10 at every resolution to 4KNothing
Dreamina Seedance 2.5duration int[4, 30] or -1Video-edit tasks accept -1 only
Dreamina Seedance 2.0 seriesduration int[4, 15] or -1Nothing published
Kling 3.0 / 3.0 Omnisettings.duration int, default 53 to 15, every integerPer-shot seconds must sum to it
Veo 3.1, Gemini APIdurationSeconds string"4", "6", "8"1080p, 4K, reference images and extension all force "8"
Veo 3.1, Google agent platformvideo length4, 6 or 8 secondsReference-image-to-video forces 8
Veo 3.1, via Runwayduration number4, 6, 8No resolution clause published
Sora 2 / Sora 2 Proseconds stringGuide: up to 20, incl. 16 and 20. Spec enum: "4", "8", "12"See the contradiction below
Runway Gen-4.5duration int, required2 to 10Text-to-video offers 720p ratios only
Runway gemini_omni_flashduration int3 to 10Nothing published
Wan 2.7 text-to-videoduration int, default 52 to 15Nothing published
Luma Ray 3.2video.duration string, default "5s""5s", "10s""10s" blocks HDR, start_frame, end_frame
MiniMax H3duration int, required4 to 15, every integerNothing published
Grok Imagine Video 1.5duration1 to 15 secondsVideo editing takes no duration at all
Vidu Q3 Pro / Q3 Turboduration int, default 51 to 16Nothing published
Vidu Q2duration int, default 51 to 109s and 10s disable bgm
Vidu Q1duration int, default 55, and only 5Locked to 1080p

Sources, all accessed August 27, 2026: docs.ltx.io/models/ltx-2-5 and ltx-2-3 · BytePlus ModelArk Seedance guide · kling.ai text-to-video API · ai.google.dev Veo guide · Google agent platform video overview · OpenAI video generation guide and the openai-openapi spec · docs.dev.runwayml.com/api.md · Alibaba Cloud Wan2.7 text-to-video reference · docs.agents.lumalabs.ai video generation · platform.minimax.io create task · docs.x.ai video generation · platform.vidu.com text-to-video.

Why Does the Same Model Give You Different Durations on Different Surfaces?

Because the duration rule belongs to the API you are calling, not to the model weights behind it. Veo 3.1 is the clearest case, and it is documented three different ways by two companies on the same day.

Google's Gemini API parameter table gives durationSeconds as "4", "6" or "8", and adds that it must be "8" "when using extension, reference images or with 1080p and 4k resolutions". Google's own agent platform page, for veo-3.1-generate-001, publishes the technical specification as "4, 6, or 8 seconds; reference image to video only supports 8 seconds" with output resolutions of 720p, 1080p and 4K listed and no resolution clause attached to duration at all. Runway, reselling the same model as veo3.1, publishes duration as one of 4, 6, 8 next to a required ratio that includes 1920:1080, again with no note that 1080p forces 8 seconds.

Three surfaces, three answers, one model. The Gemini API page is the most restrictive and the one to trust if you are calling generativelanguage.googleapis.com. If you are calling Vertex or Runway, test 1080p at 6 seconds yourself before you build a pipeline on either reading.

MiniMax shows the same pattern in miniature. MiniMax's own create-task schema gives duration as a required integer with the description "Duration of the generated video in seconds. Required, integer. Available values: 4-15" and an enum listing every integer from 4 to 15. Runway's hailuo3 branch publishes the same model's range as 5 to 15. If you need a four-second Hailuo clip, you need MiniMax directly.

Which Models Couple Duration to Resolution and Frame Rate?

Four of them, and this is the part almost nobody documents. LTX is the most explicit, publishing a full support matrix rather than a headline number.

ModelResolutionFPSDurations available (seconds)
ltx-2-5-fast720p, 1080p24, 256, 8, 10, 12, 14, 16, 18, 20
ltx-2-5-fast720p, 1080p48, 506, 8, 10
ltx-2-5-fast1440p, 4K24, 25, 48, 506, 8, 10
ltx-2-5-pro720p, 1080p24, 25, 506, 8, 10
ltx-2-3-fast720p, 1080p24, 256, 8, 10, 12, 14, 16, 18, 20
ltx-2-3-pro720p to 4K24, 25, 48, 506, 8, 10

Source: the LTX-2.5 and LTX-2.3 model pages on docs.ltx.io, accessed August 27, 2026.

Read the shape rather than the numbers. Twenty seconds is Fast-only, cinematic-frame-rate-only and 1080p-or-below. Twenty seconds at 4K does not exist on any LTX variant. Durations are discrete even integers, so there is no 7-second and no 15-second option, and the floor is 6. If you want the craft side of writing for that lane, post 221 covers LTX prompting for a long take in detail.

Luma couples duration to something stranger than resolution. Ray 3.2 takes video.duration as "5s" or "10s", defaulting to "5s", and the docs note that "10s" is not supported together with hdr: true, start_frame, or end_frame. Choosing the longer clip therefore silently costs you the ability to pin the first or last frame. Luma's pricing page makes the same split visible from the billing side: "Standard dynamic range has separate 5-second and 10-second totals; HDR and HDR + EXR are 5-second only."

Vidu couples duration to audio instead, and to the generation you picked. Q3 Pro and Q3 Turbo take any integer from 1 to 16 seconds at 540p, 720p or 1080p. Q2 stops at 10, and Vidu notes that background music "does not take effect when the duration of the q2 model is 9 or 10 seconds". Q1 has exactly one legal value, 5, at exactly one resolution, 1080p. Same product, same field, three completely different answers depending on the generation in the model string.

Kling is the counter-example worth knowing. Its 3.0 Omni request body accepts settings.resolution of 720p, 1080p or 4k and settings.duration of any integer from 3 to 15, and Kling's own request example in the API reference sets "resolution": "4k" and "duration": 15 in the same call. Maximum length at maximum resolution, with no clause between them. Kling publishes no frame rate for the 3.0 family, so treat any "60fps" claim you read elsewhere as unsourced.

Duration behaviour by model — vendor documentation, accessed 27 August 2026
FeatureLTX 2.5 FastSeedance 2.5Kling 3.0Veo 3.1 (Gemini API)Luma Ray 3.2
Duration field is required
Has an automatic-length modenull-1
Duration is coupled to resolution
Also constrained byFrame rateEdit tasksShot sumsReference imagesHDR, keyframes
Frame rate is selectable
Frame rate is published at all24/25/48/5024 fps24 fps24 fps
Longest single generation20s30s15s8s10s

How Do You Ask for a Duration Correctly?

By sending the field, in the shape the vendor documents, with the coupled fields set to values that permit it. Here is every surface, ready to paste.

LTX, the long lane, and the same request outside it:

# 20 seconds: Fast variant, 1080p, 24 fps. This combination is the only 20s lane.
curl -X POST https://api.ltx.io/v2/text-to-video \
  -H "Authorization: Bearer $LTX_API_KEY" -H "Content-Type: application/json" \
  -d '{"model":"ltx-2-5-fast","prompt":"...","duration":20,"resolution":"1920x1080","fps":24}'

# The same 20 at 4K is rejected. 4K caps at 10 on every LTX variant.
  -d '{"model":"ltx-2-5-fast","prompt":"...","duration":10,"resolution":"3840x2160","fps":24}'

LTX also has an automatic mode almost nobody uses:

# duration:null lets the model pick the length from the prompt. The field is still
# required; omitting it returns "duration is required".
curl -X POST https://api.ltx.io/v2/text-to-video \
  -H "Authorization: Bearer $LTX_API_KEY" -H "Content-Type: application/json" \
  -d '{"model":"ltx-2-5-fast","prompt":"A lighthouse keeper climbs the stairs, then the beam sweeps out over the water","duration":null,"resolution":"1280x720","fps":24}'

Seedance, both the explicit and the automatic form:

{ "model": "dreamina-seedance-2-5-260628",
  "content": [{ "type": "text", "text": "..." }],
  "resolution": "1080p", "ratio": "16:9", "duration": 30 }
{ "model": "dreamina-seedance-2-5-260628",
  "content": [{ "type": "text", "text": "..." }],
  "duration": -1 }

Kling, where the multi-shot syntax has to agree with the field:

curl --location 'https://api-singapore.klingai.com/text-to-video/kling-3.0' \
  --header 'Authorization: Bearer {apikey}' --header 'Content-Type: application/json' \
  --data '{"prompt":"...","settings":{"resolution":"4k","aspect_ratio":"16:9","duration":15,"audio":"off","multi_shot":true}}'
shot 1, 5, wide on a rain-slicked street, neon signs flickering;
shot 2, 5, medium on a courier stepping off a scooter;
shot 3, 5, close on the parcel changing hands

Veo 3.1, where the resolution decides the duration on the Gemini API:

{ "instances": [{ "prompt": "..." }],
  "parameters": { "durationSeconds": "6", "resolution": "720p", "aspectRatio": "16:9" } }
{ "instances": [{ "prompt": "..." }],
  "parameters": { "durationSeconds": "8", "resolution": "1080p", "aspectRatio": "16:9" } }

Sora 2, using the value the guide sells:

curl -X POST https://api.openai.com/v1/videos \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -F model="sora-2-pro" -F prompt="..." -F size="1920x1080" -F seconds="20"

Runway, where one API fronts a dozen models with a dozen different rules:

{ "model": "gen4.5", "promptText": "...", "ratio": "1280:720", "duration": 10 }
{ "model": "gemini_omni_flash", "promptText": "...", "ratio": "1280:720", "duration": 3 }

Wan 2.7, where the shot timings live in the prompt and the total lives in the parameter:

curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis' \
  -H 'X-DashScope-Async: enable' -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"model":"wan2.7-t2v-2026-06-12","input":{"prompt":"Shot 1 [0-5 seconds] wide shot: ... Shot 2 [5-10 seconds] medium shot: ... Shot 3 [10-15 seconds] close-up: ..."},"parameters":{"resolution":"1080P","ratio":"16:9","duration":15}}'

Luma Ray 3.2, and the request that quietly conflicts with itself:

{ "model": "ray-3.2", "prompt": "...",
  "video": { "resolution": "720p", "duration": "10s" } }
{ "model": "ray-3.2", "prompt": "...", "start_frame": { "url": "..." },
  "video": { "resolution": "720p", "duration": "5s" } }

MiniMax H3 and Grok Imagine 1.5, both plain integers:

{ "model": "MiniMax-H3", "content": [{ "type": "text", "text": "..." }],
  "resolution": "2K", "duration": 15 }
response = client.video.generate(
    prompt="...", model="grok-imagine-video-1.5",
    duration=10, aspect_ratio="16:9", resolution="720p",
)

Vidu, where the ceiling belongs to the generation you picked:

# Q3 accepts 1-16. Q2 accepts 1-10. Q1 accepts 5 and nothing else.
curl -X POST https://api.vidu.com/ent/v2/text2video \
  -H "Authorization: Token $VIDU_API_KEY" -H "Content-Type: application/json" \
  -d '{"model":"viduq3-pro","prompt":"...","duration":16,"aspect_ratio":"16:9","resolution":"1080p"}'

What Happens When You Ask for a Length That Doesn't Exist?

It depends entirely on which input style you used, and one vendor documents both behaviours side by side. BytePlus tells Seedance callers that passing parameters in the request body "uses strict validation. If a parameter is invalid, the model returns an error", while appending flags after the prompt text is a legacy method that "uses loose validation. If a parameter is invalid, it is ignored or an error is returned".

Kling adds a constraint that no other model has. Its multi-shot prompt syntax takes a shot number and a per-shot length, and Kling's own field notes require that the "sum of all shot durations must equal the total video duration", across 1 to 6 shots each at least one second long. So a mismatch between your prose and your settings.duration is a prompt-level error rather than an API-level one, and the model will not silently rescale your beats. If you are building shot lists like this, the seven-part video prompt anatomy is the structure to hang them on.

Seedance has an equivalent trap in its task types. Set task_type to edit and BytePlus requires that the source video be 4 to 30 seconds long, that ratio be adaptive, and that duration be -1. You cannot specify a length for an edit at all, and the model keeps the output roughly the same as the input, possibly about 0.4 seconds shorter and possibly not a whole number of seconds.

Grok has the oddest published number in the entire set. Text-to-video takes a duration anywhere from 1 to 15 seconds, but video editing takes no duration at all: "The edited video retains the duration of the original, which is capped at 8.7 seconds." Not 8, not 9. Eight point seven.

One last piece of small print, because it will confuse anyone who measures the file. Seedance's task-retrieval endpoint returns a duration that BytePlus describes as an integer approximation which may differ from the actual duration, computed as total frames divided by 24 and rounded down. A 133-frame clip is really 5.54 seconds and reports back as 5.

How Do You Get Past the Single-Generation Ceiling?

By extending, on the four surfaces that support it, each with a different arithmetic.

Veo 3.1's extension is the most generous and the most constrained at once. Google's Gemini API documentation says you can "extend videos that you previously generated with Veo by 7 seconds and up to 20 times", that the input must be a Veo-generated video of 141 seconds or less at 720p, and that the result runs to "up to 148 seconds of video". So the extended path is 720p only on that surface, and the 4K you could have had in a single 8-second generation is off the table the moment you extend.

Sora 2 works in bigger jumps: "Each extension can add up to 20 seconds. A single video can be extended up to six times, for a maximum total length of 120 seconds." LTX is the only one that accepts a fractional extension, taking duration as a double with a "Minimum 2 seconds, maximum 20 seconds (480 frames at 24fps)" range, plus a combined ceiling where context and new footage together "cannot exceed 505 frames (~21 seconds at 24fps)". Grok exposes extension as a mode that continues an existing video from its last frame.

Which of These Numbers Will Go Stale First?

The Sora row, and soon. OpenAI's deprecations page records that on March 24, 2026 it notified developers of "deprecation and removal from the API on September 24, 2026" for sora-2, sora-2-pro and four dated snapshots, with the replacement column left blank for every entry. Any duration you plan around that surface has weeks left. Post 141 covers the shutdown and where to move.

Sora is also the one place in this table where a vendor's prose and its machine-readable spec openly disagree. The guide states that "Both sora-2 and sora-2-pro support 16- and 20-second generations" and its own batch example passes "seconds":"20", while the live openai-openapi.yaml defines the shared VideoSeconds schema with exactly three values, 4, 8 and 12, and describes the create field as "Clip duration in seconds (allowed values: 4, 8, 12). Defaults to 4 seconds." The extension endpoints then describe the same schema as "Length of the newly generated extension segment in seconds (allowed values: 4, 8, 12, 16, 20)." Three descriptions, one enum. We are reporting all three rather than picking a winner.

Version drift is the other decay path. Seedance 2.5 replaced 2.0 as the current model on July 31, 2026, and doubled the ceiling from 15 seconds to 30; our Seedance prompting guide covers both. LTX-2.5 replaced 2.3, which the LTX-2 repository now files under a "Legacy" heading. Veo 3.1 is marked Preview on Google's Gemini API page and GA on Google's agent platform page for veo-3.1-generate-001, dated November 17, 2025 with a retirement date of November 17, 2026 or later. If you are choosing between these models rather than looking up a field, the Veo, Sora and Kling comparison is the better starting point.

Free Chrome Extension

Stop rewriting prompts. Start shipping.

Works with ChatGPT, Claude, Gemini, Grok, Midjourney, Ideogram, Veo3 & Kling. 5.0★ on the Chrome Web Store.

Create An Account

The practical takeaway is smaller than the table. Decide the duration first, then let it constrain the resolution and frame rate, rather than the other way round. Every rejection in this article comes from someone picking 4K or 50 fps and then discovering what it cost them.

Frequently asked questions

Free Chrome Extension

Stop rewriting prompts. Start shipping.

Works with ChatGPT, Claude, Gemini, Grok, Midjourney, Ideogram, Veo3 & Kling. 5.0★ on the Chrome Web Store.

Create An Account