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.

To cut six sneaker clips into one drop teaser, send them to POST /v1/timeline-1.0/render as six video[] slots, give every slot after the first a transition of type slideup, and set the audio to mode: silence with a soundtrack bed. An 18-second teaser is one output minute, so the render is $0.10. The plan call that checks the program first is free.
A drop teaser lives or dies on rhythm: six short shots, a hard movement between them, and a bed that does not fight the product. Timeline gives you all three in one declarative document, and you never write an ffmpeg graph.
The program
Each slot has source_url, start (the on-spine start), duration (at least 0.2 seconds) and an optional transition. video[0].start must be 0, later starts must increase, and the first slot cannot carry a transition (transition_on_first_segment). The six transition types are fade, wipeleft, wiperight, slideup, slidedown and dissolve. A transition lasts at most 1 second and at most 50% of the shorter neighbouring slot.
For a three-second slot that makes 1.5 seconds the ceiling, so a 0.4-second slide is well inside the rule. More than 8 adjacent transitions are refused with too_many_chained_transitions; six clips need five, so you have room for a hard cut or two if the edit asks for it.
| Item | Value | Sume price |
|---|---|---|
| Slots | 6 clips, 3 s each, starts 0, 3, 6, 9, 12, 15 | included |
| Transitions | 5 x slideup, 0.4 s each | included |
| Spine | audio.mode silence, duration_seconds 18 | included |
| Plan call | POST /v1/timeline-1.0/plan | $0.00 |
| Render | ceil(18 / 60) = 1 output minute | $0.10 |
Do not force a frame rate
Frame rate is the quiet way a teaser goes wrong. If you omit output.fps, the job renders at the rate of the sources, and the longest video source decides. If you force a rate that differs from a source, the job repeats or drops a frame every few frames and the product judders on a slow orbit. The job reports it as the warning output_fps_resamples_sources, together with the rate the sources wanted.
So shoot all six clips at the same rate, leave output.fps out, and set it to 24, 25, 30 or 60 only when every clip was shot at that rate. The default size is 1080 by 1920, which fits a vertical drop without any extra fields.
The bed goes in soundtrack: url, gain_db, loop and fade_out_seconds (up to 10). duck_db is not available here, because ducking needs a real audio spine and silence has none; the API refuses it with duck_requires_audio_spine. For a music-only teaser you do not need it.
Plan, then render
import os
import uuid
import requests
API = "https://api.sume.com/v1/timeline-1.0"
H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
clips = [os.environ[f"CLIP_{i}"] for i in range(6)] # media.sume.com URLs
video = []
for i, url in enumerate(clips):
slot = {"source_url": url, "start": i * 3, "duration": 3}
if i:
slot["transition"] = {"type": "slideup", "duration": 0.4}
video.append(slot)
body = {
"audio": {"mode": "silence", "duration_seconds": 18},
"video": video,
"soundtrack": {"url": os.environ["BED_URL"], "fade_out_seconds": 2},
}
plan = requests.post(f"{API}/plan", headers=H, json=body, timeout=60).json()
print(plan.get("billable_minutes"), plan.get("estimated_cost_usd_micros"))
r = requests.post(f"{API}/render", json=body, timeout=60,
headers={**H, "Idempotency-Key": f"drop-{uuid.uuid4()}"})
print(r.status_code, r.json().get("request_id"))
Result, warnings and import
Render is async by default and returns 202; poll GET /v1/jobs/:id/status and read GET /v1/jobs/:id/result, which carries video_url, duration_seconds, segment_count and billable_minutes. Soft warnings such as snapped transitions arrive in warnings[] and are not failures. If a slide arrives as a hard cut, read the warning before you debug the source; the case is covered in the downgraded crossfade post.
Clips must be this workspace's media.sume.com artifacts or assets, so import phone or camera files with POST /v1/media-imports first. The plan call checks the schema and the host rule without downloading anything, so a typo in a URL fails before you pay for a minute.
Scale the budget by count of teasers, not by clip count: ten colourways, each its own 18-second render, is ten minutes, or $1.00 on the same rate. A 61-second cut would bill two minutes, which is why the plan call returns billable_minutes before you commit.
Pacing is yours to choose, and the limits are generous: slots can be as short as 0.2 seconds, so a fast drop of twelve 1.5-second shots is also one minute. Keep each transition within the 50% rule, and keep the last slot covering the spine to within half a second, because coverage may stop at most 0.5 seconds before the end.
Finally, give the bed room to end. soundtrack.fade_out_seconds takes up to 10, and output.fade_out_seconds (0 to 5) fades the picture as well; the two fades together must not exceed the output length, or the job is refused with an edge-fade code before it starts.
Sources
Related posts
More in Media tools
- 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.
- Swap the offer tail on 40 winning video ads for Cyber Monday: $12.07
Keep the first 12 s of 40 Black Friday winners, cut to a new end card in Timeline at $0.10 each, and burn the Cyber Monday code with $0.20 cues: $12.07 in all.
Written by Sume