Name | par-cli-tts JSON |
Version |
0.2.0
JSON |
| download |
home_page | None |
Summary | PAR CLI TTS - Command line text-to-speech tool using ElevenLabs with voice caching and name resolution |
upload_time | 2025-08-19 15:24:18 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.11 |
license | MIT License
Copyright (c) 2024 Paul Robello
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. |
keywords |
audio
cli
elevenlabs
text-to-speech
tts
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# PAR CLI TTS
[](https://python.org)





A powerful command-line text-to-speech tool supporting multiple TTS providers (ElevenLabs, OpenAI, and Kokoro ONNX) with intelligent voice caching, name resolution, and flexible output options.
[](https://buymeacoffee.com/probello3)
## 🆕 What's New in v0.2.0
**✨ Major Update**: Configuration files, smarter caching, consistent error handling, and more!
### New Features
- 📝 **Configuration File Support** - Set defaults in `~/.config/par-tts/config.yaml`
- 🔄 **Smarter Voice Cache** - Change detection, manual refresh, and voice sample caching
- ❌ **Consistent Error Handling** - Clear error messages with proper exit codes
- 📥 **Multiple Input Methods** - Direct text, stdin piping, and file input (`@filename`)
- 🔊 **Volume Control** - Adjust playback volume (0.0 to 5.0) with platform-specific support
- 👂 **Voice Preview** - Test voices with sample text before using
### Improvements
- 🔒 **Enhanced Security** - API key sanitization in debug output
- 🚀 **Memory Efficiency** - Stream audio directly to files without buffering
- ✅ **Model Verification** - SHA256 checksum verification for downloads
- 🎯 **Better CLI** - All options now have short versions for quick access
- 💾 **Cache Management** - New commands for cache refresh and cleanup
## Features
- 🎭 **Multiple TTS Providers** - Support for ElevenLabs, OpenAI, and Kokoro ONNX with easy provider switching
- 📝 **Configuration File** - Set default preferences in YAML config file (`~/.config/par-tts/config.yaml`)
- 📥 **Flexible Input Methods** - Accept text from command line, stdin pipe, or files (`@filename`)
- 🎯 **Voice Name Support** - Use voice names like "Juniper" or "nova" instead of cryptic IDs
- 🔊 **Volume Control** - Adjust playback volume (0.0 to 5.0) with platform-specific support
- 👂 **Voice Preview** - Test voices with sample text using `--preview-voice`
- ⚡ **Smart Voice Caching** - Change detection, auto-refresh, and voice sample caching
- 🔍 **Partial Name Matching** - Type "char" to match "Charlotte" (ElevenLabs)
- 💾 **XDG-Compliant Storage** - Proper cache and data directory management across platforms
- 🎨 **Rich Terminal Output** - Beautiful colored output with progress indicators
- 🚀 **Memory Efficient** - Stream audio directly to files without memory buffering
- 🔒 **Security First** - API keys sanitized in debug output, SHA256 verification for downloads
- ❌ **Consistent Error Handling** - Clear error messages with categorized exit codes
- 🎚️ **Provider-Specific Options** - Stability/similarity for ElevenLabs, speed/format for OpenAI
- 🛠️ **Debug Mode** - Comprehensive debugging with sanitized output
- 📁 **Smart File Management** - Automatic cleanup or preservation of audio files
## Technology Stack
- **Python 3.11+** - Modern Python with type hints and async support
- **ElevenLabs SDK** - Official ElevenLabs API client for high-quality voices
- **OpenAI SDK** - Official OpenAI API client for TTS
- **Kokoro ONNX** - Offline TTS with ONNX Runtime for fast inference
- **Typer** - Modern CLI framework with automatic help generation
- **Rich** - Terminal formatting and beautiful output
- **Pydantic** - Data validation and settings management
- **Platformdirs** - Cross-platform directory management
- **Python-dotenv** - Environment variable management
## Prerequisites
To install PAR CLI TTS, make sure you have Python 3.11+ installed.
### [uv](https://pypi.org/project/uv/) is recommended
#### Linux and Mac
```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
```
#### Windows
```bash
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
```
## Installation
### Installation from PyPI (Recommended)
Install the latest stable version using uv:
```bash
uv tool install par-cli-tts
```
Or using pip:
```bash
pip install par-cli-tts
```
After installation, you can run the tool directly:
```bash
# Simple text-to-speech
par-tts "Hello, world!"
# Show help
par-tts --help
```
### Installation From Source
For development or to get the latest features:
1. Clone the repository:
```bash
git clone https://github.com/paulrobello/par-cli-tts.git
cd par-cli-tts
```
2. Install the package dependencies using uv:
```bash
uv sync
```
3. Run using uv:
```bash
uv run par-tts "Hello, world!"
```
### Kokoro ONNX Setup
Kokoro ONNX models are automatically downloaded on first use! The models are stored in an XDG-compliant data directory:
- **macOS**: `~/Library/Application Support/par-tts/par-tts-kokoro/`
- **Linux**: `~/.local/share/par-tts-kokoro/`
- **Windows**: `%LOCALAPPDATA%\par-tts\par-tts-kokoro\`
#### Automatic Download
When you first use the Kokoro ONNX provider, it will automatically download the required models (~106 MB total using quantized model):
```bash
# Models download automatically on first use
par-tts "Hello" --provider kokoro-onnx
```
#### Manual Model Management
You can also manage models manually using the `par-tts-kokoro` command:
```bash
# Download models manually
par-tts-kokoro download
# Show model information
par-tts-kokoro info
# Show model storage paths
par-tts-kokoro path
# Clear downloaded models
par-tts-kokoro clear
# Force re-download models
par-tts-kokoro download --force
```
#### Using Custom Model Paths
If you prefer to use models from a custom location, set environment variables:
```bash
export KOKORO_MODEL_PATH=/path/to/kokoro-v1.0.onnx
export KOKORO_VOICE_PATH=/path/to/voices-v1.0.bin
```
When these environment variables are set, automatic download is disabled.
## Configuration
### Configuration File (Recommended)
Create a configuration file to set your default preferences:
```bash
# Create a sample config file
par-tts --create-config
# Edit the config file
$EDITOR ~/.config/par-tts/config.yaml
```
Example configuration file:
```yaml
# Default provider (elevenlabs, openai, kokoro-onnx)
provider: kokoro-onnx
# Default voice
voice: Rachel
# Output settings
output_dir: ~/Documents/audio
keep_temp: false
# Audio settings
volume: 1.2
speed: 1.0
# ElevenLabs specific
stability: 0.5
similarity_boost: 0.75
# Behavior settings
play_audio: true
debug: false
```
### Environment Variables
Create a `.env` file in your project directory with your API keys:
```bash
# Required API keys (at least one for cloud providers)
ELEVENLABS_API_KEY=your_elevenlabs_key_here
OPENAI_API_KEY=your_openai_key_here
# Optional: Kokoro ONNX model paths (auto-downloads if not set)
# Set these only if you want to use custom model locations
# KOKORO_MODEL_PATH=/path/to/kokoro-v1.0.onnx
# KOKORO_VOICE_PATH=/path/to/voices-v1.0.bin
# Optional: Default provider (elevenlabs, openai, or kokoro-onnx)
TTS_PROVIDER=kokoro-onnx
# Optional: Default voices
ELEVENLABS_VOICE_ID=Juniper # or use voice ID
OPENAI_VOICE_ID=nova # alloy, echo, fable, onyx, nova, shimmer
KOKORO_VOICE_ID=af_sarah # See available voices with --list
# Optional: General voice (overrides provider-specific)
TTS_VOICE_ID=Juniper
```
## Usage
### Quick Start
If installed from PyPI:
```bash
# Simple text-to-speech with default provider
par-tts "Hello, world!"
# Pipe text from another command
echo "Hello from pipe" | par-tts
# Read text from a file
par-tts @input.txt
# Use OpenAI provider
par-tts "Hello" --provider openai --voice nova
# Use ElevenLabs with voice by name
par-tts "Hello" --provider elevenlabs --voice Juniper
# Use Kokoro ONNX (offline, auto-downloads models on first use)
par-tts "Hello" --provider kokoro-onnx --voice af_sarah
# Preview a voice before using it
par-tts --preview-voice Rachel --provider elevenlabs
# Save to file with custom volume
par-tts "Save this" --output audio.mp3 --volume 1.5
```
If running from source:
```bash
# Simple text-to-speech with default provider
uv run par-tts "Hello, world!"
# Use OpenAI provider
uv run par-tts "Hello" --provider openai --voice nova
# Use ElevenLabs with voice by name
uv run par-tts "Hello" --provider elevenlabs --voice Juniper
# Use Kokoro ONNX (offline, auto-downloads models on first use)
uv run par-tts "Hello" --provider kokoro-onnx --voice af_sarah
# Save to file
uv run par-tts "Save this" --output audio.mp3
```
### Basic Examples
```bash
# Simple text-to-speech with default provider (Kokoro ONNX - offline)
par-tts "Hello, world!"
# Input from stdin (pipe)
echo "Hello from stdin" | par-tts
cat script.txt | par-tts --voice nova
# Input from file
par-tts @speech.txt
par-tts @/path/to/long-text.md --provider openai
# Preview voices before using them
par-tts --preview-voice Juniper --provider elevenlabs
par-tts -V af_sarah --provider kokoro-onnx
# Use OpenAI provider
par-tts "Hello from OpenAI" --provider openai --voice nova
# Use ElevenLabs with voice by name
par-tts "Hello from ElevenLabs" --provider elevenlabs --voice Juniper
# Use Kokoro ONNX with language specification
par-tts "Hello from Kokoro" --provider kokoro-onnx --voice af_sarah --lang en-us
# Use partial name matching (ElevenLabs)
par-tts "Hello" --voice char # matches Charlotte
# Save to file without playing
par-tts "Save this audio" --output audio.mp3 --no-play
# Adjust volume (0.0 = silent, 1.0 = normal, 2.0 = double)
par-tts "Louder please" --volume 1.5
par-tts "Whisper quiet" -w 0.3
# Adjust ElevenLabs voice settings
par-tts "Stable voice" --stability 0.8 --similarity 0.7
# Adjust OpenAI speech speed
par-tts "Fast speech" --provider openai --speed 1.5
# Keep temp files after playback
par-tts "Keep this" --keep-temp
# Specify custom temp directory (files are kept)
par-tts "Custom location" --temp-dir ./my_audio
# Combine output filename with temp directory
par-tts "Save here" --output my_file.mp3 --temp-dir ./audio_files
```
### Advanced Usage
#### Input Methods
```bash
# Direct text input
par-tts "Direct text input"
# From stdin (automatic detection)
echo "Piped input" | par-tts
# From stdin (explicit)
par-tts - < input.txt
# From file
par-tts @readme.md
par-tts @/absolute/path/to/file.txt
# Chain commands
fortune | par-tts --voice nova
curl -s https://api.example.com/text | par-tts
```
#### Provider Management
```bash
# List available providers
par-tts --list-providers
par-tts -L
# List voices for a specific provider
par-tts --provider openai --list
par-tts -P elevenlabs -l
par-tts --provider kokoro-onnx --list
# Preview voices
par-tts --preview-voice nova --provider openai
par-tts -V Juniper -P elevenlabs
# Show debug information (with sanitized API keys)
par-tts "Test" --debug
par-tts "Test" -d
# Show configuration
par-tts "Test" --dump
par-tts "Test" -D
```
#### Cache Management (ElevenLabs)
```bash
# Force refresh voice cache
par-tts --refresh-cache --provider elevenlabs
# Clear cached voice samples
par-tts --clear-cache-samples --provider elevenlabs
# Or use Makefile commands
make refresh-cache # Force refresh voice cache
make clear-cache # Clear voice cache including samples
```
#### Output File Behavior
- **With `--output full/path.mp3`**: Saves to exact path specified
- **With `--output filename.mp3 --temp-dir dir`**: Saves to `dir/filename.mp3`
- **With `--temp-dir dir` only**: Saves to `dir/tts_TIMESTAMP.mp3` (kept)
- **With `--keep-temp`**: Temporary files are not deleted after playback
- **Default behavior**: Temp files are auto-deleted after playback
## Command Line Options
### Core Options
| Option | Short | Description | Default |
|--------|-------|-------------|---------|
| `text` | | Text to convert to speech (required) | |
| `--provider` | `-P` | TTS provider to use (elevenlabs, openai, kokoro-onnx) | kokoro-onnx |
| `--voice` | `-v` | Voice name or ID to use | Provider default |
| `--output` | `-o` | Output file path | None (temp file) |
| `--model` | `-m` | Model to use (provider-specific) | Provider default |
| `--play/--no-play` | `-p` | Play audio after generation | --play |
### ElevenLabs Options
| Option | Short | Description | Default |
|--------|-------|-------------|---------|
| `--stability` | `-s` | Voice stability (0.0 to 1.0) | 0.5 |
| `--similarity` | `-S` | Voice similarity boost (0.0 to 1.0) | 0.5 |
### OpenAI Options
| Option | Short | Description | Default |
|--------|-------|-------------|---------|
| `--speed` | `-r` | Speech speed (0.25 to 4.0) | 1.0 |
| `--format` | `-f` | Audio format (mp3, opus, aac, flac, wav) | mp3 |
### Kokoro ONNX Options
| Option | Short | Description | Default |
|--------|-------|-------------|---------|
| `--lang` | `-g` | Language code (e.g., en-us) | en-us |
| `--speed` | `-r` | Speech speed multiplier | 1.0 |
### File Management
| Option | Short | Description | Default |
|--------|-------|-------------|---------|
| `--keep-temp` | `-k` | Keep temporary audio files after playback | False |
| `--temp-dir` | `-t` | Directory for temporary audio files | System temp |
| `--volume` | `-w` | Playback volume (0.0-5.0, 1.0=normal) | 1.0 |
### Utility Options
| Option | Short | Description | Default |
|--------|-------|-------------|---------|
| `--debug` | `-d` | Show debug information (API keys sanitized) | False |
| `--dump` | `-D` | Dump configuration and exit | False |
| `--list` | `-l` | List available voices for provider | False |
| `--preview-voice` | `-V` | Preview a voice with sample text | None |
| `--list-providers` | `-L` | List available TTS providers | False |
| `--create-config` | | Create sample configuration file | False |
| `--refresh-cache` | | Force refresh voice cache (ElevenLabs) | False |
| `--clear-cache-samples` | | Clear cached voice samples | False |
## Providers
### ElevenLabs
- **Models**: eleven_monolingual_v1, eleven_multilingual_v1, eleven_multilingual_v2
- **Voices**: 25+ voices with different accents and styles
- **Features**: Voice cloning, stability control, similarity boost
- **Smart Caching**:
- Automatic 7-day cache for voice listings
- Change detection via hashing
- Voice sample caching for offline preview
- Manual refresh with `--refresh-cache`
- **API Key**: Set `ELEVENLABS_API_KEY` in your .env file
### OpenAI
- **Models**: tts-1 (optimized for speed), tts-1-hd (optimized for quality)
- **Voices**:
- alloy - Neutral and balanced
- echo - Smooth and articulate
- fable - Expressive and animated
- onyx - Deep and authoritative
- nova - Warm and friendly (default)
- shimmer - Soft and gentle
- **Features**: Speed control (0.25x to 4x), multiple output formats
- **Output Formats**: mp3, opus, aac, flac, wav, pcm
- **API Key**: Set `OPENAI_API_KEY` in your .env file
### Kokoro ONNX
- **Models**: kokoro-v1.0 (ONNX format, runs locally)
- **Voices**: Multiple voices including af_sarah (default) and others
- **Features**:
- Offline operation - no API key required
- Fast CPU/GPU inference with ONNX Runtime
- Language support with phoneme-based synthesis
- Speed control
- **Output Formats**: wav, flac, ogg
- **Requirements**:
- Models auto-download on first use (~106 MB)
- Uses int8 quantized model for efficiency
- Stored in XDG-compliant data directory
- No API key needed - runs entirely locally
- Manual download available via `par-tts-kokoro download`
## Cache Locations
The ElevenLabs voice cache is stored in platform-specific directories:
- **macOS**: `~/Library/Caches/par-tts-elevenlabs/voice_cache.yaml`
- **Linux**: `~/.cache/par-tts-elevenlabs/voice_cache.yaml`
- **Windows**: `%LOCALAPPDATA%\par-tts-elevenlabs\Cache\voice_cache.yaml`
Cache entries expire after 7 days and are automatically refreshed when needed.
## Development
### Setup Development Environment
```bash
# Clone repository
git clone https://github.com/paulrobello/par-cli-tts.git
cd par-cli-tts
# Install dependencies
uv sync
# Run tests
uv run pytest
# Run linting and formatting
make checkall
```
### Development Commands
```bash
# Format, lint, and type check
make checkall
# Individual commands
make format # Format with ruff
make lint # Lint with ruff
make typecheck # Type check with pyright
# Run the app
make run # Run with test message
make app_help # Show app help
# Voice management
make list-voices # List available voices
make update-cache # Update voice cache
make clear-cache # Clear voice cache
# Kokoro ONNX model management
make kokoro-download # Download Kokoro models
make kokoro-info # Show model information
make kokoro-clear # Clear Kokoro models
make kokoro-path # Show model paths
# Build and package
make package # Build distribution packages
make clean # Clean build artifacts
```
### Project Structure
```
par-cli-tts/
├── src/
│ ├── __init__.py
│ ├── tts_cli.py # Main CLI application
│ ├── voice_cache.py # Voice caching system
│ ├── model_downloader.py # Kokoro model download manager
│ ├── utils.py # Utility functions (streaming, security)
│ ├── config.py # Configuration dataclasses
│ ├── config_file.py # Configuration file management
│ ├── errors.py # Error handling utilities
│ └── providers/ # TTS provider implementations
│ ├── __init__.py
│ ├── base.py # Abstract base provider
│ ├── elevenlabs.py # ElevenLabs implementation
│ ├── openai.py # OpenAI implementation
│ └── kokoro_onnx.py # Kokoro ONNX implementation
├── docs/
│ ├── ARCHITECTURE.md # System architecture documentation
│ └── CLAUDE.md # Development guidelines
├── .env.example # Example environment file
├── pyproject.toml # Project configuration
├── Makefile # Development commands
├── CLAUDE.md # AI assistant context
└── README.md # This file
```
## Troubleshooting
### Common Issues
1. **API Key Not Found**
- Ensure your `.env` file contains the correct API keys
- Check that the `.env` file is in the current directory
- Verify environment variable names match exactly
- Note: Kokoro ONNX doesn't require an API key
2. **Voice Not Found**
- Use `--list` to see available voices for your provider
- Check spelling and capitalization of voice names
- For ElevenLabs, use `--refresh-cache` to update voice list
3. **Configuration File Issues**
- Run `--create-config` to generate a sample config
- Check file location: `~/.config/par-tts/config.yaml`
- Verify YAML syntax (use spaces, not tabs)
- CLI arguments override config file settings
4. **Cache Problems (ElevenLabs)**
- Force refresh with `--refresh-cache`
- Clear samples with `--clear-cache-samples`
- Cache updates automatically detect changes every 24 hours
5. **Audio Not Playing**
- Ensure you have audio output devices connected
- Check system volume settings
- Try adjusting `--volume` flag
- On Linux, verify audio subsystem (ALSA/PulseAudio) is working
6. **Slow Response Times**
- Voice previews are cached after first use
- Use `--debug` to see detailed timing information
- Kokoro ONNX models download on first use (~106 MB)
7. **File Not Saved**
- Check write permissions for the output directory
- Ensure the path exists or parent directories can be created
- Use absolute paths to avoid confusion
### Debug Mode
Enable debug mode for detailed information:
```bash
# Show debug information during execution
par-tts "Test message" --debug
# Dump configuration without executing
par-tts "Test" --dump
```
## Contributing
Contributions are welcome! Please feel free to submit issues, feature requests, or pull requests.
### How to Contribute
1. Fork the repository
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
3. Make your changes
4. Run tests and checks (`make checkall`)
5. Commit your changes (`git commit -m 'Add amazing feature'`)
6. Push to the branch (`git push origin feature/amazing-feature`)
7. Open a Pull Request
### Development Guidelines
- Use type hints for all function parameters and returns
- Follow Google-style docstrings
- Ensure all tests pass before submitting PR
- Update documentation for new features
- Keep commits atomic and well-described
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## Author
**Paul Robello**
Email: [probello@gmail.com](mailto:probello@gmail.com)
GitHub: [@paulrobello](https://github.com/paulrobello)
## Acknowledgments
- [ElevenLabs](https://elevenlabs.io/) for their excellent TTS API
- [OpenAI](https://openai.com/) for their TTS capabilities
- [Typer](https://typer.tiangolo.com/) for the elegant CLI framework
- [Rich](https://rich.readthedocs.io/) for beautiful terminal formatting
## Support
If you find this tool useful, consider:
- ⭐ Starring the repository
- 🐛 Reporting bugs or requesting features
- 📖 Improving documentation
- ☕ [Buying me a coffee](https://buymeacoffee.com/probello3)
Raw data
{
"_id": null,
"home_page": null,
"name": "par-cli-tts",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.11",
"maintainer_email": "Paul Robello <probello@gmail.com>",
"keywords": "audio, cli, elevenlabs, text-to-speech, tts",
"author": null,
"author_email": "Paul Robello <probello@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/00/9a/96eb4051d10b300fd1d151cb9b8d047faab09b6dd1661cd8b6f14f8edf5a/par_cli_tts-0.2.0.tar.gz",
"platform": null,
"description": "# PAR CLI TTS\n\n[](https://python.org)\n\n\n\n\n\n\n\nA powerful command-line text-to-speech tool supporting multiple TTS providers (ElevenLabs, OpenAI, and Kokoro ONNX) with intelligent voice caching, name resolution, and flexible output options.\n\n[](https://buymeacoffee.com/probello3)\n\n## \ud83c\udd95 What's New in v0.2.0\n\n**\u2728 Major Update**: Configuration files, smarter caching, consistent error handling, and more!\n\n### New Features\n- \ud83d\udcdd **Configuration File Support** - Set defaults in `~/.config/par-tts/config.yaml`\n- \ud83d\udd04 **Smarter Voice Cache** - Change detection, manual refresh, and voice sample caching\n- \u274c **Consistent Error Handling** - Clear error messages with proper exit codes\n- \ud83d\udce5 **Multiple Input Methods** - Direct text, stdin piping, and file input (`@filename`)\n- \ud83d\udd0a **Volume Control** - Adjust playback volume (0.0 to 5.0) with platform-specific support\n- \ud83d\udc42 **Voice Preview** - Test voices with sample text before using\n\n### Improvements\n- \ud83d\udd12 **Enhanced Security** - API key sanitization in debug output\n- \ud83d\ude80 **Memory Efficiency** - Stream audio directly to files without buffering\n- \u2705 **Model Verification** - SHA256 checksum verification for downloads\n- \ud83c\udfaf **Better CLI** - All options now have short versions for quick access\n- \ud83d\udcbe **Cache Management** - New commands for cache refresh and cleanup\n\n## Features\n\n- \ud83c\udfad **Multiple TTS Providers** - Support for ElevenLabs, OpenAI, and Kokoro ONNX with easy provider switching\n- \ud83d\udcdd **Configuration File** - Set default preferences in YAML config file (`~/.config/par-tts/config.yaml`)\n- \ud83d\udce5 **Flexible Input Methods** - Accept text from command line, stdin pipe, or files (`@filename`)\n- \ud83c\udfaf **Voice Name Support** - Use voice names like \"Juniper\" or \"nova\" instead of cryptic IDs\n- \ud83d\udd0a **Volume Control** - Adjust playback volume (0.0 to 5.0) with platform-specific support\n- \ud83d\udc42 **Voice Preview** - Test voices with sample text using `--preview-voice`\n- \u26a1 **Smart Voice Caching** - Change detection, auto-refresh, and voice sample caching\n- \ud83d\udd0d **Partial Name Matching** - Type \"char\" to match \"Charlotte\" (ElevenLabs)\n- \ud83d\udcbe **XDG-Compliant Storage** - Proper cache and data directory management across platforms\n- \ud83c\udfa8 **Rich Terminal Output** - Beautiful colored output with progress indicators\n- \ud83d\ude80 **Memory Efficient** - Stream audio directly to files without memory buffering\n- \ud83d\udd12 **Security First** - API keys sanitized in debug output, SHA256 verification for downloads\n- \u274c **Consistent Error Handling** - Clear error messages with categorized exit codes\n- \ud83c\udf9a\ufe0f **Provider-Specific Options** - Stability/similarity for ElevenLabs, speed/format for OpenAI\n- \ud83d\udee0\ufe0f **Debug Mode** - Comprehensive debugging with sanitized output\n- \ud83d\udcc1 **Smart File Management** - Automatic cleanup or preservation of audio files\n\n## Technology Stack\n\n- **Python 3.11+** - Modern Python with type hints and async support\n- **ElevenLabs SDK** - Official ElevenLabs API client for high-quality voices\n- **OpenAI SDK** - Official OpenAI API client for TTS\n- **Kokoro ONNX** - Offline TTS with ONNX Runtime for fast inference\n- **Typer** - Modern CLI framework with automatic help generation\n- **Rich** - Terminal formatting and beautiful output\n- **Pydantic** - Data validation and settings management\n- **Platformdirs** - Cross-platform directory management\n- **Python-dotenv** - Environment variable management\n\n## Prerequisites\n\nTo install PAR CLI TTS, make sure you have Python 3.11+ installed.\n\n### [uv](https://pypi.org/project/uv/) is recommended\n\n#### Linux and Mac\n```bash\ncurl -LsSf https://astral.sh/uv/install.sh | sh\n```\n\n#### Windows\n```bash\npowershell -ExecutionPolicy ByPass -c \"irm https://astral.sh/uv/install.ps1 | iex\"\n```\n\n## Installation\n\n### Installation from PyPI (Recommended)\n\nInstall the latest stable version using uv:\n\n```bash\nuv tool install par-cli-tts\n```\n\nOr using pip:\n\n```bash\npip install par-cli-tts\n```\n\nAfter installation, you can run the tool directly:\n\n```bash\n# Simple text-to-speech\npar-tts \"Hello, world!\"\n\n# Show help\npar-tts --help\n```\n\n### Installation From Source\n\nFor development or to get the latest features:\n\n1. Clone the repository:\n ```bash\n git clone https://github.com/paulrobello/par-cli-tts.git\n cd par-cli-tts\n ```\n\n2. Install the package dependencies using uv:\n ```bash\n uv sync\n ```\n\n3. Run using uv:\n ```bash\n uv run par-tts \"Hello, world!\"\n ```\n\n### Kokoro ONNX Setup\n\nKokoro ONNX models are automatically downloaded on first use! The models are stored in an XDG-compliant data directory:\n\n- **macOS**: `~/Library/Application Support/par-tts/par-tts-kokoro/`\n- **Linux**: `~/.local/share/par-tts-kokoro/`\n- **Windows**: `%LOCALAPPDATA%\\par-tts\\par-tts-kokoro\\`\n\n#### Automatic Download\n\nWhen you first use the Kokoro ONNX provider, it will automatically download the required models (~106 MB total using quantized model):\n\n```bash\n# Models download automatically on first use\npar-tts \"Hello\" --provider kokoro-onnx\n```\n\n#### Manual Model Management\n\nYou can also manage models manually using the `par-tts-kokoro` command:\n\n```bash\n# Download models manually\npar-tts-kokoro download\n\n# Show model information\npar-tts-kokoro info\n\n# Show model storage paths\npar-tts-kokoro path\n\n# Clear downloaded models\npar-tts-kokoro clear\n\n# Force re-download models\npar-tts-kokoro download --force\n```\n\n#### Using Custom Model Paths\n\nIf you prefer to use models from a custom location, set environment variables:\n\n```bash\nexport KOKORO_MODEL_PATH=/path/to/kokoro-v1.0.onnx\nexport KOKORO_VOICE_PATH=/path/to/voices-v1.0.bin\n```\n\nWhen these environment variables are set, automatic download is disabled.\n\n## Configuration\n\n### Configuration File (Recommended)\n\nCreate a configuration file to set your default preferences:\n\n```bash\n# Create a sample config file\npar-tts --create-config\n\n# Edit the config file\n$EDITOR ~/.config/par-tts/config.yaml\n```\n\nExample configuration file:\n\n```yaml\n# Default provider (elevenlabs, openai, kokoro-onnx)\nprovider: kokoro-onnx\n\n# Default voice\nvoice: Rachel\n\n# Output settings\noutput_dir: ~/Documents/audio\nkeep_temp: false\n\n# Audio settings\nvolume: 1.2\nspeed: 1.0\n\n# ElevenLabs specific\nstability: 0.5\nsimilarity_boost: 0.75\n\n# Behavior settings\nplay_audio: true\ndebug: false\n```\n\n### Environment Variables\n\nCreate a `.env` file in your project directory with your API keys:\n\n```bash\n# Required API keys (at least one for cloud providers)\nELEVENLABS_API_KEY=your_elevenlabs_key_here\nOPENAI_API_KEY=your_openai_key_here\n\n# Optional: Kokoro ONNX model paths (auto-downloads if not set)\n# Set these only if you want to use custom model locations\n# KOKORO_MODEL_PATH=/path/to/kokoro-v1.0.onnx\n# KOKORO_VOICE_PATH=/path/to/voices-v1.0.bin\n\n# Optional: Default provider (elevenlabs, openai, or kokoro-onnx)\nTTS_PROVIDER=kokoro-onnx\n\n# Optional: Default voices\nELEVENLABS_VOICE_ID=Juniper # or use voice ID\nOPENAI_VOICE_ID=nova # alloy, echo, fable, onyx, nova, shimmer\nKOKORO_VOICE_ID=af_sarah # See available voices with --list\n\n# Optional: General voice (overrides provider-specific)\nTTS_VOICE_ID=Juniper\n```\n\n## Usage\n\n### Quick Start\n\nIf installed from PyPI:\n```bash\n# Simple text-to-speech with default provider\npar-tts \"Hello, world!\"\n\n# Pipe text from another command\necho \"Hello from pipe\" | par-tts\n\n# Read text from a file\npar-tts @input.txt\n\n# Use OpenAI provider\npar-tts \"Hello\" --provider openai --voice nova\n\n# Use ElevenLabs with voice by name\npar-tts \"Hello\" --provider elevenlabs --voice Juniper\n\n# Use Kokoro ONNX (offline, auto-downloads models on first use)\npar-tts \"Hello\" --provider kokoro-onnx --voice af_sarah\n\n# Preview a voice before using it\npar-tts --preview-voice Rachel --provider elevenlabs\n\n# Save to file with custom volume\npar-tts \"Save this\" --output audio.mp3 --volume 1.5\n```\n\nIf running from source:\n```bash\n# Simple text-to-speech with default provider\nuv run par-tts \"Hello, world!\"\n\n# Use OpenAI provider\nuv run par-tts \"Hello\" --provider openai --voice nova\n\n# Use ElevenLabs with voice by name\nuv run par-tts \"Hello\" --provider elevenlabs --voice Juniper\n\n# Use Kokoro ONNX (offline, auto-downloads models on first use)\nuv run par-tts \"Hello\" --provider kokoro-onnx --voice af_sarah\n\n# Save to file\nuv run par-tts \"Save this\" --output audio.mp3\n```\n\n### Basic Examples\n\n```bash\n# Simple text-to-speech with default provider (Kokoro ONNX - offline)\npar-tts \"Hello, world!\"\n\n# Input from stdin (pipe)\necho \"Hello from stdin\" | par-tts\ncat script.txt | par-tts --voice nova\n\n# Input from file\npar-tts @speech.txt\npar-tts @/path/to/long-text.md --provider openai\n\n# Preview voices before using them\npar-tts --preview-voice Juniper --provider elevenlabs\npar-tts -V af_sarah --provider kokoro-onnx\n\n# Use OpenAI provider\npar-tts \"Hello from OpenAI\" --provider openai --voice nova\n\n# Use ElevenLabs with voice by name\npar-tts \"Hello from ElevenLabs\" --provider elevenlabs --voice Juniper\n\n# Use Kokoro ONNX with language specification\npar-tts \"Hello from Kokoro\" --provider kokoro-onnx --voice af_sarah --lang en-us\n\n# Use partial name matching (ElevenLabs)\npar-tts \"Hello\" --voice char # matches Charlotte\n\n# Save to file without playing\npar-tts \"Save this audio\" --output audio.mp3 --no-play\n\n# Adjust volume (0.0 = silent, 1.0 = normal, 2.0 = double)\npar-tts \"Louder please\" --volume 1.5\npar-tts \"Whisper quiet\" -w 0.3\n\n# Adjust ElevenLabs voice settings\npar-tts \"Stable voice\" --stability 0.8 --similarity 0.7\n\n# Adjust OpenAI speech speed\npar-tts \"Fast speech\" --provider openai --speed 1.5\n\n# Keep temp files after playback\npar-tts \"Keep this\" --keep-temp\n\n# Specify custom temp directory (files are kept)\npar-tts \"Custom location\" --temp-dir ./my_audio\n\n# Combine output filename with temp directory\npar-tts \"Save here\" --output my_file.mp3 --temp-dir ./audio_files\n```\n\n### Advanced Usage\n\n#### Input Methods\n\n```bash\n# Direct text input\npar-tts \"Direct text input\"\n\n# From stdin (automatic detection)\necho \"Piped input\" | par-tts\n\n# From stdin (explicit)\npar-tts - < input.txt\n\n# From file\npar-tts @readme.md\npar-tts @/absolute/path/to/file.txt\n\n# Chain commands\nfortune | par-tts --voice nova\ncurl -s https://api.example.com/text | par-tts\n```\n\n#### Provider Management\n\n```bash\n# List available providers\npar-tts --list-providers\npar-tts -L\n\n# List voices for a specific provider\npar-tts --provider openai --list\npar-tts -P elevenlabs -l\npar-tts --provider kokoro-onnx --list\n\n# Preview voices\npar-tts --preview-voice nova --provider openai\npar-tts -V Juniper -P elevenlabs\n\n# Show debug information (with sanitized API keys)\npar-tts \"Test\" --debug\npar-tts \"Test\" -d\n\n# Show configuration\npar-tts \"Test\" --dump\npar-tts \"Test\" -D\n```\n\n#### Cache Management (ElevenLabs)\n\n```bash\n# Force refresh voice cache\npar-tts --refresh-cache --provider elevenlabs\n\n# Clear cached voice samples\npar-tts --clear-cache-samples --provider elevenlabs\n\n# Or use Makefile commands\nmake refresh-cache # Force refresh voice cache\nmake clear-cache # Clear voice cache including samples\n```\n\n#### Output File Behavior\n\n- **With `--output full/path.mp3`**: Saves to exact path specified\n- **With `--output filename.mp3 --temp-dir dir`**: Saves to `dir/filename.mp3`\n- **With `--temp-dir dir` only**: Saves to `dir/tts_TIMESTAMP.mp3` (kept)\n- **With `--keep-temp`**: Temporary files are not deleted after playback\n- **Default behavior**: Temp files are auto-deleted after playback\n\n## Command Line Options\n\n### Core Options\n\n| Option | Short | Description | Default |\n|--------|-------|-------------|---------|\n| `text` | | Text to convert to speech (required) | |\n| `--provider` | `-P` | TTS provider to use (elevenlabs, openai, kokoro-onnx) | kokoro-onnx |\n| `--voice` | `-v` | Voice name or ID to use | Provider default |\n| `--output` | `-o` | Output file path | None (temp file) |\n| `--model` | `-m` | Model to use (provider-specific) | Provider default |\n| `--play/--no-play` | `-p` | Play audio after generation | --play |\n\n### ElevenLabs Options\n\n| Option | Short | Description | Default |\n|--------|-------|-------------|---------|\n| `--stability` | `-s` | Voice stability (0.0 to 1.0) | 0.5 |\n| `--similarity` | `-S` | Voice similarity boost (0.0 to 1.0) | 0.5 |\n\n### OpenAI Options\n\n| Option | Short | Description | Default |\n|--------|-------|-------------|---------|\n| `--speed` | `-r` | Speech speed (0.25 to 4.0) | 1.0 |\n| `--format` | `-f` | Audio format (mp3, opus, aac, flac, wav) | mp3 |\n\n### Kokoro ONNX Options\n\n| Option | Short | Description | Default |\n|--------|-------|-------------|---------|\n| `--lang` | `-g` | Language code (e.g., en-us) | en-us |\n| `--speed` | `-r` | Speech speed multiplier | 1.0 |\n\n### File Management\n\n| Option | Short | Description | Default |\n|--------|-------|-------------|---------|\n| `--keep-temp` | `-k` | Keep temporary audio files after playback | False |\n| `--temp-dir` | `-t` | Directory for temporary audio files | System temp |\n| `--volume` | `-w` | Playback volume (0.0-5.0, 1.0=normal) | 1.0 |\n\n### Utility Options\n\n| Option | Short | Description | Default |\n|--------|-------|-------------|---------|\n| `--debug` | `-d` | Show debug information (API keys sanitized) | False |\n| `--dump` | `-D` | Dump configuration and exit | False |\n| `--list` | `-l` | List available voices for provider | False |\n| `--preview-voice` | `-V` | Preview a voice with sample text | None |\n| `--list-providers` | `-L` | List available TTS providers | False |\n| `--create-config` | | Create sample configuration file | False |\n| `--refresh-cache` | | Force refresh voice cache (ElevenLabs) | False |\n| `--clear-cache-samples` | | Clear cached voice samples | False |\n\n## Providers\n\n### ElevenLabs\n\n- **Models**: eleven_monolingual_v1, eleven_multilingual_v1, eleven_multilingual_v2\n- **Voices**: 25+ voices with different accents and styles\n- **Features**: Voice cloning, stability control, similarity boost\n- **Smart Caching**:\n - Automatic 7-day cache for voice listings\n - Change detection via hashing\n - Voice sample caching for offline preview\n - Manual refresh with `--refresh-cache`\n- **API Key**: Set `ELEVENLABS_API_KEY` in your .env file\n\n### OpenAI\n\n- **Models**: tts-1 (optimized for speed), tts-1-hd (optimized for quality)\n- **Voices**:\n - alloy - Neutral and balanced\n - echo - Smooth and articulate\n - fable - Expressive and animated\n - onyx - Deep and authoritative\n - nova - Warm and friendly (default)\n - shimmer - Soft and gentle\n- **Features**: Speed control (0.25x to 4x), multiple output formats\n- **Output Formats**: mp3, opus, aac, flac, wav, pcm\n- **API Key**: Set `OPENAI_API_KEY` in your .env file\n\n### Kokoro ONNX\n\n- **Models**: kokoro-v1.0 (ONNX format, runs locally)\n- **Voices**: Multiple voices including af_sarah (default) and others\n- **Features**:\n - Offline operation - no API key required\n - Fast CPU/GPU inference with ONNX Runtime\n - Language support with phoneme-based synthesis\n - Speed control\n- **Output Formats**: wav, flac, ogg\n- **Requirements**:\n - Models auto-download on first use (~106 MB)\n - Uses int8 quantized model for efficiency\n - Stored in XDG-compliant data directory\n - No API key needed - runs entirely locally\n - Manual download available via `par-tts-kokoro download`\n\n## Cache Locations\n\nThe ElevenLabs voice cache is stored in platform-specific directories:\n\n- **macOS**: `~/Library/Caches/par-tts-elevenlabs/voice_cache.yaml`\n- **Linux**: `~/.cache/par-tts-elevenlabs/voice_cache.yaml`\n- **Windows**: `%LOCALAPPDATA%\\par-tts-elevenlabs\\Cache\\voice_cache.yaml`\n\nCache entries expire after 7 days and are automatically refreshed when needed.\n\n## Development\n\n### Setup Development Environment\n\n```bash\n# Clone repository\ngit clone https://github.com/paulrobello/par-cli-tts.git\ncd par-cli-tts\n\n# Install dependencies\nuv sync\n\n# Run tests\nuv run pytest\n\n# Run linting and formatting\nmake checkall\n```\n\n### Development Commands\n\n```bash\n# Format, lint, and type check\nmake checkall\n\n# Individual commands\nmake format # Format with ruff\nmake lint # Lint with ruff\nmake typecheck # Type check with pyright\n\n# Run the app\nmake run # Run with test message\nmake app_help # Show app help\n\n# Voice management\nmake list-voices # List available voices\nmake update-cache # Update voice cache\nmake clear-cache # Clear voice cache\n\n# Kokoro ONNX model management\nmake kokoro-download # Download Kokoro models\nmake kokoro-info # Show model information\nmake kokoro-clear # Clear Kokoro models\nmake kokoro-path # Show model paths\n\n# Build and package\nmake package # Build distribution packages\nmake clean # Clean build artifacts\n```\n\n### Project Structure\n\n```\npar-cli-tts/\n\u251c\u2500\u2500 src/\n\u2502 \u251c\u2500\u2500 __init__.py\n\u2502 \u251c\u2500\u2500 tts_cli.py # Main CLI application\n\u2502 \u251c\u2500\u2500 voice_cache.py # Voice caching system\n\u2502 \u251c\u2500\u2500 model_downloader.py # Kokoro model download manager\n\u2502 \u251c\u2500\u2500 utils.py # Utility functions (streaming, security)\n\u2502 \u251c\u2500\u2500 config.py # Configuration dataclasses\n\u2502 \u251c\u2500\u2500 config_file.py # Configuration file management\n\u2502 \u251c\u2500\u2500 errors.py # Error handling utilities\n\u2502 \u2514\u2500\u2500 providers/ # TTS provider implementations\n\u2502 \u251c\u2500\u2500 __init__.py\n\u2502 \u251c\u2500\u2500 base.py # Abstract base provider\n\u2502 \u251c\u2500\u2500 elevenlabs.py # ElevenLabs implementation\n\u2502 \u251c\u2500\u2500 openai.py # OpenAI implementation\n\u2502 \u2514\u2500\u2500 kokoro_onnx.py # Kokoro ONNX implementation\n\u251c\u2500\u2500 docs/\n\u2502 \u251c\u2500\u2500 ARCHITECTURE.md # System architecture documentation\n\u2502 \u2514\u2500\u2500 CLAUDE.md # Development guidelines\n\u251c\u2500\u2500 .env.example # Example environment file\n\u251c\u2500\u2500 pyproject.toml # Project configuration\n\u251c\u2500\u2500 Makefile # Development commands\n\u251c\u2500\u2500 CLAUDE.md # AI assistant context\n\u2514\u2500\u2500 README.md # This file\n```\n\n## Troubleshooting\n\n### Common Issues\n\n1. **API Key Not Found**\n - Ensure your `.env` file contains the correct API keys\n - Check that the `.env` file is in the current directory\n - Verify environment variable names match exactly\n - Note: Kokoro ONNX doesn't require an API key\n\n2. **Voice Not Found**\n - Use `--list` to see available voices for your provider\n - Check spelling and capitalization of voice names\n - For ElevenLabs, use `--refresh-cache` to update voice list\n\n3. **Configuration File Issues**\n - Run `--create-config` to generate a sample config\n - Check file location: `~/.config/par-tts/config.yaml`\n - Verify YAML syntax (use spaces, not tabs)\n - CLI arguments override config file settings\n\n4. **Cache Problems (ElevenLabs)**\n - Force refresh with `--refresh-cache`\n - Clear samples with `--clear-cache-samples`\n - Cache updates automatically detect changes every 24 hours\n\n5. **Audio Not Playing**\n - Ensure you have audio output devices connected\n - Check system volume settings\n - Try adjusting `--volume` flag\n - On Linux, verify audio subsystem (ALSA/PulseAudio) is working\n\n6. **Slow Response Times**\n - Voice previews are cached after first use\n - Use `--debug` to see detailed timing information\n - Kokoro ONNX models download on first use (~106 MB)\n\n7. **File Not Saved**\n - Check write permissions for the output directory\n - Ensure the path exists or parent directories can be created\n - Use absolute paths to avoid confusion\n\n### Debug Mode\n\nEnable debug mode for detailed information:\n\n```bash\n# Show debug information during execution\npar-tts \"Test message\" --debug\n\n# Dump configuration without executing\npar-tts \"Test\" --dump\n```\n\n## Contributing\n\nContributions are welcome! Please feel free to submit issues, feature requests, or pull requests.\n\n### How to Contribute\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Make your changes\n4. Run tests and checks (`make checkall`)\n5. Commit your changes (`git commit -m 'Add amazing feature'`)\n6. Push to the branch (`git push origin feature/amazing-feature`)\n7. Open a Pull Request\n\n### Development Guidelines\n\n- Use type hints for all function parameters and returns\n- Follow Google-style docstrings\n- Ensure all tests pass before submitting PR\n- Update documentation for new features\n- Keep commits atomic and well-described\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Author\n\n**Paul Robello** \nEmail: [probello@gmail.com](mailto:probello@gmail.com) \nGitHub: [@paulrobello](https://github.com/paulrobello)\n\n## Acknowledgments\n\n- [ElevenLabs](https://elevenlabs.io/) for their excellent TTS API\n- [OpenAI](https://openai.com/) for their TTS capabilities\n- [Typer](https://typer.tiangolo.com/) for the elegant CLI framework\n- [Rich](https://rich.readthedocs.io/) for beautiful terminal formatting\n\n## Support\n\nIf you find this tool useful, consider:\n- \u2b50 Starring the repository\n- \ud83d\udc1b Reporting bugs or requesting features\n- \ud83d\udcd6 Improving documentation\n- \u2615 [Buying me a coffee](https://buymeacoffee.com/probello3)\n",
"bugtrack_url": null,
"license": "MIT License\n \n Copyright (c) 2024 Paul Robello\n \n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n \n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n \n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.",
"summary": "PAR CLI TTS - Command line text-to-speech tool using ElevenLabs with voice caching and name resolution",
"version": "0.2.0",
"project_urls": {
"Discussions": "https://github.com/paulrobello/par-cli-tts/discussions",
"Documentation": "https://github.com/paulrobello/par-cli-tts/blob/main/README.md",
"Homepage": "https://github.com/paulrobello/par-cli-tts",
"Issues": "https://github.com/paulrobello/par-cli-tts/issues",
"Repository": "https://github.com/paulrobello/par-cli-tts",
"Wiki": "https://github.com/paulrobello/par-cli-tts/wiki"
},
"split_keywords": [
"audio",
" cli",
" elevenlabs",
" text-to-speech",
" tts"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "bfd79304ae467daf77ee4712b0bd9744c6617c5706b0c763d917883a0b9c52b2",
"md5": "c0f3b975ef7f7600367db9acd6225ae6",
"sha256": "78e553fbe7c8608776aff706fbd23cce57d9815219c4ee151ccde0b4a234d844"
},
"downloads": -1,
"filename": "par_cli_tts-0.2.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "c0f3b975ef7f7600367db9acd6225ae6",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.11",
"size": 38816,
"upload_time": "2025-08-19T15:24:16",
"upload_time_iso_8601": "2025-08-19T15:24:16.620139Z",
"url": "https://files.pythonhosted.org/packages/bf/d7/9304ae467daf77ee4712b0bd9744c6617c5706b0c763d917883a0b9c52b2/par_cli_tts-0.2.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "009a96eb4051d10b300fd1d151cb9b8d047faab09b6dd1661cd8b6f14f8edf5a",
"md5": "30839e203b4fa06d10b9fbf9b4e3ea66",
"sha256": "51f1de4e5030a4aa3665aa019752b0f415e101d8d7e3bcb8edda6cab2e98f7aa"
},
"downloads": -1,
"filename": "par_cli_tts-0.2.0.tar.gz",
"has_sig": false,
"md5_digest": "30839e203b4fa06d10b9fbf9b4e3ea66",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.11",
"size": 30825,
"upload_time": "2025-08-19T15:24:18",
"upload_time_iso_8601": "2025-08-19T15:24:18.099049Z",
"url": "https://files.pythonhosted.org/packages/00/9a/96eb4051d10b300fd1d151cb9b8d047faab09b6dd1661cd8b6f14f8edf5a/par_cli_tts-0.2.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-19 15:24:18",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "paulrobello",
"github_project": "par-cli-tts",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "par-cli-tts"
}