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 sendListener hearsDelivery
<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

TagFeelUse for
<Happy>Joyful, upbeat, warmGreetings, success messages, welcome flows.
<Sad>Somber, melancholic, subduedEmpathetic responses. Use sparingly.
<Angry>Forceful, intense, raised energyDramatic narration. Avoid in customer-facing.
<Fearful>Anxious, trembling, uncertainThriller narration, dramatic effect.
<Surprised>Exclamatory, astonishedUnexpected news, announcements.
<Disgust>Repulsed, disapprovingNarrative or educational content.
<News>Formal, authoritative, clearNews anchor style. Announcements.
<Conversational>Casual, everyday speechChatbots and voice agents.
<Narrative>Measured, expressive storytellingAudiobooks, long-form narration.
<Enthusiastic>High energy, passionatePromotions, 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 archetypeBest stylesWeaker styles
Male, middle-age (Rajesh, Varun, Arjun)News, Narrative, Conversational, NeutralFearful, Surprised
Female, middle-age (Sunita, Nisha, Priyanka)Conversational, Happy, News, NeutralAngry
Male, warm (Kiran, Murugan, Krishnan)Narrative, Conversational, EnthusiasticDisgust
Female, expressive (Shreya, Thangam, Deepa)Enthusiastic, Happy, Surprised, NarrativeAngry

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,
)