uncloseai-speech/docs/models/coqui-tts.md
Russell Ballestrini 7559e56d0c Standardize project naming to uncloseai-speech across all files
- Add CHANGELOG.md with full version history (moved from README)
- Update all documentation to use lowercase 'uncloseai-speech' project name
- Update organization references to lowercase 'uncloseai' (not 'UncloseAI')
- Add Brand Identity section to docs/CLAUDE.md with naming guidelines
- Update speech.py argparse description to match branding
- Update README.md headers and sections with consistent naming
- Update all model documentation with consistent branding

Files updated:
- CHANGELOG.md (new file)
- README.md (changelog reference, server options, multilingual section)
- speech.py (--workers argument, branding in argparse)
- Makefile (header comment)
- docs/CLAUDE.md (Brand Identity section)
- docs/MODELS.md
- docs/MIRRORS.md
- docs/AUDIT.md
- docs/models/coqui-tts.md
- docs/research/tts-models-overview.md

Branding standard:
- Project: uncloseai-speech (lowercase, hyphenated)
- Organization: uncloseai (lowercase, one word)

🦝 Generated with Claude Code
2025-11-10 05:23:34 -05:00

18 KiB

Coqui TTS (XTTS-v2)

Status: Integrated as tts-1-hd

Overview

Name

Coqui TTS (now community-maintained as XTTS-v2)

Description

Coqui TTS is a deep learning toolkit for neural Text-to-Speech synthesis with advanced voice cloning and multilingual capabilities. Originally developed by Coqui AI, the company shut down operations in 2024 and archived the repository. However, the project has been actively forked and maintained by the open-source community, with XTTS-v2 emerging as the primary maintained variant. The model delivers natural-sounding speech with emotional prosody control and continues to receive community updates and improvements.

Project Status: Community-maintained fork (originally abandoned by Coqui AI)


Key Features

Capabilities

  • Zero-shot Voice Cloning - Generate speech in any voice using just a 6-second sample
  • Multilingual Support - 20+ languages with consistent quality across languages
  • Emotional Prosody Control - Adjust tone, emotion, and speaking style
  • Real-time Inference - Reasonable performance on modern GPUs
  • Cross-lingual Transfer - Clone voices speaking languages other than the target language
  • Speaker Consistency - Maintains speaker identity across multiple sentences

Advantages

  • High Naturalness - Among the best quality neural TTS systems available
  • Voice Cloning - Industry-leading zero-shot voice cloning capabilities
  • Active Community - Multiple maintained forks and extensions
  • Research-Grade - Originally developed with academic rigor
  • Flexible Architecture - Supports custom fine-tuning and extensions
  • Open Source - Community can contribute improvements and fixes

Limitations

  • GPU Requirement - Best performance requires NVIDIA CUDA GPU (RTX 3060+ recommended)
  • Slow Inference - Takes 5-30 seconds per sentence depending on GPU and sentence length
  • Large Model Size - ~1.8GB for full XTTS-v2 model
  • Setup Complexity - More complex dependencies than lightweight models like Piper
  • VRAM Usage - Requires 4-8GB of VRAM for comfortable operation
  • Dependency Chain - Requires PyTorch, librosa, and other scientific libraries

Technical Details

Model Architecture

  • Type: Diffusion-based multi-stream TTS
  • Base Model: XTTS-v2 from HuggingFace
  • Framework: PyTorch
  • Model Size: ~1.8GB (on disk), ~4GB loaded in VRAM)
  • Voice Encoder: Uses speaker embeddings from pre-trained voice model
  • Language Support: 20+ languages

Supported Languages

Fully Supported:

  • English (American, British)
  • Spanish (Spain, Latin America)
  • French (France, Canadian)
  • German
  • Italian
  • Portuguese (Portugal, Brazil)
  • Polish
  • Turkish
  • Russian
  • Dutch
  • Czech
  • Slovak
  • Romanian
  • Greek
  • Hungarian
  • Korean
  • Chinese (Mandarin)
  • Japanese
  • Arabic
  • Hindi
  • Vietnamese
  • Thai

Experimental/Partial Support:

  • Additional languages through community extensions

Performance Characteristics

Metric Value Notes
Inference Speed (RTF) 0.3x Real-Time Factor on V100 GPU
Inference Speed 5-30 seconds Typical single sentence on RTX 3090
Model Size (Disk) 1.8 GB Uncompressed checkpoint
VRAM Usage 4-8 GB Typical during inference
Quality Rating 95/100 Among best available
Voice Cloning Quality 90/100 Excellent with good samples
Multilingual Quality 92/100 Consistent across languages
Supported Voices Unlimited Any speaker sample works

Voice Cloning Requirements

  • Sample Duration: Minimum 6 seconds, optimal 15-30 seconds
  • Audio Quality: 16-bit PCM WAV, 22050 Hz or 24000 Hz
  • Noise Level: Low background noise preferred (can tolerate some noise)
  • Speaker Consistency: Same speaker throughout sample
  • Language: Does not need to match target language (cross-lingual works)

System Requirements

Minimum (CPU-only):

  • 8GB RAM
  • 4GB disk space
  • Python 3.9+
  • Takes 2-5 minutes per sentence (not practical for production)

Recommended (GPU):

  • NVIDIA GPU with 6GB+ VRAM (RTX 3060 or better)
  • 16GB system RAM
  • 4GB disk space
  • Python 3.9+
  • CUDA Toolkit 11.8+

Optimal (Production):

  • NVIDIA GPU with 8GB+ VRAM (RTX 3090, A100, L4, or equivalent)
  • 32GB system RAM
  • 10GB disk space (with model caching)
  • Python 3.10+
  • CUDA Toolkit 12.1+

License

Primary License: MPL-2.0 (Mozilla Public License 2.0) Secondary License Options: Apache 2.0 (through community forks)

The original Coqui TTS was released under MPL-2.0. Community forks may offer alternative licensing. Check the specific fork's license file for precise terms.

License Compliance Notes:

  • Source code must be provided to users when modified
  • Commercial use is permitted with MPL-2.0
  • Modifications must be released under same license
  • Patent grants included in MPL-2.0

Official References

Community Forks

Documentation

Installation & Usage

# Install with language support
pip install TTS[languages]

# Or specific version
pip install TTS==14.5.0

Integration Status

Current Implementation

  • uncloseai-speech Model Name: tts-1-hd
  • Status: Fully Integrated
  • Integration Date: Active (as of 2025-11-09)
  • Container Path: Model auto-downloaded to /root/.local/share/tts/ on first use

Configuration Example

# voice_to_speaker.yaml
tts-1-hd:
  alloy:
    model: xtts
    speaker: /app/voices/alloy.wav
    language: en

  echo:
    model: xtts
    speaker: /app/voices/echo.wav
    language: en

  fable:
    model: xtts
    speaker: /app/voices/fable.wav
    language: en

  onyx:
    model: xtts
    speaker: /app/voices/onyx.wav
    language: en

  nova:
    model: xtts
    speaker: /app/voices/nova.wav
    language: en

  shimmer:
    model: xtts
    speaker: /app/voices/shimmer.wav
    language: en

API Integration

# OpenAI-compatible API
response = openai.audio.speech.create(
    model="tts-1-hd",  # XTTS-v2
    voice="alloy",      # Uses speaker sample
    input="Hello, world!",
    speed=1.0
)

audio_bytes = response.content

Environment Variables

# In speech.env or container environment
XTTS_DEVICE=cuda          # cuda or cpu
XTTS_MODEL_PATH=/root/.local/share/tts/  # Auto-downloads
XTTS_BATCH_SIZE=4         # For multi-request batching

Usage Examples

Basic Python API

from TTS.api import TTS

# Initialize model (auto-downloads on first run)
tts = TTS(model_name="tts_models/multilingual/multi-dataset/xtts_v2",
          gpu=True)

# Simple speech synthesis
tts.tts_to_file(
    text="Hello, this is XTTS-v2 speaking!",
    speaker_wav="path/to/speaker_sample.wav",
    language="en",
    file_path="output.wav"
)

Voice Cloning with Custom Sample

from TTS.api import TTS

tts = TTS(model_name="tts_models/multilingual/multi-dataset/xtts_v2",
          gpu=True)

# Clone voice from custom sample
custom_sample = "my_voice_sample.wav"  # 6+ seconds
text = "This is my cloned voice speaking."

tts.tts_to_file(
    text=text,
    speaker_wav=custom_sample,
    language="en",
    file_path="cloned_voice_output.wav"
)

Multilingual Synthesis

from TTS.api import TTS

tts = TTS(model_name="tts_models/multilingual/multi-dataset/xtts_v2",
          gpu=True)

# Spanish
tts.tts_to_file(
    text="Hola, esto es una prueba en español.",
    speaker_wav="english_speaker.wav",
    language="es",
    file_path="spanish_output.wav"
)

# Japanese
tts.tts_to_file(
    text="これはテストです。",
    speaker_wav="english_speaker.wav",
    language="ja",
    file_path="japanese_output.wav"
)

Docker Integration

# Build with TTS support
docker build -t uncloseai-speech:xtts \
  --build-arg TTS_DEPS=1 \
  .

# Run with GPU
docker run --gpus all \
  -v ~/.cache/tts:/root/.local/share/tts \
  uncloseai-speech:xtts

OpenAI-Compatible API Integration

# Direct integration with uncloseai-speech
import requests
import json

response = requests.post(
    "http://localhost:8000/v1/audio/speech",
    json={
        "model": "tts-1-hd",
        "voice": "alloy",
        "input": "Hello from XTTS-v2!",
        "speed": 1.0
    }
)

audio = response.content

Batch Processing

from TTS.api import TTS

tts = TTS(model_name="tts_models/multilingual/multi-dataset/xtts_v2",
          gpu=True,
          batch_size=4)

texts = [
    "This is the first sentence.",
    "This is the second sentence.",
    "This is the third sentence.",
    "This is the fourth sentence."
]

speaker_sample = "speaker.wav"

for i, text in enumerate(texts):
    tts.tts_to_file(
        text=text,
        speaker_wav=speaker_sample,
        language="en",
        file_path=f"output_{i}.wav"
    )

Advanced Configuration

from TTS.api import TTS

# Custom model path and cache
tts = TTS(
    model_name="tts_models/multilingual/multi-dataset/xtts_v2",
    gpu=True,
    gpu_memory_fraction=0.8,  # Use 80% of GPU memory
    model_path="/path/to/custom/model",
    language_manager_config={
        'use_phonemes': False  # Disable phoneme processing
    }
)

# Generate with advanced options
wav = tts.tts(
    text="Advanced synthesis example",
    speaker_wav="speaker.wav",
    language="en",
    use_griffin_lim=False,  # Use faster vocoder
    speaker_idx=None  # Auto-detect from speaker_wav
)

Raccoon Mission Notes

Community Status

Original Company: Coqui AI (SHUT DOWN - March 2024)

  • Company ceased operations in early 2024
  • Original repository archived
  • All infrastructure decommissioned
  • No official support available

Current Status: Community-Maintained

  • Multiple active forks in development
  • AllTalk TTS maintains easier setup
  • XTTS-v2 weights hosted on HuggingFace (indefinite)
  • Community documentation improving
  • Bug fixes and improvements ongoing

Fork Information

Primary Community Maintainers:

  1. AllTalk TTS (erew123) - Most user-friendly fork

  2. Original TTS Repo (coqui-ai) - Reference implementation

  3. Community Extensions

    • Various fine-tuning implementations
    • Language-specific optimizations
    • Voice quality improvements

Preservation Needs

Critical Preservation Tasks:

  1. Model Weights Mirror - Must mirror XTTS-v2 weights to UncloseAI server

    • Current: Hosted on HuggingFace (reliable but single point of failure)
    • Required: Archive.org backup + ai.foxhop.net mirror
    • Timeline: URGENT (before HuggingFace policies change)
  2. Code Preservation - Fork and mirror the working implementation

  3. Research Preservation - Archive papers and documentation

    • Research papers from Coqui AI
    • Training data sources
    • Model architecture documentation
    • Timeline: Next 3-6 months
  4. ⚠️ Training Data Recovery - Original datasets may be lost

    • LibriTTS and related datasets (mostly preserved on other mirrors)
    • Custom Coqui training data (likely lost)
    • Implication: Can't retrain from scratch; locked to existing weights

Risk Mitigation Strategy

What Could Break:

  • HuggingFace removes model weights (unlikely but possible)
  • PyPI package dependencies break (python-lzma, torch versions)
  • Original paper/docs disappear
  • Community forks become unmaintained

Mitigation Plan:

Priority 1: Mirror model weights (1.8GB)
  - Destination: ai.foxhop.net/mirrors/xtts-v2/
  - Backup: Archive.org (IA)
  - Format: Compressed .tar.gz

Priority 2: Vendor code fork
  - Keep uncloseai/coqui-tts active
  - CI/CD for dependency testing
  - Document all fixes/patches

Priority 3: Documentation archive
  - Preserve all research papers
  - Archive GitHub wiki
  - Create offline documentation

Priority 4: Fallback inference
  - Implement ONNX export
  - Create quantized versions
  - Enable CPU-only fallback (slow)

Community Contribution Opportunities

Ways to Support XTTS-v2:

  1. Fine-tune for specific voices/languages - Create specialized models
  2. Improve inference speed - ONNX export, quantization
  3. Expand language support - Training on additional datasets
  4. Develop extensions - UI tools, API wrappers, integrations
  5. Document alternatives - Create comparison guides with other TTS systems
  6. Support community implementations - Fund AllTalk TTS development

Integration with uncloseai-speech

Current Role:

  • Primary high-quality TTS engine
  • Voice cloning capability provider
  • OpenAI API tts-1-hd model

Planned Enhancements:

  1. Add emotion/style control parameters
  2. Implement streaming TTS support
  3. Create voice cloning API endpoint
  4. Add batch processing optimization
  5. Develop fine-tuning tools for custom voices

Relationship to Other Engines:

  • vs Piper TTS: XTTS is slower but higher quality and supports voice cloning
  • vs Silero TTS: XTTS has better multilingual support; Silero is much faster
  • vs StyleTTS2: Both are high quality; XTTS is easier to use
  • vs Fish Speech: XTTS has better voice cloning; Fish Speech is newer

Troubleshooting

Common Issues

Issue: CUDA Out of Memory

RuntimeError: CUDA out of memory. Tried to allocate 2.00 GiB

Solution:

import torch
torch.cuda.empty_cache()  # Clear cache before inference
tts = TTS(model_name="...", gpu_memory_fraction=0.75)

Issue: Model Download Hangs

Problem: Hangs when downloading from HuggingFace

Solution:

# Set manual cache location
export TTS_HOME=/path/to/cache
python script.py

# Or pre-download model
huggingface-cli download coqui/XTTS-v2 --cache-dir /path/to/cache

Issue: Speaker Sample Quality Poor

Problem: Cloned voice sounds wrong or robotic

Solution:

  • Use at least 6 seconds of clean audio
  • Reduce background noise
  • Ensure speaker is consistent throughout sample
  • Try different speaker samples

Issue: Slow Inference Speed

Problem: Takes >60 seconds per sentence

Solution:

  • Verify GPU is being used: nvidia-smi should show process
  • Check CUDA installation: python -c "import torch; print(torch.cuda.is_available())"
  • Consider splitting very long texts into sentences

Issue: Language Not Recognized

Problem: Language code not supported

Solution:

# Check supported languages
from TTS.utils.generic_utils import get_supported_languages
print(get_supported_languages())

# Use language code from list

Performance Optimization

Tips for Faster Inference:

  1. Keep sentences short (under 20 words)
  2. Warm up model before first inference
  3. Use batch processing for multiple texts
  4. Reduce GPU clock speeds (if thermal limited)
  5. Use newer GPU if available (V100 → A100 = 2-3x faster)

Tips for Better Quality:

  1. Provide longer speaker samples (15-30 seconds)
  2. Use high-quality, low-noise audio
  3. Maintain consistent speaker voice
  4. Adjust text for clarity
  5. Fine-tune on domain-specific data (advanced)

Version History

Version Date Notes
v2.4 2025-01 Latest stable XTTS-v2 version
v2.3 2024-11 Improved multilingual support
v2.2 2024-09 Community fork improvements
v2.1 2024-05 Original final release (post-Coqui shutdown)
v2.0 2023-12 Initial XTTS-v2 release
v1.x 2023-04 Original Coqui TTS versions

Current Installation: TTS>=14.5.0 (latest XTTS-v2 compatible version)


References & Further Reading

  1. Research Papers:

    • Original Coqui TTS paper (from ISMIR/related conferences)
    • XTTS-v2 technical documentation
    • Related work on neural voice conversion
  2. Similar Projects:

    • StyleTTS2 (higher quality, more complex)
    • Fish Speech (newer, modern architecture)
    • Tortoise TTS (very high quality, very slow)
  3. Community Resources:

    • AllTalk TTS Discord community
    • GitHub discussions on coqui-ai/TTS
    • HuggingFace model card comments
    • LocalLLM forums (active discussion)
  4. Model Card Details:

    • Full model architecture documentation
    • Training data sources
    • Known limitations and biases
    • Performance benchmarks

Document Metadata

  • Last Updated: 2025-11-09
  • Status: Complete and current
  • Maintained By: Raccoon Mission (uncloseai)
  • Related Files: /home/user/uncloseai-speech/docs/MODELS.md, /home/user/uncloseai-speech/docs/AUDIT.md
  • Integration Level: Production-ready
  • Community Status: Actively maintained by fork community

Raccoon Mission: 🦝 Preserving abandoned TTS systems for a free and open future.

This document is part of the uncloseai-speech project - rescuing open-source TTS models from abandonment and unifying them under one API.