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.
- Use a frame from your footage as a reference for AI video
Pull a still at a time you pick with video frames (unbilled), then pass it as image_url or reference_image_urls to a Sume video model. Steps and limits.
- Remove background from video with AI: what Sume covers
Sume has no video background-removal endpoint: RMBG 1.0 takes a still image. What you can do instead is a prompt edit with video_to_video, or a crop.
- Replace video audio with an AI voice (and the lip-sync catch)
Sume has no one-call audio swap: detach the audio, transcribe it, make a new voice with TTS, and lay it on a Timeline. Lips will not re-sync to the new voice.
Written by Sume