Grok Imagine video extension duration counts only the extension
In xAI video extension, duration is the added seconds only: a 10s input plus duration 5 returns 15s. Sume has no extend on Omni; chain clips from a last frame.

In xAI's video extension, duration is the length of the extended portion only, not the total. If your input video is 10 seconds and you set duration to 5, the returned video is 15 seconds. On Sume there is no extend parameter on the Omni route, so you continue a clip by generating a new one from its last frame.
The xAI behavior is from its extension page; Sume's side is from the video router, video generation and video frames docs, read 2026-10-01.
How does xAI count the seconds?
The page states that duration controls the length of the extended portion only. The output is the original plus the extension, so total length is input length plus duration. Plan the budget from the added seconds, not from the length you want to end with.
| Input video | `duration` | Returned video |
|---|---|---|
| 10 seconds | 5 | 15 seconds (10s original + 5s extension) |
Does Sume have an extend call?
Not on the Omni route. The router docs state that previous_interaction_id / extend is not exposed there. On Sume, duration is an integer number of seconds for the clip being generated, so each job's duration is that clip's whole length.
How do I continue a clip on Sume?
Use frames as the continuation tool. frame_images specifies first or last frame images for image-to-video, each with a frame_type of first_frame or last_frame. Pull a still from the end of the previous clip with video frames, which extracts stills at times you name, then use that image as the first frame of the next job. Stitch the clips afterwards. For the same idea on Gemini Omni, see Omni extension alternative.
const res = await fetch("https://api.sume.com/v1/videos", {
method: "POST",
headers: {
Authorization: "Bearer " + process.env.SUME_API_KEY,
"Content-Type": "application/json",
"Idempotency-Key": "continue-001",
},
body: JSON.stringify({
model: "seedance-2.5",
prompt: "The camera keeps drifting forward",
duration: 5,
frame_images: [
{
type: "image_url",
frame_type: "first_frame",
image_url: { url: "https://media.sume.com/artifacts/artf_demo/last.jpg" },
},
],
}),
});
console.log(await res.json());What should I do next?
Budget extension seconds as added time on xAI. On Sume, count each clip's full duration and check the model's accepted range in the catalog before chaining.
Sources
Related posts
More in Developers
- Grok Imagine video input: base64 or file_id vs Sume HTTPS URLs
xAI's extension page accepts a source video as a public URL, base64 data URI or file_id. Sume's video fields take public HTTPS media URLs only.
- HeyGen 429 Retry-After vs Sume rate_limited and queue_full
HeyGen sends 429 with a Retry-After header in seconds. Sume sends 429 rate_limited with retry-after when present, and a separate 429 queue_full.
- HeyGen videos:write and videos:read vs Sume scopes mcp:read/write
HeyGen needs videos:write to create and videos:read to poll. Hosted Sume OAuth has mcp:read and mcp:write, no paid scope; spend is wallet admission.
- HeyGen asset upload max size: 32 MB, and what Sume does instead
HeyGen's POST /v3/assets caps files at 32 MB, URLs included. Sume has no asset step: requests take public HTTPS URLs, and oversized bodies return 413.
Written by Sume