# uncloseai-speech Repository Audit

**Date:** 2025-11-09
**Mission:** Raccoon TTS - Build a unified, resilient TTS system from abandoned open source projects

## Current Repository Structure

### Core Service Files (KEEP - Essential)
- `speech.py` (18K) - Main FastAPI server, handles OpenAI-compatible TTS API
- `openedai.py` (5.8K) - OpenAI API models and data structures
- `audio_reader.py` (3.7K) - Audio processing utilities
- `voice_to_speaker.default.yaml` - Default voice configuration mapping
- `pre_process_map.default.yaml` - Text preprocessing rules

### Docker & Deployment (KEEP - Essential)
- `Dockerfile` - Main docker build (Piper + XTTS with NVIDIA GPU)
- `Dockerfile.min` - Minimal build (Piper only, no GPU)
- `docker-compose.yml` - Standard deployment
- `docker-compose.min.yml` - Minimal deployment
- `docker-compose.rocm.yml` - AMD ROCm GPU support
- `Makefile` - Raccoon deployment system (recently added)
- `vars.sh.example` - Deployment configuration template

### Requirements Files (KEEP - Essential)
- `requirements.txt` - Main Python dependencies
- `requirements-min.txt` - Minimal dependencies (Piper only)
- `requirements-rocm.txt` - AMD ROCm dependencies

### Startup Scripts (KEEP - Essential)
- `startup.sh` - Main startup with voice downloads
- `startup.min.sh` - Minimal startup
- `download_voices_tts-1.sh` - Download Piper voices
- `download_voices_tts-1-hd.sh` - Download XTTS HD voices

### CLI Utilities (KEEP - Useful)
- `say.py` (3.5K) - Command-line TTS client using OpenAI API
- `add_voice.py` (2.8K) - Tool to add custom voices to config
- `test_voices.sh` (2.1K) - Test script for all voice models

### Windows Batch Files (EVALUATE - Questionable)
- `startup.bat` (185B) - Windows startup
- `download_samples.bat` (230B) - Download sample WAVs
- `download_voices_tts-1.bat` (323B) - Download voices on Windows
- `download_voices_tts-1-hd.bat` (199B) - Download HD voices on Windows

**Assessment:** These are only useful if we support Windows deployment. Most raccoon missions run on Linux servers. Could move to `docs/windows/` or remove entirely.

### Sample Scripts (EVALUATE - Non-Essential)
- `download_samples.sh` (205B) - Downloads OpenAI sample WAV files
- `boot_docker_compose_ubuntu.sh` (623B) - One-time NVIDIA Docker setup for Ubuntu

**Assessment:** `download_samples.sh` is only for comparing against OpenAI's original voices - move to `docs/tools/`. The boot script is one-time setup - move to `docs/setup/`.

### Documentation (KEEP - Update)
- `README.md` (16.6K) - Main documentation
- `LICENSE` - **AGPL v3** (GNU Affero General Public License v3)
  - **Important:** Network services must provide source code to users
  - All modifications must be shared under AGPL v3
  - Perfect for raccoon mission - keeps TTS libre forever!
- `sample.env` - Environment variable examples

### CI/CD (KEEP)
- `.github/workflows/build-docker.yml` - GitHub Actions for building Docker images

### Configuration (KEEP)
- `.gitignore` - Git ignore patterns
- `config/config_files_will_go_here.txt` - Placeholder

## Files to Remove or Relocate

### REMOVE (Windows-specific, low value):
- `startup.bat`
- `download_samples.bat`
- `download_voices_tts-1.bat`
- `download_voices_tts-1-hd.bat`

### MOVE to `docs/tools/`:
- `download_samples.sh` (useful for voice comparison)
- `test_voices.sh` (useful for testing)

### MOVE to `docs/setup/`:
- `boot_docker_compose_ubuntu.sh` (one-time setup instructions)

## Abandoned TTS Models to Integrate

Based on the raccoon mission to rescue abandoned TTS projects:

### 1. **Piper TTS** (Currently Integrated)
- **Status:** ✅ Working with absolute paths
- **Original:** rhasspy/piper (abandoned)
- **Fork:** OHF-Voice/piper1-gpl v1.3.0 (no PyPI package)
- **Current:** Using PyPI piper-tts v1.2.0
- **Models:** ~100+ voices from HuggingFace rhasspy/piper-voices
- **Action:** Consider creating our own PyPI package from OHF-Voice fork

### 2. **Coqui XTTS** (Currently Integrated)
- **Status:** ✅ Integrated as tts-1-hd
- **Original:** coqui-ai/TTS (company shut down, repo archived)
- **Package:** coqui-tts (still on PyPI)
- **Models:** XTTS v2 from HuggingFace
- **Action:** Mirror XTTS v2 models, explore community forks

### 3. **Mozilla TTS** (Predecessor to Coqui)
- **Status:** ❌ Not integrated, abandoned
- **Original:** mozilla/TTS (archived, became Coqui)
- **Action:** Evaluate if any unique models worth preserving

### 4. **Silero TTS**
- **Status:** ❌ Not integrated
- **Repo:** snakers4/silero-models (still active!)
- **Models:** Fast, multilingual, small footprint
- **Languages:** Russian, English, German, Spanish, French
- **Action:** HIGH PRIORITY - Add Silero support

### 5. **Bark (Suno AI)**
- **Status:** ❌ Not integrated
- **Repo:** suno-ai/bark (archived, company pivoted)
- **Features:** Music, sound effects, non-speech audio
- **Action:** Evaluate for unique use cases

### 6. **Tortoise TTS**
- **Status:** ❌ Not integrated
- **Repo:** neonbjb/tortoise-tts (low activity)
- **Features:** High quality, very slow generation
- **Action:** Low priority - too slow for production

### 7. **StyleTTS2**
- **Status:** ❌ Not integrated
- **Repo:** yl4579/StyleTTS2 (active research project)
- **Features:** State-of-art quality, prosody
- **Action:** HIGH PRIORITY - Best quality available

### 8. **MetaVoice**
- **Status:** ❌ Not integrated
- **Repo:** metavoiceio/metavoice-src (partially abandoned)
- **Features:** Long-form TTS, emotional control
- **Action:** Evaluate community forks

### 9. **Fish Speech**
- **Status:** ❌ Not integrated
- **Repo:** fishaudio/fish-speech (active)
- **Features:** Fast, multilingual
- **Action:** MEDIUM PRIORITY - Active project

### 10. **Kokoro TTS**
- **Status:** ❌ Not integrated
- **Repo:** hexgrad/kokoro (new, active)
- **Features:** Fast, small, quality
- **Action:** MEDIUM PRIORITY - Promising new project

## Binary Mirror Strategy

### Problem
- HuggingFace models can disappear
- Upstream repositories get archived/deleted
- Need resilience for production systems

### Solution: Multi-Tier Mirror System

#### Tier 1: Primary Sources (Current)
- HuggingFace Hub
- PyPI packages
- GitHub releases

#### Tier 2: UncloseAI Mirror (Proposed)
- Self-hosted model repository
- Options:
  - MinIO/S3-compatible storage
  - LFS-backed Git repository
  - Dedicated file server with rsync

#### Tier 3: Fallback (Proposed)
- Archive.org uploads for critical models
- IPFS pinning for decentralization
- Torrent magnets for popular models

### Priority Models to Mirror
1. **Piper voices** - ~2GB from rhasspy/piper-voices
2. **XTTS v2** - ~1.8GB model + config
3. **Silero models** - ~100MB per language
4. **StyleTTS2 weights** - TBD size

### Implementation Plan
- [ ] Set up MinIO on ai.foxhop.net
- [ ] Create download script with fallback URLs
- [ ] Document mirror usage in docs
- [ ] Automated sync from upstream sources

## Recommended Refactoring

### 1. Directory Structure

```
uncloseai-speech/
├── docs/
│   ├── AUDIT.md (this file)
│   ├── MODELS.md (TTS engine documentation)
│   ├── MIRRORS.md (Binary mirror setup)
│   ├── API.md (API documentation)
│   └── setup/
│       └── nvidia-docker-ubuntu.md
├── scripts/
│   ├── add_voice.py (add custom voices to config)
│   ├── say.py (CLI TTS client)
│   ├── test_voices.sh (test all voices)
│   ├── download_samples.sh (download OpenAI sample WAVs)
│   ├── download_voices_tts-1.sh (Piper voice downloader)
│   └── download_voices_tts-1-hd.sh (XTTS voice downloader)
├── src/  (future refactor)
│   ├── engines/
│   │   ├── piper.py
│   │   ├── xtts.py
│   │   ├── silero.py (NEW)
│   │   └── base.py (NEW)
│   ├── api/
│   │   ├── openedai.py
│   │   └── server.py
│   └── utils/
│       └── audio_reader.py
├── config/
│   ├── voice_to_speaker.default.yaml
│   └── pre_process_map.default.yaml
├── Dockerfile
├── Dockerfile.min
├── docker-compose.yml
├── docker-compose.min.yml
├── docker-compose.rocm.yml
├── startup.sh
├── startup.min.sh
├── Makefile
├── speech.py (current monolith - will refactor to src/)
├── openedai.py (will move to src/api/)
├── audio_reader.py (will move to src/utils/)
├── requirements.txt
├── requirements-min.txt
├── requirements-rocm.txt
└── README.md
```

### 2. Engine Abstraction

Create a base engine class that all TTS engines implement:

```python
# src/engines/base.py
from abc import ABC, abstractmethod
from typing import BinaryIO, Optional

class TTSEngine(ABC):
    @abstractmethod
    def synthesize(self, text: str, voice: str,
                   speed: float = 1.0,
                   language: Optional[str] = None) -> BinaryIO:
        """Synthesize speech from text"""
        pass

    @abstractmethod
    def list_voices(self) -> list[str]:
        """Return available voices for this engine"""
        pass

    @abstractmethod
    def download_models(self, mirror_urls: list[str] = None):
        """Download required models with fallback mirrors"""
        pass
```

### 3. Configuration Schema

Extend voice config to support multiple engines:

```yaml
# Future voice_to_speaker.yaml format
tts-1:
  alloy:
    engine: piper  # or xtts, silero, styletts2
    model: /app/voices/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx
    speaker: 79
  nova:
    engine: silero
    model: v3_1_ru
    speaker: aidar

tts-1-hd:
  alloy:
    engine: xtts
    model: xtts
    speaker: /app/voices/alloy.wav
  custom-voice:
    engine: styletts2
    model: /app/models/styletts2-base
    speaker: /app/voices/custom.wav
    language: en
```

## Next Steps

### Immediate (This Session)
1. ✅ Create docs directory
2. ✅ Write audit document
3. [ ] Remove Windows .bat files
4. [ ] Relocate tools to docs/tools/
5. [ ] Create MODELS.md documenting each TTS engine

### Short Term (Next Few Sessions)
1. [ ] Implement engine abstraction layer
2. [ ] Add Silero TTS support
3. [ ] Set up model mirror on ai.foxhop.net
4. [ ] Test all existing functionality still works

### Medium Term
1. [ ] Add StyleTTS2 support
2. [ ] Add Fish Speech support
3. [ ] Implement fallback mirror system
4. [ ] Create automated model sync

### Long Term
1. [ ] Add Bark for sound effects
2. [ ] Implement voice cloning
3. [ ] Multi-language auto-detection
4. [ ] Performance benchmarking dashboard

## Raccoon Mission Status

🦝 **Mission:** Rescue abandoned TTS models and build a resilient unified system

**Current Status:**
- ✅ Piper TTS working with absolute paths
- ✅ XTTS integrated
- ✅ Deployment system (Makefile + vars.sh)
- ✅ Renamed to uncloseai-speech
- 📝 Repository audit complete
- 🔄 Documentation in progress

**Key Risks:**
- Upstream model URLs can break (need mirrors)
- PyPI packages could disappear (need vendoring strategy)
- HuggingFace rate limits (need caching)

**Mitigation:**
- Build multi-tier mirror system
- Document all model sources
- Create offline installation option
