Narrate your newsletter with Gemini 3.8 Flash TTS
Turn a newsletter issue into a voiceover with Gemini 3.8 Flash TTS: design a narrator voice in Google AI Studio, then automate it in under 20 minutes.

What you need
Step 1: Open the speech playground
1 minAI Studio's speech page lets you hear every change before you write any code.
- Go to aistudio.google.com/generate-speech and sign in with your Google account.
- In the model menu, pick Gemini 3.8 Flash TTS.
You should see the speech page with Gemini 3.8 Flash TTS picked and an empty box for your script.
Your old setup uses
gemini-3.1-flash-tts-preview?That preview model is older. Google now names Gemini 3.8 Flash TTS for long narration, and Gemini 3.8 Flash-Lite TTS as the cheaper, faster replacement.
Flash TTS gives the richest voice for long reads. Flash-Lite TTS suits high volume, and the two take the same scripts.
Step 2: Design a narrator voice
3 minA designed voice sounds the same in every issue, so you describe your narrator only once.
- Open the Voice Design studio from the voice options.
- Describe your narrator in 1 or 2 sentences: age, timbre, accent and how they speak. Use the example below as a start.
- Play the preview, then save the voice with a name such as Newsletter narrator.
Your voice descriptionA clear, warm narrator in her 30s with a neutral American accent, reading the news at a steady, friendly pace.
You should see your new voice saved in your voice list, with a preview you can play.
The voice doesn't match your description?
Keep it to 1 or 2 clear sentences. Drop traits that pull in different directions, such as calm and excitable, then generate it again.
Prefer a ready-made voice? Of the 30 built-in voices, Google labels Charon "Informative" and Sulafat "Warm".
Step 3: Turn the issue into a script
5 minGemini reads your text word for word, so anything left in the script gets spoken.
- Paste one section of your issue into a plain text editor.
- Delete links, image captions, button text and emoji.
- Add
<short pause>between stories and<long pause>before a new section. - Write one key word in capitals where you want the narrator to stress it.
Your scriptGood morning. Here are 3 stories worth your time. <short pause> First, [STORY 1 IN 2 OR 3 SENTENCES]. <short pause> Second, [STORY 2 IN 2 OR 3 SENTENCES]. This one MATTERS if you [WHO IT AFFECTS]. <long pause> That's it for today. See you tomorrow.
You should see a clean script with only spoken words and a few tags in angle brackets.
Your old script uses square-bracket tags like [excitedly]?
Those came from Gemini 3.1. Gemini 3.8 reads the text as a word-for-word script, so move the mood into the style note in step 4. Keep only angle-bracket tags like
<sigh>.Make one script per section. A single request takes up to 8,192 input tokens, and short parts are easier to redo.
Step 4: Direct the delivery and run it
3 minOne short style note sets the mood for a whole section, and Google says most scripts need none.
- Pick your narrator voice and paste your script.
- Click Run with no style note first, and listen.
- If the read needs a mood, add a style note of a few words, such as
warm and upbeat, and run it again. - When it sounds right, download the audio.
You should see your section read aloud in your narrator's voice, with pauses where you put the tags.
The narrator reads your directions out loud?
The script box is read word for word. Move notes like "slowly" or "excited" into the style note, and keep only angle-bracket tags in the text.
Keep fixed traits such as age or accent out of the style note. Those belong in the voice design.
Step 5: Automate each issue with the API
5 minWith your voice ID and one command, each new issue becomes audio without opening AI Studio.
- Copy your narrator's
voice_ID from AI Studio. Click Get code to see the request for your own setup. - On the API keys page, click Create API key. In your terminal, run
export GEMINI_API_KEY="[YOUR KEY]". - Save your script as
script.txtin the folder you run the command from. - Put your voice ID into the command below and run it.
Run this (Mac or Linux)jq -n --rawfile text script.txt --arg voice "[YOUR VOICE ID]" \ '{model: "gemini-3.8-flash-tts", input: [{type: "user_input", content: [{type: "text", text: $text, annotations: [{type: "speech_metadata", style: "warm and clear"}]}]}], response_format: {type: "audio"}, generation_config: {speech_config: [{voice: $voice}]}}' \ | curl -s -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \ -H "x-goog-api-key: $GEMINI_API_KEY" -H "Content-Type: application/json" -d @- \ | jq -r '[.steps[] | select(.type=="model_output") | .content[] | select(.type=="audio")] | last | .data' \ | base64 --decode > issue.wavYou should see an
issue.wavfile that plays your section in your narrator's voice.The file is empty or won't play?
Delete the last 2 lines and the
\before them, then run it again to read the error. Most often, the key isn't set in this terminal window.Keep your API key in the environment variable. Never paste it into a script you share or commit. jq handles quotes and line breaks in your script for you.
- Copy your narrator's
You get
A narrator voice of your own and a script format that turns each issue into audio, in AI Studio or with one command
Try next
Did this guide work for you?
Thanks. It helps us fix the steps.


