Continue a 30 s shot: Video frames still as the next first frame
Extract a last-second still from a 30 s Sume clip with Video frames and send it as first_frame for the next shot. Price of the chain at 720p.

To continue a 30-second shot, extract a still near its end with the Video frames API and send that image as the first_frame of the next generation (as of 2026-10-08). On Seedance 2.5 at 720p the chain of two 30 s shots plus one Timeline render is $34.78.
Steps
1. Generate shot one (30 s). 2. Import or use the Sume-hosted clip and call POST /v1/video-frames with an at[] list such as [29.5]. 3. Send the returned image as a first_frame in frame_images on shot two. 4. Join with Timeline.
Video frames takes a media.sume.com clip, returns durable image artifacts and is billed by Modal compute, not at a fixed rate; the docs do not give a flat price, so it is not added to the totals here.
Request shape
Shot two uses frame_images with frame_type first_frame, as described in the Video generation docs. Do not also send input_references unless you accept that frame_images controls the mode.
| Step | Cost |
|---|---|
| Shot one, 30 s | $17.34 |
| Frame extract | Modal compute, see Video frames docs |
| Shot two, 30 s | $17.34 |
| Timeline, 60 s | $0.10 |
| Total without the extract | $34.78 |
What it does and does not give you
A first frame fixes the opening composition, subject position and light. It does not guarantee the same motion or voice. Add the same reference images to both shots for identity, and keep prompts consistent.
Wan 3.0 accepts the same input types and costs $3.75 per 30 s at 720p, so the same chain on Wan is $7.60 with the Timeline render.
Request body for shot two
This is a request body only, to send to POST /v1/videos with your API key.
{
"model": "seedance-2.5",
"prompt": "Continue the scene from the first frame",
"duration": 30,
"resolution": "720p",
"aspect_ratio": "9:16",
"frame_images": [
{
"type": "image_url",
"image_url": {
"url": "https://media.sume.com/artifacts/artf_demo/last-frame.jpg"
},
"frame_type": "first_frame"
}
]
}Check the number yourself
To confirm the figure behind this post, read the seedance-2.5 entry from GET /v1/video-router/models and check that 30 s and 720p are inside its duration_seconds and resolutions. The grid price for that cell is 1734 cents ($17.34). It is the provider list price times 1.25, rounded up to the next cent for the job, as of 2026-10-08.
Use an Idempotency-Key on every create call so a retry cannot start a second paid job, then poll the job until it is complete and download the file from the result. Media inputs for Timeline or for references must be hosted files, so import them first.
None of the prices here say anything about picture quality, motion or how well a model follows a prompt. Prices can change when a provider changes its list, which is why every table carries a date. Re-read the catalog before you commit a large batch, and run one test job at the exact setting you plan to use.
Sources
Related posts
More in Developers
- Convert MAI-Transcribe-2 word offsets to Sume video caption words
Turn word timings in milliseconds into the seconds-based words array Sume video-captions accepts. A short Python converter plus the 60 s and 1,200-word limits.
- curl -d to Sume /v1/videos gives 415: add the JSON Content-Type
A POST /v1/videos with a body that is not application/json gets 415 unsupported_media_type, with the content type you sent in details. The curl fix.
- Dart: submit a 30-second Wan 3.0 clip with package:http
Server-side Dart with package:http: POST wan-3.0 for 30 seconds, poll until completed and write the MP4. Keep the key out of the Flutter app.
- Deno 2.9.7: scope permissions to a Sume key check on GET /v1/me
Run a Sume API key check in Deno 2.9.7 with allow-net limited to api.sume.com and allow-env limited to the key, and see what the permission error looks like.
Written by Sume