Sora thumbnail and spritesheet variants: use Sume video frames
Sora's ?variant=thumbnail and spritesheet downloads went away with the API. On Sume, POST /v1/video-frames with at[] or fps returns durable still images.
Sume has no thumbnail or spritesheet endpoint, but POST /v1/video-frames rebuilds both. Name times with at[] for a thumbnail, or set fps for a contact sheet's worth of stills, and you get durable image artifacts back.
Sora's guide said each completed video had a thumbnail and a sprite sheet, selected by variant on the content download. It also says the Sora 2 models and Videos API shut down on September 24, 2026. Sume facts are from Video frames; read 2026-09-30.
What did the Sora variants return?
The guide shows variant=thumbnail saving a .webp and variant=spritesheet saving a .jpg; the default is variant=video for the MP4. It describes them as lightweight assets for previews, scrubbers or catalog displays.
How do I get a thumbnail on Sume?
Video frames takes one workspace media.sume.com clip plus a program. Import the clip first with POST /v1/media-imports; off-host URLs are rejected. Then ask for a time, for example "at": [0]. The docs allow 1-24 values, each at least 0 and inside the clip's duration. format is jpeg (default) or png, and max_edge (16-2160) clamps the long edge.
curl -X POST https://api.sume.com/v1/video-frames \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: thumb-001" \
-d '{
"video_url": "https://media.sume.com/artifacts/artf_demo/talk.mp4",
"at": [0, 2.5],
"max_edge": 480
}'How do I get a sprite-sheet equivalent?
Use fps instead of at[] (send exactly one). It must satisfy 0 < fps <= 2, samples land at the middle of each time bin, and the result is capped at 24 frames. Sume returns separate images, not a packed sheet, so tile them yourself if you need one image.
What changes from the Sora flow?
| Aspect | Sora variant download | Sume video frames |
|---|---|---|
| Call | GET .../content?variant=... | POST /v1/video-frames then GET /v1/video-frames/:id |
| Output | One .webp or .jpg | Up to 24 frames[{t,url,width,height}] |
| Lifetime | Not stated for variants | Durable artf_ images |
| Billing | Not stated on the page | Unbilled |
| Source | Video from the same API | Any imported media.sume.com clip up to 300 s |
Where can I read more?
The general walkthrough is extract video frames with the API; picking a Shorts thumbnail shows the max_edge choice.
Sources
Related posts
More in Developers
- Sora video.completed webhook to Sume job.completed
Sora emitted video.completed and video.failed. Sume sends job.completed, job.failed and job.canceled with an x-sume-webhook-signature header. Map the handler.
- Sora Videos API replacement: seconds and size on Sume
OpenAI removed the Videos API on 2026-09-24. Map its seconds and size fields to Sume's duration, resolution and aspect_ratio; size returns 400 on Sume.
- Speech to text custom vocabulary: Sume STT takes a language hint only
Gemini 3.5 Transcribe biases up to 1,000 custom terms. Sume STT has no vocabulary field, only a language_code hint, so fix names after transcription.
- Standard Webhooks headers vs Sume sume-v1: a header map
Sume does not send webhook-id, webhook-timestamp or webhook-signature. It sends x-sume-webhook-* headers with a sume-v1 hex signature. Use verifyWebhook.
Written by Sume