Turn product photos into a silent video with Timeline static holds
Timeline 1.0 treats a still as a static hold, so product photos become a silent video with fades. Shopify lists MP4 up to 10 minutes; here is the request.

Timeline 1.0 accepts a still as a video[].source_url and holds it for the duration you set, so a set of product photos on media.sume.com becomes one silent MP4 with audio.mode set to silence. Shopify's product media page lists MP4 among accepted product video formats.
How does Timeline treat a photo?
The Timeline docs say stills are static holds: a motion field is accepted and ignored, with a motion_ignored warning that is not a failure. fit chooses cover (default), contain, stretch or blur, which decides what happens when a photo's ratio differs from the output.
What are the timing rules?
The first slot must start at 0, later starts must increase, and each duration is at least 0.2 seconds. Coverage may trail the audio length by at most 0.5 seconds. Transitions go on slots after the first, last up to 1 second and at most half the shorter neighbour.
| Field | Rule |
|---|---|
audio.mode | silence declares a length with no audio file |
video[0].start | Must be 0 |
video[].duration | At least 0.2 s |
transition.type | fade, wipeleft, wiperight, slideup, slidedown or dissolve |
video[] slots | 1 to 200 |
What does the request look like?
Three photos, three seconds each, a 0.25 second fade between them. Import each photo to media.sume.com first with POST /v1/media-imports.
curl -X POST https://api.sume.com/v1/timeline-1.0/render \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: photos-001" \
-d '{
"audio": { "mode": "silence", "duration_seconds": 9 },
"video": [
{ "source_url": "https://media.sume.com/artifacts/artf_demo/front.jpg",
"start": 0, "duration": 3 },
{ "source_url": "https://media.sume.com/artifacts/artf_demo/side.jpg",
"start": 3, "duration": 3,
"transition": { "type": "fade", "duration": 0.25 } },
{ "source_url": "https://media.sume.com/artifacts/artf_demo/back.jpg",
"start": 6, "duration": 3,
"transition": { "type": "fade", "duration": 0.25 } }
]
}'What does it cost and what does it not do?
A render is priced at $0.10 per output minute, rounded up (confirm live in GET /v1/catalog), and the reserve is ceil(audio.duration_seconds / 60) minutes, so nine seconds reserves one. There is no motion on a still, so this is a slideshow, not an animated product shot; for movement, generate a clip with POST /v1/videos. Shopify's page read on 2026-09-30 also caps hosted video at 1 GB, so check the file size.
Sources
Related posts
More in Use cases
- Pull product stills from a video with the video-frames API
Video frames returns jpeg or png stills from a Sume-hosted clip at set seconds. Google lists 500 x 500 minimum, so extract from the clip before captions.
- Shopify's recommended 2048 x 2048 product image with gpt-image-2.5
Shopify.dev recommends 2048 x 2048 px for product images. That is a valid custom image_size on Sume's gpt-image-2.5: 2048 is a multiple of 16 and 4,194,304 px.
- Shopify image max 4472 x 4472 px: what Sume's image API outputs
Shopify.dev caps product images at 20 MB and 4472 x 4472 px. gpt-image-2.5 on Sume stops at a 3840 edge and 8,294,400 pixels, so it sits under the pixel cap.
- Shopify product video at 3840x2160: which Sume model lists 4K?
Shopify.dev caps product video at 3840x2160 (UHD/4K). Sume lists a 4K tier on gemini-omni-flash-1.1 for 3 to 10 seconds in 16:9 or 9:16. Request and checks.
Written by Sume