Half-banner video: a still stacked over a clip for $0.02
Sume timeline compose stacks one still and one video in a single frame for a flat $0.02 per job. Layout ratio, overlay mode, 300 s ceiling and a ready request.

To put a banner image above a video, call POST /v1/timeline-1.0/compose with operation: "stack". The job costs a flat $0.02, the output length comes from the video layer, and the ceiling is 300 seconds (Timeline compose).
Request
The defaults are horizontal split, still on top, ratio 0.5. Here the still takes 30% and the video the remainder, at 720x1280.
curl -X POST https://api.sume.com/v1/timeline-1.0/compose \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: halfbanner-001" \
-d '{
"operation": "stack",
"image": {"url": "https://media.sume.com/artifacts/artf_demo/banner.png"},
"video": {"url": "https://media.sume.com/artifacts/artf_demo/talk.mp4", "duration": 20},
"layout": {"split": "horizontal", "image_region": "top", "ratio": 0.3},
"output": {"width": 720, "height": 1280}
}'Stack vs overlay
| Layout key | stack | overlay |
|---|---|---|
split | horizontal or vertical | not allowed |
ratio | Still's 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 |
| Fits | image_fit and video_fit | video_fit only |
Gotchas
- The still never lengthens the clip; it holds for the whole video layer.
- A mute video is a warning (
compose_video_has_no_audio), not a failure. - Mixing stack and overlay keys is a 400.
left/righton a horizontal split givescompose_image_region_wrong_axis. - Feed the output to Timeline 1.0
video[]; setoutput.width/heightto the target to avoid a second rescale.
Worked example: the 30% banner
With ratio: 0.3 on a 720x1280 output the still takes 30% of the height, 384 px, and the video gets the exact remainder, 896 px. The default ratio of 0.5 would split it 640 and 640. The price is the same $0.02 whether the clip is 5 or 300 seconds, because the rate is flat per job.
The default output is 1080x1920 at the frame rate of the video layer. Set output.width and output.height to the timeline you assemble into so the shot is not rescaled a second time. Both the still and the video URL must be media.sume.com artifacts or assets of your workspace; import other files first, or you get unsupported_media_source.
Sources
Related posts
More in Media tools
- Holiday music bed under a voice: soundtrack duck_db 0 to 20
Sume Timeline takes a soundtrack bed with gain_db, loop, fade_out_seconds up to 10 and duck_db 0 to 20 under a voice spine. Python plan call and errors.
- How many words fit a 5 to 14.8 s lip-sync segment: measure first
At the 2.8 words a second Sume's avatar planner assumes, 5 to 14.8 s is 14 to 41 words. TTS pace varies: measure the audio before setting duration_seconds.
- Instagram Reels borders and logos: crop them off with video filter
Instagram lists Reels with borders, logos or watermarks among those shown less. Crop a border off with Sume video filter, using fractions, and check it free.
- Is a 180 second video still a YouTube Short? Trim to 179.5 for margin
YouTube's Shorts page says up to 3 minutes. It says nothing on rounding, so cut to 179.5 s with Sume video trim (duration accepts decimals, $0.02 a job).
Written by Sume