Review a 96-second Short in 24 stills: video frames fps 0.25
fps 0.25 on a 96-second Short returns 24 stills at seconds 2, 6, 10 and on to 94. Video frames takes 24 per call, so one job covers the whole cut.

Set fps to 0.25 on a 96-second clip and video frames returns exactly 24 stills, at seconds 2, 6, 10, 14 and so on to 94. That is the call's 24-frame cap met with no waste, one still every 4 seconds, and the whole cut is covered in a single job.
A 96-second clip fits a YouTube Short: the Shorts page (read 2026-10-09) allows up to three minutes with a square or vertical aspect ratio. It also says a Short over one minute with an active copyright claim of any type is blocked globally. A 96-second cut is over that line, so this review is where you check which scenes carry licensed audio or footage.
Where the stills land
The video frames doc says fps expands to mid-bin samples at 0.5/fps, 1.5/fps, 2.5/fps and so on, with a limit of 24 frames. At 0.25 fps the bin is 4 seconds, so the first sample is 0.5 / 0.25 = 2 seconds, and sample k is (k + 0.5) / 0.25 = 4k + 2. For k from 0 to 23 the last is 94. The list of times is also given back as frames[{t, url, width, height}], so you do not need to compute it.
| k | Time t (s) | Covers |
|---|---|---|
| 0 | 2 | 0 to 4 s |
| 1 | 6 | 4 to 8 s |
| 11 | 46 | 44 to 48 s |
| 22 | 90 | 88 to 92 s |
| 23 | 94 | 92 to 96 s |
What you pay and what you get
Video frames is not a fixed-price job. It reserves its Modal compute ceiling at submit and bills the job's own container seconds times the Modal list times 1.25, plus the platform fee, never more than the hold. The docs give no per-job price, so check GET /v1/catalog for the live rate rather than assuming one. Stills are durable media.sume.com artifacts at the source frame size unless you send max_edge (16 to 2160), and the format is jpeg by default or png.
If one instant fails to extract, that frame has url null and the job does not fail. Always filter nulls before you build a contact sheet.
Picking the right tool
Video inspect is the other option: it returns a probe, eight mid-bin stills by default, and optional speech-to-text. Its stills default to a 768-pixel long edge; video frames does not clamp. For a review where a logo or a caption must be legible, use video frames. For a quick look at a long clip, inspect with seek set to fast.
If you want a different spacing, use at[] with up to 24 explicit times. For example, at [0, 1, 59, 60, 61, 95] lets you inspect the opening, the one-minute line and the last second, which is where claims and cutoffs bite. Times must satisfy 0 <= t < duration, or the worker fails the job with frame_time_out_of_range.
The request
POST /v1/video-frames always returns 202; poll GET /v1/video-frames/{id} until resource_status is ready.
{
"video_url": "https://media.sume.com/artifacts/artf_demo/short.mp4",
"fps": 0.25,
"format": "jpeg"
}Sources
Related posts
More in Media tools
- AI music adds vocals under narration: the Sume prompt fix
Sume Music has no negative prompt: a non-empty one returns 400. End the prompt with Instrumental, no vocals; add no spoken word. Each retry is $0.125.
- Talking photo greeting: 8 seconds on Fabric 720p plus voice-over cost
An 8-second talking-photo greeting on VEED Fabric 1.0 costs $1.50 at 720p or $0.80 at 480p, plus about $0.0114 of TTS for a 240-character line.
- Korean captions API error: caption_hangul_text_latin_style (400)
Sume refuses Korean text on the slam, punch and tiktok-green caption styles with a 400. Use black-outline, korean-ad or another Hangul style; $0.20 a job.
- caption_no_speech: burn authored cues onto a silent clip, no ASR
A silent clip makes speech-to-captions fail with caption_no_speech. Send cues (text, start, end) and Sume burns your text at those times without speech-to-text.
Written by Sume