early-window-29567
02/17/2026, 7:16 PMtall-airline-16756
02/17/2026, 7:16 PMtall-airline-16756
02/17/2026, 7:17 PMinstructions (prompting) and switching `voice_name`/options for each selection.
• Do the change on the TTS/options layer (e.g., with an update call) so it only affects future utterances and doesn’t interrupt the current session.
How this works (what to change)
• Personality = descriptive instructions passed to the Gemini TTS engine (tone, pacing, emotion).
◦ Example prompts:
▪︎ Calm: "Speak in a calm and soothing tone, with slow pacing and gentle intonation."
▪︎ Energetic: "Speak in an energetic and enthusiastic tone, with lively pacing and dynamic expression."
▪︎ Professional: "Speak in a clear, confident, and professional tone, with moderate pacing and precise articulation."
• Voice selection = choose a Gemini voice name (e.g., Zephyr, Kore) and pair it with the instructions to shape personality.
• Apply changes using the TTS update method so the next utterance uses the new personality/voice without restarting the agent or interrupting the conversation.
Implementation approach (recommended)
1. Maintain a small voice-state per user/session that stores:
◦ Selected voice_name
◦ instructions (the personality prompt)
1. Provide a UI control (buttons or a dropdown) or a tool trigger to let the user pick a personality.
2. When a user picks a personality:
◦ Update the session’s TTS options (so only subsequent TTS output changes).
◦ Do not reinitialize the whole session/agent—use the update API.
1. Ensure updates take effect on the next utterance:
◦ This avoids cutting off or affecting in-progress audio.
1. Optionally add a short preview button that plays a single sample utterance using the selected personality so users can compare before committing.
Concrete examples
• Python (conceptual)
# Update TTS options for the current session so next utterance uses new personality
session.tts.update_options(
voice_name="Zephyr",
instructions="Speak in a calm and soothing tone, with slow pacing and gentle intonation."
)
• Node/TypeScript (conceptual)
session.tts.updateOptions({
voiceName: "Zephyr",
instructions: "Speak in an energetic and enthusiastic tone, with lively pacing and dynamic expression."
});
UX tips to avoid impacting main flow
• Apply changes only on user action (explicit selection or preview), not automatically during active speech.
• Keep a short confirmation or quick sample playback so users know what changed.
• If your app has critical real-time voice interactions, only allow personality switches in non-critical moments or at natural breakpoints (e.g., between messages).
• Cache preference per user so repeated selections don’t cause repeated updates.
Limits / notes
• Use instructions to shape personality — that’s the mechanism Gemini TTS exposes for tone/pacing.
• Voice changes via update methods apply to the next utterance; they won’t retroactively change already-played audio.
If you’d like, I can:
• Draft ready-to-use personality prompts tuned for your use case (short, mid, and long variants).
• Provide a minimal UI flow example that shows selection → update → preview without interrupting audio.
• Help you pick default Gemini voices and map them to each personality (calm/energetic/professional).
Which of these would help you next? And are you building this into an existing LiveKit room/agent session or starting a new demo flow?
Sources: Gemini TTS plugin guide | LiveKit Documentation