Sume TTS tts_duration_exceeded: splitting a script over 1,200 seconds

Sume TTS fails audio longer than 1,200 seconds with tts_duration_exceeded, and caps a request at 20,000 characters. Split at paragraph breaks and rejoin.

4 min readSume
All posts

Sume TTS rejects a request over 20,000 characters, and fails a job whose audio would run longer than 1,200 seconds (20 minutes) with tts_duration_exceeded. Split the script at paragraph breaks into several requests, each under both limits, then join the results.

Sume does not publish a characters-to-seconds conversion, so measure the speaking rate of your voice on a short test before you pick a chunk size.

The two ceilings

They apply per request.

Sume TTS 1.0 per-request ceilings, from the API reference (read 2026-10-07)
LimitValueWhat happens beyond it
Transcript length20,000 charactersThe request is rejected
Audio length1,200 secondsThe job fails with tts_duration_exceeded

A split-and-join plan

The steps are mechanical.

  • Measure: run a 500-character sample, read the finished duration, and compute characters per second for that voice and speed.
  • Size: choose a chunk with a margin under 1,200 seconds. Slower speeds, such as 0.6, lengthen the audio for the same characters.
  • Split at paragraph or chapter breaks, never mid-sentence, so the joins sit in natural pauses.
  • Submit each chunk as its own job with its own Idempotency-Key, in wav so the seams stay clean.
  • Join the finished files with timeline audio, at most 20 parts per call, for $0.01.

What it costs

TTS is $0.0475 per 1,000 characters, rounded up to the cent per job, so splitting a long script costs about the same as one long job plus a small rounding gap. Four 20,000-character requests are 95 cents each, or $3.80, and the join is another cent. Chunks of around 1,000 characters or more keep the rounding loss small.

Keep one voice and setting

Use the same voice, language, speed and emotion string for every chunk, or the join will be audible. If you need chapter markers afterwards, ask each job for word timestamps and add the previous parts' durations to the offsets. The jobs and results guide shows how to fetch each finished result.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume