Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
2bb8e2e
fonadalabs-livekit-agent-first-commit
Pragyanshu-Fonada Dec 11, 2025
51d8ddf
Fix Ruf check errors
Pragyanshu-Fonada Dec 19, 2025
8dae40e
Improve error handling in TTS input channel
Pragyanshu-Fonada Dec 19, 2025
cc7bcb1
Reorder import statements in tts.py
Pragyanshu-Fonada Dec 19, 2025
e8ae5c3
Reorder APIConnectionError import in tts.py
Pragyanshu-Fonada Dec 19, 2025
bba3f6a
Delete livekit-plugins/livekit-plugins-fonadalabs/.gitignore
Pragyanshu-Fonada Dec 19, 2025
626b544
Merge branch 'main' into feature/fonadalabs_livekit_agent
Pragyanshu-Fonada Mar 20, 2026
c99d523
update the voices in TTS
Pragyanshu-Fonada Mar 20, 2026
fc88191
fix readme.md file
Pragyanshu-Fonada Mar 20, 2026
d1440cf
remove annotations
Pragyanshu-Fonada Mar 20, 2026
deec1c7
fix the async and race bug
Pragyanshu-Fonada Mar 20, 2026
3f6cf0a
fix url construction
Pragyanshu-Fonada Mar 20, 2026
0493c21
fix type check and ruff error
Pragyanshu-Fonada Mar 20, 2026
d8dddbd
fix type check and session bug
Pragyanshu-Fonada Mar 20, 2026
4e73a8d
fix: ruff formatting
Pragyanshu-Fonada Mar 20, 2026
e958fb9
Add models.py, fix catalog backoff, bump version to 1.5.0, add to wor…
Pragyanshu-Fonada Mar 21, 2026
2c3ff17
mypy fix
Pragyanshu-Fonada Mar 21, 2026
3298da7
Merge remote-tracking branch 'upstream/main' into feature/fonadalabs_…
Pragyanshu-Fonada Mar 24, 2026
fc03ab5
update voice catalog to current API
Pragyanshu-Fonada Mar 31, 2026
a839836
update Tamil (16→15) and Telugu voice display names to current API
Pragyanshu-Fonada Apr 2, 2026
c93f477
Merge branch 'main' into feature/fonadalabs_livekit_agent
Pragyanshu-Fonada Apr 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 90 additions & 0 deletions livekit-plugins/livekit-plugins-fonadalabs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
# FonadaLabs TTS plugin for Livekit Agents

A LiveKit plugin that integrates FonadaLabs TTS API using WebSocket, enabling high-quality text-to-speech synthesis with multiple Indian voices in LiveKit agents.

## Features

- 🎙️ **High-Quality TTS**: Uses FonadaLabs TTS API for natural-sounding speech
- 🇮🇳 **Rich Indian Voices**: 110+ voices across Hindi, Tamil, Telugu, and English
- ⚡ **Real-time Streaming**: WebSocket-based streaming for low-latency audio
- 🔒 **Secure**: API key authentication
- 🚀 **Easy Integration**: Simple plugin interface for LiveKit agents
- 🔄 **Dynamic Catalog**: Supported languages and voices are fetched live from the API

## Installation

```bash
pip install livekit-plugins-fonadalabs
```

## Pre-requisites

You'll need an API key from FonadaLabs (https://fonadalabs.ai). It can be set as an environment variable: `FONADALABS_API_KEY`



## Supported Languages & Voices

> **Note:** The full list of supported languages and voices is fetched dynamically from the FonadaLabs API at runtime (`https://api.fonada.ai/supported-voices`). The list below reflects the currently available voices.

### 🇮🇳 Hindi (default) — 18 voices

| | | | | |
|---|---|---|---|---|
| Dhruv | Vaanee *(default)* | Swastik | Laksh | Raag |
| Sarvagya | Komal | Meghra | Pancham | Tara |
| Sharad | Kritika | Mandra | Karn | Gauri |
| Ruhi | Roshini | Parikshit | | |

---

### 🎵 Tamil — 15 voices

| | | | | |
|---|---|---|---|---|
| Vaani | Isai | Thalam | Swaram | Madhuri |
| Naadham | Rachna | Pallavi | Mrityunjay | Malika |
| Yamini | Tilak | Dhruv | Sanket | Rudraksh |

---

### 🎶 Telugu — 60 voices

| | | | | |
|---|---|---|---|---|
| Ansh | Dhruv | Aadhira | Aahana | Aakriti |
| Ridhima | Vaani | Shaury | Bhavyaa | Tanuj |
| Utkarsh | Adyaa | Raagini | Kanika | Madhav |
| Malini | Priya | Mala | Dhairy | Shruti |
| Tara | Shubhra | Mandara | Tanya | Sara |
| Rudrika | Ruhi | Sameer | Geetika | Naitik |
| Kartik | Naira | Meghvani | Sneha | Sonika |
| Nikunj | Sonia | Mridul | Shobha | Gunika |
| Yuvaan | Abhishek | Dhruvika | Hardik | Raj |
| Raghav | Sanatan | Tanmay | Sanjana | Niharika |
| Ruchika | Sonakshi | Aaliya | Aanchal | Vartika |
| Rihaan | Divya | Taarini | Divyansh | Pavani |

---

### 🌐 English — 18 voices

| | | | | |
|---|---|---|---|---|
| Dhruv | Vaanee *(default)* | Swastik | Laksh | Raag |
| Sarvagya | Komal | Meghra | Pancham | Tara |
| Sharad | Kritika | Mandra | Karn | Gauri |
| Ruhi | Roshini | Parikshit | | |

---

## Language Specification

You can specify the language either by **display name**:

| Display Name |
|---|
| Hindi |
| English |
| Tamil |
| Telugu |
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
"""FonadaLabs plugin for LiveKit Agents

Provides high-quality Text-to-Speech for Indian languages via the FonadaLabs API.
See https://fonada.in for more information.
"""

from .models import (
TTSEnglishVoice,
TTSHindiVoice,
TTSLanguages,
TTSTamilVoice,
TTSTeluguVoice,
TTSVoice,
)
from .tts import TTS
from .version import __version__

__all__ = [
"TTS",
"TTSLanguages",
"TTSVoice",
"TTSHindiVoice",
"TTSTamilVoice",
"TTSTeluguVoice",
"TTSEnglishVoice",
"__version__",
]

from livekit.agents import Plugin

from .log import logger


class FonadaLabsPlugin(Plugin):
def __init__(self) -> None:
super().__init__(__name__, __version__, __package__, logger)


Plugin.register_plugin(FonadaLabsPlugin())

# Cleanup docs of unexported modules
_module = dir()
NOT_IN_ALL = [m for m in _module if m not in __all__]

__pdoc__ = {}

for n in NOT_IN_ALL:
__pdoc__[n] = False
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
"""Logging configuration for FonadaLabs TTS plugin."""

import logging

logger = logging.getLogger("livekit.plugins.fonadalabs")
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
"""FonadaLabs TTS model types — languages and voices available on the API.

.. note::
**This file is auto-generated.**
Re-run ``python scripts/generate_fonadalabs_models.py`` to refresh it
whenever FonadaLabs adds new voices or languages.

Generated: 2026-04-02 00:00 UTC
Source: https://api.fonada.ai/supported-voices

These ``Literal`` types give IDEs autocomplete and let mypy catch typos at
type-check time. The :class:`~livekit.plugins.fonadalabs.TTS` class accepts
either a typed constant *or* a plain ``str``, so you can still pass a raw
string if the API adds new voices before this file is regenerated.

Example::

from livekit.plugins import fonadalabs

tts = fonadalabs.TTS(
language="Hindi",
voice="Vaanee",
)
"""

from __future__ import annotations

from typing import Literal

# ---------------------------------------------------------------------------
# Languages
# ---------------------------------------------------------------------------

TTSLanguages = Literal["English", "Hindi", "Tamil", "Telugu"]
"""Supported language display names accepted by the FonadaLabs TTS API."""

# ---------------------------------------------------------------------------
# Per-language voice literals
# ---------------------------------------------------------------------------

TTSEnglishVoice = Literal[
"Dhruv",
"Vaanee",
"Swastik",
"Laksh",
"Raag",
"Sarvagya",
"Komal",
"Meghra",
"Pancham",
"Tara",
"Sharad",
"Kritika",
"Mandra",
"Karn",
"Gauri",
"Ruhi",
"Roshini",
"Parikshit",
]
"""18 English voices available on the FonadaLabs TTS API."""

TTSHindiVoice = Literal[
"Dhruv",
"Vaanee",
"Swastik",
"Laksh",
"Raag",
"Sarvagya",
"Komal",
"Meghra",
"Pancham",
"Tara",
"Sharad",
"Kritika",
"Mandra",
"Karn",
"Gauri",
"Ruhi",
"Roshini",
"Parikshit",
]
"""18 Hindi voices available on the FonadaLabs TTS API."""

TTSTamilVoice = Literal[
"Vaani",
"Isai",
"Thalam",
"Swaram",
"Madhuri",
"Naadham",
"Rachna",
"Pallavi",
"Mrityunjay",
"Malika",
"Yamini",
"Tilak",
"Dhruv",
"Sanket",
"Rudraksh",
]
"""15 Tamil voices available on the FonadaLabs TTS API."""

TTSTeluguVoice = Literal[
"Ansh",
"Dhruv",
"Aadhira",
"Aahana",
"Aakriti",
"Ridhima",
"Vaani",
"Shaury",
"Bhavyaa",
"Tanuj",
"Utkarsh",
"Adyaa",
"Raagini",
"Kanika",
"Madhav",
"Malini",
"Priya",
"Mala",
"Dhairy",
"Shruti",
"Tara",
"Shubhra",
"Mandara",
"Tanya",
"Sara",
"Rudrika",
"Ruhi",
"Sameer",
"Geetika",
"Naitik",
"Kartik",
"Naira",
"Meghvani",
"Sneha",
"Sonika",
"Nikunj",
"Sonia",
"Mridul",
"Shobha",
"Gunika",
"Yuvaan",
"Abhishek",
"Dhruvika",
"Hardik",
"Raj",
"Raghav",
"Sanatan",
"Tanmay",
"Sanjana",
"Niharika",
"Ruchika",
"Sonakshi",
"Aaliya",
"Aanchal",
"Vartika",
"Rihaan",
"Divya",
"Taarini",
"Divyansh",
"Pavani",
]
"""60 Telugu voices available on the FonadaLabs TTS API."""

# ---------------------------------------------------------------------------
# Combined voice type (union of all per-language literals)
# ---------------------------------------------------------------------------

TTSVoice = TTSEnglishVoice | TTSHindiVoice | TTSTamilVoice | TTSTeluguVoice
"""Union of all voices across every supported language.

Pass this (or a plain ``str``) as the ``voice`` argument to :class:`TTS`.
"""
Loading
Loading