Turn a newsletter issue into a 60-second video: five stills, one voice
Convert one newsletter issue into a 60-second vertical video: one still per section, a 900-character voice-over, one render and captions. Cost per issue.

Give each of five sections a still, narrate a 900-character summary, and render it on Timeline 1.0 at about $0.38 per issue with captions, which is $19.74 for a weekly year. The video replaces nothing in the issue; it is a recap that points back to it.
Split the issue first
Take the section headings as scene titles and write one or two sentences for each. Keep the narration to the total character budget you chose: Sume's text to speech bills per character at $0.0475 per 1,000.
Cost per issue
Stills use GPT Image 2.5 at low quality, 1024 by 1024.
| Item | Qty | Subtotal |
|---|---|---|
| Stills, GPT Image 2.5 low | 5 | $0.036875 |
| Voice-over, 900 characters | 1 | $0.04275 |
| Timeline render, 60 s | 1 | $0.10 |
| Captions | 1 | $0.20 |
| Total per issue | $0.379625 |
Timing the slots
The slot starts must be strictly increasing, and video[0].start must be 0. Twelve seconds per section gives five slots across 60 seconds.
import json
sections = ["intro", "story", "tool", "chart", "link"]
SEG = 12
video = []
for i, name in enumerate(sections):
slot = {"source_url": f"https://media.sume.com/artifacts/artf_demo/{name}.png",
"start": i * SEG, "duration": SEG}
if i:
slot["transition"] = {"type": "slideup", "duration": 0.4}
video.append(slot)
body = {"audio": {"url": "https://media.sume.com/artifacts/artf_demo/issue.wav",
"duration_seconds": SEG * len(sections)}, "video": video}
print(len(video), body["audio"]["duration_seconds"])Keep the claims in the text
Charts and numbers from the issue should be drawn from your own data, not generated, since an image model can render a plausible but wrong chart. Use generated stills for mood and keep figures in captions you wrote.
Keeping it a recap
The video should drive readers to the issue, not replace it. End on a still that shows the issue title and the link in your own text, and put the link in the post that carries the video. If the issue is long, narrate only the three most useful items; a 900-character script is a starting point, not a guarantee of 60 seconds. Measure the spoken length of your first voice-over and set the Timeline duration to match it; a longer script would force you to cut slots or speed up the voice.
Related posts
More in Use cases
- Newsletter to audio: a 2,000-word issue costs about $0.57
A 2,000-word newsletter is about 12,000 characters, which fits one Sume TTS request under the 20,000 limit and bills $0.57. When to split, and a Python loop.
- Nonprofit donation appeal: a 15-second video from two Omni clips
A 15-second appeal in 9:16 is two Omni clips, 10 and 5 seconds, joined on Sume. $1.875 at 720p for both. Where to put captions, and what the watermark means.
- One captioned 15-second clip for Bluesky, Threads and WhatsApp status
Make one 15-second muted-friendly clip with burned-in captions and post the same file on Bluesky, Threads and a WhatsApp status. Model options and cost.
- One product photo, five ad shapes: Flux 2 Pro $0.1875, Qwen $0.125
Five shapes (1:1, 4:5, 9:16, 16:9, 21:9) from one photo: $0.1875 on Flux 2 Pro, $0.125 on Qwen Image, $0.50 on Nano Banana 2.1. Seedream 5 Lite lacks 21:9.
Written by Sume