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 audio hour: $15, $22 and $47.50 per 1M characters
Per-million-character prices hide the hourly cost. At a stated 900 characters a minute, Flash, MAI-Voice-2.1 and Sume come to $0.81, $1.19 and $2.57 an hour.
- 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.
- 20 AI b-roll clips: cost by model and resolution on Sume
Twenty 6-second b-roll clips cost $1.50 to $170.59 on Sume by model; Wan 3.0 or Omni at 720p is $15.00. Per-second rates, retakes and a mixed pack.
- Two-hour webinar transcript: Sume STT $1.20 in 12 jobs vs other rates
A 2-hour webinar is 12 Sume STT jobs of 10 minutes for $1.20. Other vendors list $0.30 to $0.90 for the same two hours. Python planner included.
Written by Sume