A 300-second recording in 24 stills: video-frames fps 0.08
Video frames caps a call at 24 stills and a 300-second source. Send fps 0.08 and a 300-second clip gives 24 mid-bin stills, one every 12.5 seconds.

To cover a 300-second clip with the most stills one video-frames call allows, send fps 0.08. Sume expands fps into mid-bin sample times, so 300 seconds at 0.08 fps gives 24 stills at 6.25, 18.75, 31.25 seconds and on, one every 12.5 seconds, the last at 293.75. That is the maximum: the route takes at most 24 frames per call, and the source cannot be longer than 300 seconds.
How the sample times come out
The docs describe fps as a sample rate that Sume turns into mid-bin samples (0.5/fps, 1.5/fps and so on) with a limit of 24 frames. Each still sits in the middle of its time slice, so it is never the first or last frame. The fps value must be above 0 and at most 2.
| fps | Slice length | First sample | Frames over 300 s | Within 24 cap |
|---|---|---|---|---|
| 0.08 | 12.5 s | 6.25 s | 24 | Yes |
| 0.05 | 20 s | 10 s | 15 | Yes |
| 0.04 | 25 s | 12.5 s | 12 | Yes |
| 0.1 | 10 s | 5 s | 30 | No, over 24 |
| 2 | 0.5 s | 0.25 s | 600 | No, over 24 |
When fps is the wrong tool
An fps program spreads stills evenly. If you need a frame at a known moment, a title card at 4 seconds or a logo at 290, use at[] with 1 to 24 explicit seconds instead. You cannot send both in one call, and the API returns a 400 if you do. Each at value must be at least 0 and less than the clip duration, or the worker fails with frame_time_out_of_range and reports the duration it probed.
- Sources longer than 300 seconds fail with duration_out_of_range.
- Stills keep the source frame size unless you send max_edge (16 to 2160).
- format is jpeg by default, or png for lossless inspection.
The request
Import the clip first, since the route only reads media.sume.com files. A submit always returns 202, and you poll the GET route for the frames.
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-300s-001" \
-d '{
"video_url": "https://media.sume.com/artifacts/artf_demo/webinar.mp4",
"fps": 0.08,
"max_edge": 768
}'
curl https://api.sume.com/v1/video-frames/$REQUEST_ID \
-H "Authorization: Bearer $SUME_API_KEY"Cost and what is not covered
Video frames has no flat per-job price in the docs. Sume bills it by its own Modal compute, and the charge is never more than the hold reserved at submit. For a transcript or probe facts on the same clip, use video inspect, which allows sources up to 1,800 seconds but returns a default of 8 stills at a 768-pixel long edge.
A shorter clip
A 120-second clip at the same 0.08 fps gives about 9 or 10 stills, not 24. Choose fps as 24 divided by the duration to fill the cap: 0.2 for 120 seconds (24 frames, one every 5 seconds) and 0.4 for 60 seconds. The limit of 2 fps only applies to clips of 12 seconds or less if you want all 24 frames.
Sources
Related posts
More in Media tools
- 4:5 clip in Snapchat's 720x1280 frame: crop or pad 29.7%
A 1080x1350 clip in a 720x1280 Snap frame: cover loses 304 px of width, contain leaves 380 px of bars. Fit modes cover, contain, blur; $0.10 a minute.
- Upscale a 45-second clip: 30 s maximum, so two trims, $0.445
Sume Video Upscale takes at most 30 s at $0.009 a second. A 45-second clip needs two trims ($0.04) and two upscales ($0.405): $0.445, or $0.545 with a render.
- $5 of lip sync: 50 s on H3 Max 768p, 26 s on Fabric 720p
A $5.00 balance buys 50 audio seconds of H3 Max Lip Sync at 768p ($0.10), 80 at 480p, or 26 whole seconds of VEED Fabric at 720p ($0.1875) on Sume.
- A 600-character script to a talking still: $0.03 TTS plus $3.80 Fabric
600 characters of TTS cost $0.0285 on Sume; if the audio measures 38 s, VEED Fabric adds 38 x $0.10 = $3.80 at 480p or $7.125 at 720p. Total $3.83 or $7.15.
Written by Sume