Product still on the top half of a Reel: Timeline compose stack
Timeline compose stacks one still and one video in a 1080x1920 shot for $0.02 flat: ratio 0.1 to 0.9, overlay position, and the 300-second ceiling.

Sume's Timeline compose puts one still and one video on screen at the same time and returns one MP4, for a flat $0.02 per job. The stack operation tiles the two in a split of your choice, with the still's share set by ratio from 0.1 to 0.9; the default is a half-banner with the still on top at 0.5. Output is 1080x1920 unless you set it, which is the shape a Reel wants.
Stack or overlay
Required fields are operation (stack or overlay), image.url and video.url, all on your media host, plus an Idempotency-Key. Output length always comes from the video layer, capped at 300 seconds, and the still is held for the whole clip.
| Key | stack | overlay |
|---|---|---|
| split | horizontal or vertical | not allowed |
| image_region | top, bottom, left or right (matching the split) | not allowed |
| ratio | still share, 0.1 to 0.9 | not allowed |
| position | not allowed | top, center or bottom |
| width_ratio | not allowed | 0.05 to 1 (default 0.9) |
| image_fit / video_fit | cover, contain, stretch | video_fit only |
A request
The video audio passes through; a mute video is a warning (compose_video_has_no_audio), not a failure, and the Timeline spine supplies audio later.
import os, requests
r = requests.post(
"https://api.sume.com/v1/timeline-1.0/compose",
headers={
"Authorization": "Bearer " + os.environ["SUME_API_KEY"],
"Idempotency-Key": "compose-001",
},
json={
"operation": "stack",
"image": {"url": os.environ["STILL_URL"]},
"video": {"url": os.environ["CLIP_URL"]},
"layout": {"split": "horizontal", "image_region": "top", "ratio": 0.4},
"output": {"width": 1080, "height": 1920},
},
)
r.raise_for_status()
print(r.json().get("request_id"))Place it in the Reel
Take video_url from the result and use it as a slot in Timeline 1.0 video[]. Setting compose output.width and output.height to the timeline's size avoids rescaling twice. Instagram's Reels guide (read 2026-10-03) suggests tutorials of 15 to 60 seconds, which fits a product still pinned above a demo clip.
What Sume does not do
Compose handles one still and one video. It does not animate the still, accept text, or stack more than two layers. A clip longer than 300 seconds has to be trimmed first.
Sources
Related posts
More in Media tools
- Pull still frames from an AI video: Sume video-frames, at or fps
POST /v1/video-frames returns images at exact timestamps or at up to 2 fps. Request shape, the ready poll, and limits for a clip up to 300 seconds.
- Pull the voiceover out of a Reel MP4: audio detach, wav or mp3
To reuse the voice from a finished Reel, detach its audio for $0.01: wav by default, mp3 optional, a range up to 900 s, and a clean error for silent files.
- Reel music bed: prompt section markers for a 3-minute Reel
Music Router rejects a duration field, so steer length in the prompt. Write [0:00-0:30] section markers for a 3-minute Reel bed and loop it in Timeline.
- Reel voiceover too long for 60 seconds? Speed setting and re-render
A 68-second TTS read against a 60-second Reel: Sume accepts generation_config.speed from 0.6 to 1.5. The arithmetic, and when a rewrite is better.
Written by Sume