How many TTS jobs a script needs: the 20,000-character cap and cost
Sume TTS takes up to 20,000 characters a job at $0.0475 per 1,000. A table of jobs and cost for 3,000 to 100,000 characters, plus a paragraph-safe splitter.

A script of up to 20,000 characters fits one Sume text-to-speech job, and longer scripts need one job per 20,000-character chunk or less. The pricing page, read 2026-10-03, lists Text to speech at $0.0475 per 1,000 characters, counts spaces and punctuation, and gives a maximum of 20000 characters. So a 60,000-character script is at least three jobs and $2.85 at list rate.
What does each script length cost?
Cost is linear in characters, so splitting does not change the price; it only changes how many jobs you track. The table rounds jobs up, assuming you chunk at the cap.
| Script characters | Minimum jobs | List-rate cost |
|---|---|---|
| 3,000 | 1 | $0.143 |
| 20,000 | 1 | $0.95 |
| 45,000 | 3 | $2.138 |
| 60,000 | 3 | $2.85 |
| 100,000 | 5 | $4.75 |
How do I split without cutting a sentence?
Split on paragraph breaks, not at character 20,000. The function below packs whole paragraphs into each chunk and prints the job count, so you can check the plan before spending anything. Pass each chunk to its own TTS job with its own idempotency key, then join the takes with Timeline audio concat, which accepts 1 to 20 parts and joins in the sample domain with no gap at the seams.
def chunk(text, limit=20000):
parts, current = [], ""
for paragraph in text.split("\n\n"):
candidate = (current + "\n\n" + paragraph) if current else paragraph
if len(candidate) <= limit:
current = candidate
else:
if current:
parts.append(current)
current = paragraph
if current:
parts.append(current)
return parts
script = "\n\n".join(["A paragraph of narration. " * 40] * 60)
parts = chunk(script)
print(len(script), "characters ->", len(parts), "jobs")
print([len(p) for p in parts])
What does the cap not tell you?
- A character cap is not a length cap. The related post on the 1,200-second limit covers how long a job can run, and I did not re-verify that figure on a public page today.
- Characters are counted the way the pricing note says, with spaces and punctuation. If your script has emoji or Hangul, count the way the API does before you trust your own total.
- More than 20 chunks means more than one concat job, because concat takes at most 20 parts.
Sources
Related posts
More in Pricing
- TTS price per minute of speech: five vendors at 750 characters
At 750 characters a minute: Deepgram Aura-2 $0.0225, ElevenLabs v3 $0.06, Hume $0.0375 to $0.1125, Sume $0.0356. Per-character prices converted.
- Weekly Twitch highlight budget: 3-hour VOD to 6 clips
Transcribe a 3-hour VOD, trim six highlights, caption them and render a reel for about $3.28 a week or $13.12 a month at Sume list rates, plus setup.
- Cost of a 90-second Sume edit pipeline: trim, detach, filter, render
Trim is $0.02, audio detach $0.01, a filter encode $0.02, and a timeline render $0.10 per output minute rounded up. Two minutes of output adds up to $0.25.
- Video inspect transcribe: per-minute STT add-on, 10-minute cap
Adding transcribe true to a Sume video inspect adds $0.01 per audio-minute of your duration hint, one minute if omitted, up to 10 minutes.
Written by Sume