Expression styles
Add an emotional tone tag to the beginning of your text. The tag controls the delivery of the whole synthesis; the tag itself is not spoken. Eleven styles available. Default is Neutral.
How tags work
Prepend the style tag in <Angle> brackets to your input text. The tag itself is parsed as an instruction, it's never spoken aloud. Only the text after it is synthesized, in the requested style.
Format
<StyleTag> + space + the text you want spoken.Spoken: only the part after
<StyleTag>.No tag? Defaults to
Neutral.| You send | Listener hears | Delivery |
|---|---|---|
<Happy> Welcome aboard! | "Welcome aboard!" | Joyful, warm |
<News> Markets rally today. | "Markets rally today." | Formal, anchor-style |
<Narrative> Once upon a time... | "Once upon a time..." | Measured, storytelling |
| Your balance is five thousand rupees. | (same, no tag) | Neutral default |
Code example:
python
config = TTSConfig(model="zero-indic", voice="Varun")
# Happy delivery, the tag is NOT spoken, only "Welcome aboard!"
await client.tts.synthesize("<Happy> Welcome aboard!", config=config)
# News-anchor delivery
await client.tts.synthesize("<News> Markets rally today.", config=config)
# No tag → falls back to Neutral
await client.tts.synthesize("Your account balance is five thousand rupees.", config=config)The eleven styles
| Tag | Feel | Use for |
|---|---|---|
<Happy> | Joyful, upbeat, warm | Greetings, success messages, welcome flows. |
<Sad> | Somber, melancholic, subdued | Empathetic responses. Use sparingly. |
<Angry> | Forceful, intense, raised energy | Dramatic narration. Avoid in customer-facing. |
<Fearful> | Anxious, trembling, uncertain | Thriller narration, dramatic effect. |
<Surprised> | Exclamatory, astonished | Unexpected news, announcements. |
<Disgust> | Repulsed, disapproving | Narrative or educational content. |
<News> | Formal, authoritative, clear | News anchor style. Announcements. |
<Conversational> | Casual, everyday speech | Chatbots and voice agents. |
<Narrative> | Measured, expressive storytelling | Audiobooks, long-form narration. |
<Enthusiastic> | High energy, passionate | Promotions, upbeat content. |
<Neutral> | Clean read-speech (default) | Professional, balanced. |
Style by use case
Pick the tab that matches your scenario.
python
# Conversational, natural, not robotic. mulaw output goes straight to IVR.
config = TTSConfig(
model="zero-indic",
voice="Rajesh",
response_format="mulaw",
)
await client.tts.synthesize(
"<Conversational> Hey! How can I help you today?",
config=config,
)python
# Conversational for the casual greeting, Happy for the confirmation moment.
config = TTSConfig(model="zero-indic", voice="Nisha")
await client.tts.synthesize(
"<Conversational> Hey! How can I help you today?",
config=config,
)
await client.tts.synthesize(
"<Happy> Great choice! Your booking is confirmed.",
config=config,
)python
# Narrative, measured, expressive storytelling.
config = TTSConfig(model="zero-indic", voice="Krishnan")
await client.tts.synthesize(
"<Narrative> Bahut saal pehle ki baat hai, ek chote se gaon mein ek raja rehta tha.",
config=config,
)python
# Neutral + fast speed + trimmed silence, concise and professional.
config = TTSConfig(
model="zero-indic",
voice="Varun",
speed=1.3,
trim_silence=True,
)
await client.tts.synthesize(
"<Neutral> Your order has been dispatched.",
config=config,
)Style pairing guide
Some voice × style combinations land more naturally than others. Rough starting points we've seen work:
| Voice archetype | Best styles | Weaker styles |
|---|---|---|
| Male, middle-age (Rajesh, Varun, Arjun) | News, Narrative, Conversational, Neutral | Fearful, Surprised |
| Female, middle-age (Sunita, Nisha, Priyanka) | Conversational, Happy, News, Neutral | Angry |
| Male, warm (Kiran, Murugan, Krishnan) | Narrative, Conversational, Enthusiastic | Disgust |
| Female, expressive (Shreya, Thangam, Deepa) | Enthusiastic, Happy, Surprised, Narrative | Angry |
These are heuristics, not rules, preview with your own text before committing to a production pairing.
Preview before production
Use the dashboard's voice preview to try a given voice + style + 10 seconds of your real text. What reads naturally on paper sometimes lands flat in audio.Combining with speed & trim
Style tags stack cleanly with other TTSConfig fields:
python
# Enthusiastic promo, fast and tight
config = TTSConfig(
model="zero-indic",
voice="Nisha",
speed=1.2,
trim_silence=True,
)
await client.tts.synthesize(
"<Enthusiastic> Grab 50% off, only for the next 24 hours!",
config=config,
)