Gemini 3.8 Flash TTS takes 8,192 input tokens: splitting a long script
Gemini 3.8 Flash TTS lists 8,192 input tokens and 16,384 output tokens. Sume TTS takes 20,000 characters per job. Here is how to split a long script.

Gemini 3.8 Flash TTS lists an input limit of 8,192 tokens and an output limit of 16,384 tokens on its model page, so a long narration needs to be split into several requests. Sume TTS 1.0 accepts 1 to 20,000 characters per job and fails audio over 1,200 seconds.
The limits side by side
Older posts said Google named no text limit; the current model page now does.
| Item | Gemini 3.8 Flash TTS | Sume TTS 1.0 |
|---|---|---|
| Input | 8,192 tokens | 1 to 20,000 characters |
| Output | 16,384 tokens | Audio up to 1,200 s, else tts_duration_exceeded |
| Unit | Tokens | Characters |
Split on sentence boundaries
Tokens are not characters, so do not guess a character cutoff for Gemini. Count tokens with Google's tooling and leave headroom. Split at sentence or paragraph ends so each clip starts and stops naturally, and keep the same voice and style text on every request.
Google treats the text as a verbatim transcript, per the speech generation docs, so keep style direction in the style field rather than the text, or it may be read aloud in every chunk.
On Sume
A 20,000-character ceiling covers most ad and explainer scripts in one job. Beyond that, split the script and join the clips with timeline audio, which concatenates 1 to 20 parts for a flat $0.01 per job (timeline audio docs). That is a published limit, not a promise about how seams sound: listen to every join.
Sume does not split text for you. You choose the break points.
Sources
Related posts
More in Developers
- Gemini TTS streams raw PCM; Sume returns a finished wav or raw file
Gemini 3.8 Flash TTS streams headerless audio/l16 at 24 kHz. Sume returns a hosted file from an async job. Wrap the PCM in WAV and match the formats.
- Omni Flash 4K, 10 seconds: a webhook-mode /v1/videos request body
One curl body for gemini-omni-flash-1.1 at 4K, 16:9, 10 seconds with audio and a callback_url, plus what the docs say the submit reserves and what it cannot.
- Gemini Omni Flash edit on Sume: a Python preflight for bad fields
A 29-line Python preflight for Sume video-router edit requests on gemini-omni-flash-1.1: catches the fields the docs say it rejects before you pay for a job.
- Two failure channels in the Sume SDK: submit error vs failed job
A generateVideoV1 error means no job exists; a failed job means one did and billing was settled. Handle both channels in TypeScript without double-submitting.
Written by Sume