Inspect stills at max_edge 960: 540x960 views of a 9:16 ad

Video inspect max_edge 960 returns 9:16 stills at 540x960, TikTok's non-Spark minimum, so you review the ad at the smallest size it may run. 24 stills per call.

5 min readSume
All posts

Send frames with max_edge 960 and a 9:16 ad comes back as 540x960 stills, which is the minimum size TikTok lists for non-Spark 9:16 ads. The Video inspect default is 768, which gives 432x768 for the same ad, smaller than the TikTok floor. The docs allow max_edge from 64 to 2160, up to 24 stills per call, and billing by Modal compute for the probe and stills (as of 2026-10-08).

Why review at the minimum size

TikTok's page says a 9:16 ad must be at least 540x960 pixels. An ad that is sharp at 1080x1920 can still have small text that is unreadable at 540x960. Reviewing stills at that exact size shows you the worst legal case. The arithmetic is simple: 960 x 9 / 16 = 540, so a 9:16 clip scaled to a 960-pixel long edge is 540 wide.

max_edge and the stills it gives for a 9:16 clip, read 2026-10-08
max_edgeStill sizeAgainst TikTok 540x960
768 (default)432x768Below the minimum
960540x960Exactly the minimum
19201080x1920Above; the full-size look
21601215x2160Highest the docs allow

The request

The body needs video_url (a media.sume.com artifact or asset), an Idempotency-Key, and a frames object with either at (1 to 24 timestamps) or fps (above 0, up to 2, capped at 24 stills). It may not have both. Add format jpeg (the default) or png, and max_edge 960. Use seek precise, the default, when the timestamp matters, such as the second a caption appears. Use fast for a quick pass: it moves each still to the keyframe at or before its instant.

For a 45-second ad, a frames object with at set to 1, 5, 10, 20, 30 and 44 gives six stills in a single call. The default mode is sync, which waits up to 30 seconds and returns 202 with a job to poll if it takes longer.

{
  "video_url": "https://media.sume.com/artifacts/artf_demo/ad.mp4",
  "frames": { "at": [1, 5, 10, 20, 30, 44], "max_edge": 960, "format": "png" }
}

What it will not tell you

The probe returns facts about the file, and the stills are samples, so they cannot prove every frame is legible. The page's other limits, 500 MB and 516 kbps, are file-level numbers. This post does not claim that the probe reports bitrate. Check the probe fields in your own result before you build a gate on them.

For a 3-minute Short, the 24-still cap means one still every 7.5 seconds at most, so pick your own timestamps for the moments that matter.

A review routine

Pick six timestamps before you call: the first second, the moment the product appears, each text overlay, and the final frame before the call to action. Send them once at max_edge 960 and open the stills side by side. If any text is unreadable at 540 wide, fix it upstream and re-render rather than re-inspecting. Inspect is billed by Modal compute, with no fixed number in the docs, so batching all six into one call is the sensible way to use it. Use the jpeg default for a quick look and png when you want to zoom into small type.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume