Hook, demo, CTA: assemble a product ad from 3 clips in one render
Build a 15-second holiday product ad from a hook clip, a demo clip and a call-to-action card with one Sume timeline render. Plan first, render second.

A short product ad is usually three beats: a hook, a demo and a call to action. Make each as its own clip, so you can swap only the hook for a test, then join them with POST /v1/timeline-1.0/render. One audio spine sets the length, video[] lists the clips in order with their start times, and a fade between slots smooths each cut. It costs $0.10 per output minute, rounded up, and the plan call is free.
What goes in the document?
| Field | Rule |
|---|---|
| audio.url + audio.duration_seconds | One Sume-hosted spine; duration 1 to 1800 s sets the output length |
| video[].source_url | A clip or still already on media.sume.com; import others with POST /v1/media-imports |
| video[].start | video[0].start must be 0; later starts must increase |
| video[].transition | On slots after the first: fade, wipeleft, wiperight, slideup, slidedown or dissolve; 1 s at most |
| soundtrack | Optional bed with gain_db, loop, fade_out_seconds up to 10 and duck_db 0 to 20 |
| Output | Default 1080 x 1920 MP4; fps 24, 25, 30 or 60; omit fps to match the sources |
What does the request look like?
Three slots on a 15-second spine: a hook from 0 to 3 s, the demo from 3 to 12 s and the call-to-action card from 12 to 15 s. Declared starts are authoritative, so check that each start equals the previous start plus its duration. A video slot can trail the spine by at most 0.5 seconds.
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: hdc-ad-001" \
-d '{
"audio": { "url": "https://media.sume.com/artifacts/artf_demo/voice.wav", "duration_seconds": 15 },
"video": [
{ "source_url": "https://media.sume.com/artifacts/artf_demo/hook.mp4", "start": 0, "duration": 3 },
{ "source_url": "https://media.sume.com/artifacts/artf_demo/demo.mp4", "start": 3, "duration": 9,
"transition": { "type": "fade", "duration": 0.25 } },
{ "source_url": "https://media.sume.com/artifacts/artf_demo/cta.png", "start": 12, "duration": 3,
"transition": { "type": "fade", "duration": 0.25 } }
]
}'How do I swap only the hook?
Keep the demo and call-to-action URLs fixed and change video[0].source_url. Each render is a separate job with its own Idempotency-Key, so give each variant a different key such as hdc-ad-001-hookB. The same key with the same body returns the original job and does not charge again.
When do I add captions?
Add them last. POST /v1/video-captions runs on a finished video up to 60 seconds and costs $0.20 per job, so run it on the winner and not on every draft. Captions on a video without speech fail with caption_no_speech.
What are the limits?
- The timeline joins; it does not generate. The three clips come from your own footage, a Format run or the video router.
- A still is a static hold, and a motion setting on a still is ignored with a
motion_ignoredwarning. - A source shorter than its slot is padded or looped with a soft warning, not a failure, so read
warnings[]in the result. - All URLs must be in your workspace on media.sume.com.
POST /v1/timeline-1.0/planreturns the estimated cost and segment count without creating a job; it cannot predict pad or loop warnings.
Sources
Related posts
More in Media tools
- hypit boundaries: cut candidates and the 0.1 threshold
hypit boundaries scores possible cuts from a 12 fps 32x32 difference pass. What rate and threshold do, and how it differs from reference ingest's shot list.
- Word-level transcript with confidence scores: hypit transcribe
hypit transcribe returns each word with start, end and a 0-1 score using WhisperX, or Sume STT 1.0 without scores. Engines, checkpoints, billing and errors.
- Keyframe trim starts early: fix it with actual_start_seconds
A video-trim with precision keyframe can begin a GOP before your start time. The result reports actual_start_seconds; use it to re-base the next step.
- Korean caption styles compared: weight-shift to editorial-emphasis
Sume has six Hangul caption identities plus korean-ad. Compare black-outline, weight-shift, highlight, pill-karaoke, clip-wipe and editorial-emphasis.
Written by Sume