Instagram API: JPEG only, no MPO or JPS. Stills from a video frame
Meta's publishing guide says JPEG is the only image format and MPO and JPS are not supported. Sume video-frames returns jpeg by default, or png.

Ask video-frames for format: "jpeg", its default, and send that still to Instagram. Meta's guide says "JPEG is the only image format supported. Extended JPEG formats such as MPO and JPS are not supported," so a png still from the same route would not qualify as is.
What does Meta say?
The relevant line is short and absolute, and the same guide adds the carousel and rate limits used in the sibling posts.
| Item | Value | Where |
|---|---|---|
| Supported image format | JPEG only | Meta content publishing guide |
| Not supported | MPO, JPS | Meta content publishing guide |
| Sume formats | jpeg (default) or png | Video frames docs |
How do I get a JPEG from a clip?
POST /v1/video-frames returns durable media.sume.com image artifacts for the times you name. format is jpeg unless you set png. Poll GET /v1/video-frames/:id and read frames[{t,url,width,height}].
curl -X POST https://api.sume.com/v1/video-frames \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: ig-still-001" \
-d '{
"video_url": "https://media.sume.com/artifacts/artf_demo/clip.mp4",
"at": [2],
"format": "jpeg"
}'Will a Sume JPEG ever be an MPO?
Sume's docs do not describe the JPEG variant beyond the jpeg value, and they say nothing about MPO or JPS. Confirm the type of the file you download, since only Meta decides what its publish call accepts.
What if I only have a PNG?
Re-run the extract with format: "jpeg". The route is unbilled, and a new request needs a new Idempotency-Key. Frames are limited to 24 per call and to sources of 300 seconds or less.
Which frame times work well for stills?
Pick times you can name. at[] takes 1 to 24 values in seconds, each at least 0 and below the duration, and an out-of-range value fails the job as frame_time_out_of_range and reports the probed length. If you would rather sample than choose, fps up to 2 samples mid-bin times and is capped at 24 frames.
A single failed instant comes back with url null without failing the whole job, so check each entry before you publish.
- Use
atfor a chosen moment such as a product reveal. - Use
fpsto sample a clip evenly. - Keep
max_edgeunset to keep the source frame size, or set 16 to 2160 to clamp the long edge.
Sources
Related posts
More in Use cases
- Instagram carousel limit of 10: make 10 stills from one video
Meta's guide limits carousels to 10 images, videos or a mix, and 100 API posts per 24 hours. Sume video-frames takes up to 24 times per call, so pick 10.
- Instagram carousel crops to the first image: crop stills to match
Meta says carousel images are cropped based on the first image, default 1:1. Sume video-filter crop, then video-frames, gives stills that share one shape.
- Instagram Feed video ad 9:16 at 1080x1920: size and 1% tolerance
Meta lists 9:16 at 1080 x 1920 for Instagram Feed video ads with a 1% tolerance. Sume 9:16 settings and a Timeline output that fit, with the arithmetic.
- Instagram 3-second minimum for Reels: check clips before publishing
Meta lists Reels at 3 seconds minimum, but Sume video-trim accepts down to 0.2 s. Read duration_seconds from the trim result before you publish.
Written by Sume