--- title: Parler TTS API emoji: 🎙️ colorFrom: blue colorTo: green sdk: docker app_file: api.py python_version: 3.10 --- # Indic Parler-TTS API FastAPI endpoint for Urdu Text-to-Speech using [ai4bharat/indic-parler-tts](https://huggingface.co/ai4bharat/indic-parler-tts). ## API Endpoints ### Health Check ``` GET / ``` Returns model status and available speakers. **Response:** ```json { "status": "ok", "model": "Indic Parler-TTS", "speakers": ["Divya", "Rani", "Rohit", "Aman", "Generic Female", "Generic Male"], "sample_rate": 24000 } ``` ### Generate Speech ``` POST /tts ``` **Request Body:** ```json { "text": "السلام علیکم، میرا نام اردو ٹی ٹی ایس ہے۔", "speaker": "Divya", "pitch": "Moderate", "rate": "Moderate", "temperature": 0.8, "do_sample": true } ``` **Parameters:** - `text` (string, required): Urdu text to synthesize - `speaker` (string, optional): Speaker name. Options: `Divya`, `Rani`, `Rohit`, `Aman`, `Generic Female`, `Generic Male`. Default: `Divya` - `pitch` (string, optional): Voice pitch. Options: `High`, `Moderate`, `Low`. Default: `Moderate` - `rate` (string, optional): Speaking rate. Options: `Slow`, `Moderate`, `Fast`. Default: `Moderate` - `temperature` (float, optional): Sampling temperature (0.1-2.0). Default: `0.8` - `do_sample` (boolean, optional): Use sampling vs greedy decoding. Default: `true` **Response:** - WAV audio file (audio/wav) ### Get Available Speakers ``` GET /speakers ``` **Response:** ```json { "speakers": ["Divya", "Rani", "Rohit", "Aman", "Generic Female", "Generic Male"] } ``` ## Example Usage ### cURL ```bash curl -X POST http://localhost:7860/tts \ -H "Content-Type: application/json" \ -d '{ "text": "السلام علیکم", "speaker": "Divya", "pitch": "Moderate", "rate": "Moderate" }' \ --output speech.wav ``` ### Python ```python import requests import json url = "http://localhost:7860/tts" payload = { "text": "السلام علیکم، میرا نام اردو ٹی ٹی ایس ہے۔", "speaker": "Divya", "pitch": "Moderate", "rate": "Moderate", "temperature": 0.8, "do_sample": True } response = requests.post(url, json=payload) if response.status_code == 200: with open("speech.wav", "wb") as f: f.write(response.content) print("Audio saved!") else: print(f"Error: {response.status_code}") print(response.text) ``` ## Running Locally ### With Docker ```bash docker build -t parler-tts-api . docker run -p 7860:7860 --gpus all parler-tts-api ``` ### Without Docker ```bash python3 -m venv venv source venv/bin/activate pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 pip install -r requirements.txt pip install uvicorn[standard] python api.py ``` Then visit `http://localhost:7860/docs` for interactive API documentation. ## Environment Variables For HF Spaces deployment, set the following secret: - `HF_TOKEN`: Your Hugging Face API token (required for gated model access) ## Technical Details - **Model**: Indic Parler-TTS (multi-speaker, multi-language) - **Language**: Urdu (auto-detected from script) - **Sample Rate**: 24 kHz - **Audio Format**: WAV (16-bit PCM) - **Framework**: FastAPI + PyTorch - **Deployment**: HF Spaces Docker runtime ### Quality Notes - Language is auto-detected from Urdu script — do NOT mention language in voice descriptions - Named speakers (Divya, Rohit, etc.) provide consistent voices - Same random seed used across sentences for voice consistency within a generation - Text cleaning removes Latin/English characters to prevent language mixing