video-frames fps limit: 24 frames, fps up to 2, what it covers

Sume video-frames takes fps from just above 0 up to 2 and caps each call at 24 frames at mid-bin times. Table of sample times and the span 24 frames reach.

3 min readSume
All posts

On Sume's video-frames, fps must be above 0 and at most 2, and every call returns at most 24 frames. Samples sit at the middle of each bin, at 0.5/fps, 1.5/fps and so on (Video frames). So 24 frames at 2 fps cover 12 seconds of clip, and a slower rate stretches the same 24 frames across more of it.

Sample times and span

The span column is 24 divided by fps, my arithmetic from the mid-bin rule.

Mid-bin rule from Sume docs, read 2026-10-08
`fps`First three sample times (s)Span of 24 frames
20.25, 0.75, 1.2512 s
10.5, 1.5, 2.524 s
0.51, 3, 548 s
0.22.5, 7.5, 12.5120 s
0.15, 15, 25240 s

Choosing between fps and at

Send exactly one of them; both together, or neither, is a 400. Use fps for an even contact sheet, and at[] when you already know the moments, for example from a transcript.

curl -X POST https://api.sume.com/v1/video-frames \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: sheet-001" \
  -d '{
    "video_url": "https://media.sume.com/artifacts/artf_demo/talk.mp4",
    "fps": 0.2,
    "format": "png"
  }'

Limits

  • Source up to 300 s; longer fails with duration_out_of_range.
  • A source over 90 s can add the warning low_confidence_long_video, which does not fail the job.
  • Need a probe and a transcript too? That is video inspect.
  • Billing is metered: the job reserves its Modal compute ceiling at submit and is billed at its own container seconds times the Modal list times 1.25, plus the platform fee, never more than the hold. There is no flat per-frame price, so this post quotes none.
  • Stills keep the source frame size unless you send max_edge (16 to 2160). If one instant fails, that frame has a null url and the job still completes.

Sources

Related posts

More in Media tools

All Media tools posts

Written by Sume