▲ 3 r/TextToSpeech+2 crossposts

Has anyone achieved consistent voice identity with Gemini 3.1 Flash TTS for long-form narration?

Hi everyone,
I’m currently researching Gemini 3.1 Flash TTS Preview as the primary TTS engine for a long-form audiobook/storytelling application.
So far, the biggest challenge I’ve encountered is voice identity consistency.
My setup
Model: Gemini 3.1 Flash TTS Preview
Voice: Kore
Official Gemini API (Node.js)
Same API key
Same voice
Same prompt
Same text
Same parameters
The problem
When I generate exactly the same text multiple times, the voice does not change gender, but the voice identity changes noticeably.
I’m referring to subtle differences in:
Timbre
Tone
Speaking style
Delivery
Overall vocal character
It still sounds like “Kore,” but more like different recording sessions or different voice actors trying to imitate the same voice.
For long-form narration, this becomes very obvious after stitching multiple chunks together.
What I’ve already tested
I intentionally tested many different approaches:
Generating the exact same text multiple times
Different chunk sizes
Emotion tags
Synonym emotion tags
Natural-language performance directions
No emotion tags at all
Different prompting styles
None of these significantly improved voice consistency.
My question
Has anyone successfully built a long-form narration or audiobook pipeline using Gemini 3.1 Flash TTS?
Specifically:
Have you found a way to keep the voice identity consistent across multiple API calls?
Is there any hidden parameter, seed, or context mechanism that helps?
Does Vertex AI behave differently from the Gemini API?
Are there any prompting techniques that actually improve consistency?
Or is this simply a current limitation of Gemini 3.1 Flash TTS?
I’m not trying to clone a custom voice—I’m only trying to keep the built-in Kore voice sounding like the same narrator throughout an entire audiobook.
Any insights or real-world experience would be greatly appreciated.
Thanks!

reddit.com
u/Ok_Coat4453 — 6 hours ago