INTEGRATED: Silero TTS (tts-1-silero)
- Added silero_wrapper class to speech.py for PyTorch Hub integration
- CPU-friendly, no GPU required (48kHz sample rate)
- Supports 5 languages: English (117 speakers), Russian, German, Spanish, French
- Loads on-demand via torch.hub from snakers4/silero-models
- Added 6 OpenAI-compatible voice mappings (alloy, echo, fable, etc.)
PREPARED: Chatterbox & Kokoro TTS
- Added dependencies to requirements.txt:
* git+https://github.com/resemble-ai/chatterbox.git
* transformers>=4.35.0 (for Kokoro)
* huggingface-hub[cli] (for model downloads)
- Created Makefile targets for downloading models
- Created test targets for all three new engines
Makefile Enhancements:
- make voices-silero: Download Silero models (en, ru, de, es, fr)
- make test-silero: Test Silero TTS endpoint
- make voices-chatterbox: Download Chatterbox models via HF CLI
- make test-chatterbox: Test Chatterbox with emotion control
- make voices-kokoro: Download Kokoro models via HF CLI
- make test-kokoro: Test Kokoro fast synthesis
speech.py Changes:
- Added silero_wrapper class with tts() method
- Added tts-1-silero model handler in generate_speech()
- Registered tts-1-silero model in app
- Added PCM media type for Silero (48000 Hz)
- Global state: silero_model, silero_speakers dict
Configuration:
- Updated voice_to_speaker.default.yaml with tts-1-silero section
- Mapped all 6 OpenAI voices to Silero speakers (en_0 through en_5)
Documentation:
- Updated docs/MODELS.md: Silero marked as ✅ INTEGRATED
- Updated roadmap: Phase 1 task 3 completed
- Updated status footer: 3 models rescued
- Added integration examples and Makefile commands
Next Steps:
- Test Silero integration in Docker
- Implement Chatterbox emotion control engine
- Implement Kokoro fast decoder engine
- Expanded Piper TTS and Coqui XTTS sections with full details
- Added Mozilla TTS (historical reference, skip in favor of Coqui)
- Added Chatterbox (voice assistant framework)
- Added Mimic 3 (Mycroft TTS, at-risk from shutdown)
- Added eSpeak NG (legacy formant synthesis, 100+ languages)
- Added Kokoro TTS (new 2024 project, StyleTTS2-based)
- Expanded Silero TTS as HIGHEST priority (actively maintained)
- Documented licenses, repositories, model hubs for all engines
- Added integration effort estimates and raccoon priorities
This update provides comprehensive tracking of all TTS engines for
the raccoon mission to rescue and integrate abandoned models.
🦝 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add raccoon emoji and mission statement
- List both git mirrors (unturf.com and github.com)
- Explain we're rescuing this abandoned project
- Link to comprehensive docs/
- Emphasize AGPL v3 libre software commitment
Original notice preserved but clarified this is now
an active fork bringing the project back to life.
🦝 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add github remote: git@github.com:russellballestrini/openedai-speech.git
- Add 'make push-all' to push to both origin and github
- Document in make help
This ensures the raccoon mission code is mirrored on GitHub
for visibility and resilience.
🦝 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
The Dockerfile was missing COPY scripts/ which caused voices-xtts
to fail when trying to run download_samples.sh
🦝 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Makefile improvements:
- Add voices-xtts target to download speaker samples
- Add test-xtts target for testing HD model
- Split voices into voices-piper and voices-xtts
- Update help text with all new targets
speech.py:
- Fix threading import scope issue for XTTS
- Remove redundant 'import threading' inside Piper block
docs/CLAUDE.md:
- Complete guide for Claude Code contributors
- Makefile-first development philosophy
- Never create dirs manually, always use Makefile
- Documentation requirements and testing philosophy
- Common mistakes to avoid
- Raccoon mission values and principles
This ensures consistent, repeatable deployments and makes it easy
to add new TTS engines following the same pattern.
🦝 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add step in sync target to copy sample.env to speech.env if missing
- Ensures Makefile works from scratch without manual intervention
- Tested full deployment cycle: deploy -> voices -> test
- Successfully creates ~/uncloseai-speech directory
- Downloads voices with absolute paths
- Generates working TTS audio
Raccoon mission: Makefile is now fully self-sufficient!
🦝 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Created docs/AUDIT.md with:
- Complete file inventory and assessment
- Analysis of 10+ abandoned TTS models to integrate
- Multi-tier binary mirror strategy
- Proposed refactoring with engine abstraction
- License clarification (AGPL v3, not MIT)
This audit identifies all non-essential files for removal and documents
the plan to rescue abandoned TTS projects (Silero, StyleTTS2, Bark, etc.)
into a unified resilient system.
🦝 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Renamed all references from openedai-speech to uncloseai-speech across
the entire codebase, including:
- Project name in README and documentation
- Docker image names in compose files
- Makefile deployment paths and container names
- Configuration examples in vars.sh.example
This establishes our raccoon mission fork as UncloseAI Speech, a unified
TTS system supporting multiple engines (Piper, XTTS, etc.) with OpenAI
API compatibility.
🦝 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit resolves the "download entire voices" issue by properly handling
absolute paths in Piper model configuration and improves the deployment system.
Key changes:
- speech.py: Detect absolute paths and omit --data-dir/--download-dir flags
when using absolute model paths, allowing Piper to load models directly
- speech.py: Add debug logging and stderr capture for Piper subprocess
- voice_to_speaker.default.yaml: Use absolute paths for all Piper models
- Makefile: Load deployment config from vars.sh for better security
- Makefile: Change restart to rebuild container ensuring code updates apply
- Add vars.sh.example template for deployment configuration
- .gitignore: Add vars.sh to prevent committing deployment secrets
Tested successfully with en_US-libritts_r-medium model using absolute path:
/app/voices/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx
🦝 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
OHF-Voice/piper1-gpl doesn't have installable Python package structure yet.
The real fix is using ABSOLUTE paths in voice_to_speaker.yaml, not newer Piper version.
Solution: Use /app/voices/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx
Co-Authored-By: Claude <noreply@anthropic.com>
SOLUTION FOUND! Piper requires ABSOLUTE paths to model files, not relative paths.
Changes:
- Update voice_to_speaker.default.yaml to use /app/voices/... absolute paths
- Update Makefile voices target to set absolute paths via sed
- Tested: Piper works with /app/voices/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx
Root cause: PyPI piper-tts package doesn't auto-download voices or support
voice name resolution. Must use full absolute file paths.
Co-Authored-By: Claude <noreply@anthropic.com>
- Add comprehensive Makefile for deployment to ai.foxhop.net
- Switch from abandoned rhasspy/piper to OHF-Voice/piper1-gpl v1.3.0
- Add voice download automation with correct directory structure
- Includes deploy, sync, test, logs, and voice management commands
Co-Authored-By: Claude <noreply@anthropic.com>