Extract frames from video at fps: mid-bin times, 24 frame cap
Sume video frames turns fps into mid-bin timestamps (0.5/fps, 1.5/fps, and so on), caps the result at 24 frames, and accepts fps above 0 up to 2.

Send fps instead of at[] and Sume samples the clip at mid-bin times: 0.5/fps, 1.5/fps, 2.5/fps and so on, capped at 24 frames. fps must satisfy 0 < fps <= 2, so the densest sampling is two frames per second and the sparsest is whatever you choose above zero.
Everything here is from the video frames docs, read 2026-10-01. Topaz Labs' September 2026 page, read the same day, lists cloud video workflows such as Precision Upscale and Frame Interpolation; frame extraction is the step before sending stills to tools like those.
Where do the sample times land?
The timestamps are plain arithmetic on the documented formula, assuming the first 24 samples are the ones kept. The docs state the 24 cap; they do not say how samples beyond the clip end are handled, so read frames[].t in the result rather than assuming.
| `fps` | First sample (s) | Second (s) | 24th (s) |
|---|---|---|---|
| 2 | 0.25 | 0.75 | 11.75 |
| 1 | 0.5 | 1.5 | 23.5 |
| 0.5 | 1 | 3 | 47 |
| 0.1 | 5 | 15 | 235 |
When should I use at[] instead of fps?
at[] takes 1 to 24 explicit seconds, each at least 0 and below the clip duration; a value outside [0, duration) fails frame_time_out_of_range. Use it when you know the moments, such as a cut point. Use fps for an even spread. Send exactly one of the two; both or neither is a schema 400.
If a time falls outside the clip, frame_time_out_of_range explains the failure.
What does a request look like?
Submit is always 202. Poll GET /v1/video-frames/:id until resource_status is ready. The call is unbilled.
curl -X POST https://api.sume.com/v1/video-frames \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: frames-fps-001" \
-d '{
"video_url": "https://media.sume.com/artifacts/artf_demo/talk.mp4",
"fps": 0.5
}'Sources
Related posts
More in Developers
- Extract video frames to images: PNG or JPEG before an upscale
Video frames returns jpeg by default or png for lossless inspection, at the source size unless you set max_edge. Pick png when the stills feed an upscaler.
- Video starts on a black frame: fix the first Timeline segment
A render that opens on black usually has a fade or a late first clip. Timeline 1.0 refuses a first start other than 0 and any first-segment transition.
- Vidu movement_amplitude does nothing on Q2 and Q3; Sume uses prompts
Vidu says movement_amplitude has no effect on its q2 and q3 models. Sume has no motion-strength field at all; you steer motion in the prompt.
- Vidu Q3 allows 1 to 16 seconds; Sume's shortest clip is 2
Vidu Q3 accepts 1 to 16 seconds. On Sume the shortest clip is 2 seconds on wan-3.0, 3 on Gemini Omni Flash, 4 on Seedance, Kling and Grok, 5 on MiniMax.
Written by Sume