Put a slide above an AI presenter with Timeline compose: $0.02 a shot
Stack a still slide on top and a talking avatar video below in one MP4 with Sume Timeline compose. The flat price is $0.02 per job. Request and layout inside.

Use POST /v1/timeline-1.0/compose with operation 'stack': the slide goes on top and the avatar video below, in one MP4. The public rate is $0.02 flat per job, with no model inference, because it only runs ffmpeg on the worker.
What you need first
Compose takes one still and one video and returns one shot. Putting several shots in sequence is the job of Timeline 1.0.
- A still (the slide) and a video (the avatar clip), both already on media.sume.com for your workspace. Import files first with POST /v1/media-imports.
- An Idempotency-Key header, which is required.
- The slide must probe as a still and the clip as video, or the job fails with compose_image_not_still or compose_video_not_video.
The request
The field that picks stack or overlay is operation. The default layout is a half-banner: slide on the top half, video on the bottom half. ratio is the slide's share of the frame, from 0.1 to 0.9, and the video gets the remainder.
import json, os, urllib.request
body = {
"operation": "stack",
"image": {"url": os.environ["SLIDE_URL"]},
"video": {"url": os.environ["CLIP_URL"]},
"layout": {"split": "horizontal", "image_region": "top", "ratio": 0.4},
"output": {"width": 720, "height": 1280, "fps": 25},
"mode": "sync",
}
req = urllib.request.Request(
"https://api.sume.com/v1/timeline-1.0/compose",
data=json.dumps(body).encode(),
method="POST",
headers={
"Authorization": f"Bearer {os.environ['SUME_API_KEY']}",
"Content-Type": "application/json",
"Idempotency-Key": "slide-presenter-001",
},
)
with urllib.request.urlopen(req, timeout=40) as r:
print(r.status, r.read().decode()[:300])Layout choices
With mode sync, Sume waits up to 30 seconds for a finished job and returns 200; otherwise you get 202 and poll the job. The output length comes from the video: the still stays on screen for the whole clip.
| Key | Allowed values | Note |
|---|---|---|
| split | horizontal or vertical | Horizontal puts one region above the other |
| image_region | top or bottom (horizontal); left or right (vertical) | A wrong axis returns compose_image_region_wrong_axis |
| ratio | 0.1 to 0.9 | The slide's share; the video gets the rest |
| image_fit / video_fit | cover, contain or stretch | blur is not a compose fit |
Cost of a slide deck
A 10-slide explainer, one avatar clip per slide, is 10 compose jobs at $0.02 each, so 10 x $0.02 = $0.20 on top of the avatar render. Ten 12-second clips at standard quality are 10 x 12 x $0.184 = $22.08 before any per-job rounding. The total is about $22.28.
What to do
Start with one slide, one 8-second clip and ratio 0.4. If the presenter's face is too small, move ratio down to 0.3 or switch to the overlay operation. Put the finished shots into a Timeline 1.0 video array to assemble the deck.
Sources
Related posts
More in Media tools
- Sneaker drop teaser: six clips, slideup cuts, one Timeline render
Cut six sneaker clips into one 18-second drop teaser with slideup transitions and a music bed: one Sume Timeline render, $0.10, with a free plan call first.
- Soft drop shadow under an AI product cutout with Pillow
Give a transparent product PNG from Sume a soft drop shadow: copy the alpha, blur it, offset it, tint it, then composite. Parameters for subtle and heavy looks.
- soundtrack_fade_exceeds_output: a bed fade longer than a short clip
Sume rejects soundtrack.fade_out_seconds longer than audio.duration_seconds. The fade also caps at 10 s. For a 6 s Short, use a 1 to 2 s fade.
- Timeline output size: 256 to 2160 per side, so no 3840x2160
Sume Timeline 1.0 takes even output width and height from 256 to 2160, default 1080x1920. What that means for 4K, 2560x1080 ultrawide and portrait masters.
Written by Sume