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.

When Black Friday ends on Nov 27 and Cyber Monday starts on Nov 30, 2026, you do not need new videos for the winners; you need a new last 3 seconds. On Sume, a Timeline render can keep the first 12 seconds of an existing ad and cut to a still end card, at $0.10 per render, and a caption job burns the new offer text for $0.20. For 40 ads that is 40 x $0.30 = $12.00, plus about $0.07 for one end-card image: $12.07 (prices read 2026-10-05).
The recipe
Timeline 1.0 takes a declared length and ordered video[] slots, and a slot can use source_in to start inside a clip and duration to stop early (Timeline docs). Stills are accepted as static holds, so one end-card image is a slot. Declare the total length with audio.mode set to "silence" for ads with no audio. Every URL must already be a media.sume.com artifact.
Make the end card once. A plain background image from gpt-image-2.5 at high quality is $0.0659 for text-to-image, and the offer text goes on afterwards with caption cues, so the code and dates are exact. Putting text inside a generated image invites spelling errors.
A batch builder
The script builds one Timeline body per ad and prints the bill. It runs as written; swap in your own URLs and send each body to POST /v1/timeline-1.0/render with an Idempotency-Key that includes the ad id and the offer name.
import json
CARD = "https://media.sume.com/artifacts/demo/cyber-monday-card.png"
def new_tail(ad_url, body_seconds=12.0, card_seconds=3.0):
return {
"audio": {"mode": "silence", "duration_seconds": body_seconds + card_seconds},
"video": [
{"source_url": ad_url, "source_in": 0, "start": 0,
"duration": body_seconds},
{"source_url": CARD, "start": body_seconds, "duration": card_seconds,
"transition": {"type": "fade", "duration": 0.25}},
],
}
ads = ["https://media.sume.com/artifacts/demo/ad%02d.mp4" % n for n in range(1, 41)]
bodies = [new_tail(u) for u in ads]
print(len(bodies), "renders =", round(len(bodies) * 0.10, 2), "USD")
print("with $0.20 cues:", round(len(bodies) * 0.30, 2), "USD")
print(json.dumps(bodies[0]["video"][1]))
What this costs and what it skips
Timeline bills $0.10 per output minute, rounded up, so a 15 s ad is $0.10. The caption job covers videos of 60 seconds or less (caption docs).
| Line | Unit price | Count | Total |
|---|---|---|---|
| Timeline render, 15 s | $0.10 | 40 | $4.00 |
| Caption cues for new offer | $0.20 | 40 | $8.00 |
| End-card image, high quality | $0.0659 | 1 | $0.0659 |
| Total | $12.0659 |
The recipe skips ads with audio. A Timeline spine must be a Sume-hosted audio file, so a voiced ad needs its audio extracted or re-made first. For cutting an ad down to shorter versions instead, see one master, three cutdowns for 6 cents; for the all-in cost of finishing 100 ads, see captions, trim, Timeline and music priced.
Sources
Related posts
More in Media tools
- Tall phone screen recording to 9:16: crop height 0.8215 and a y offset
A 1170x2532 screen recording is taller than 9:16. Keep the full width, crop height 0.8215, and choose y to drop the status bar. Request and numbers.
- Tech review intro music: a 20-second sting and bed
Make a 20-second synth intro bed for a tech review channel that you can reuse in every video: one generation and a one-minute render, $0.225 on Sume.
- Thanksgiving recipe video music: a 60-second acoustic bed
Add a 60-second warm acoustic bed under a Thanksgiving recipe video with a lift at the plating shot: one generation and a one-minute render, $0.225 on Sume.
- Tighten a stitched Omni cut: source_in and duration per timeline slot
Cut the first half-second off each Omni clip without a trim job: source_in and a shorter duration per Sume timeline slot, with the starts and spine math.
Written by Sume