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.

A 2,000-word newsletter issue turns into audio for about $0.57 on Sume TTS. At a rough six characters per word including spaces (my planning assumption), the issue is around 12,000 characters, under the 20,000-character limit per request, so it is one job.
Issue size to bill
| Words | Characters (assumed) | Requests | Sume TTS |
|---|---|---|---|
| 500 | 3,000 | 1 | $0.1425 |
| 2000 | 12,000 | 1 | $0.57 |
| 3500 | 21,000 | 2 | $0.9975 |
| 5000 | 30,000 | 2 | $1.425 |
Splitting longer pieces
Above 20,000 characters, split on paragraph boundaries, not mid-sentence, so each file starts clean. Then join the files without a gap using Timeline audio concat, which accepts 1 to 20 ordered parts and joins in the sample domain with no re-synthesis.
import os, re, requests
text = open("issue.txt", encoding="utf-8").read()
chunks, cur = [], ""
for para in re.split(r"\n\s*\n", text):
if len(cur) + len(para) + 2 > 18000 and cur:
chunks.append(cur); cur = ""
cur += para + "\n\n"
if cur.strip():
chunks.append(cur)
for i, c in enumerate(chunks):
r = requests.post("https://api.sume.com/v1/tts-1.0/generate",
headers={"Authorization": "Bearer " + os.environ["SUME_API_KEY"],
"Idempotency-Key": f"nl-issue-12-part-{i}"},
json={"transcript": c.strip(), "voice": {"id": os.environ["VOICE_ID"]}})
print(i, len(c), r.status_code)Practical notes
A single TTS job that would run longer than 1,200 seconds of audio fails with tts_duration_exceeded, so keep very dense parts well under the 20,000-character cap. TTS is an asynchronous job; poll the job or take a webhook, then read the mirrored audio artifact. A stable Idempotency-Key per part means a retry returns the first job instead of charging twice.
Weekly for a year is $29.64 of voice at the 12,000-character size. The recurring cost is the human review of how it reads aloud, not the API.
Related posts
More in Use cases
- 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.
- Photographer portfolio reel from stills with Omni Flash
Turn 10 portfolio photos into a 60-second reel with Gemini Omni Flash: six seconds each, $7.50 at 720p on Sume, with 360p drafts first at $2.25.
Written by Sume