Initial commit
This commit is contained in:
14
.claude-plugin/plugin.json
Normal file
14
.claude-plugin/plugin.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"name": "elevenlabs-tts-tool",
|
||||
"description": "CLI tool for ElevenLabs text-to-speech synthesis",
|
||||
"version": "0.2.0",
|
||||
"author": {
|
||||
"name": "Dennis Vriend"
|
||||
},
|
||||
"skills": [
|
||||
"./skills"
|
||||
],
|
||||
"commands": [
|
||||
"./commands"
|
||||
]
|
||||
}
|
||||
3
README.md
Normal file
3
README.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# elevenlabs-tts-tool
|
||||
|
||||
CLI tool for ElevenLabs text-to-speech synthesis
|
||||
32
commands/info.md
Normal file
32
commands/info.md
Normal file
@@ -0,0 +1,32 @@
|
||||
---
|
||||
description: Show subscription and usage information
|
||||
---
|
||||
|
||||
Display ElevenLabs subscription tier, character usage, and historical stats.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
elevenlabs-tts-tool info [--days N]
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
- `--days, -d N`: Number of days of historical usage (default: 7)
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# View subscription with last 7 days
|
||||
elevenlabs-tts-tool info
|
||||
|
||||
# View last 30 days
|
||||
elevenlabs-tts-tool info --days 30
|
||||
|
||||
# Quick quota check
|
||||
elevenlabs-tts-tool info --days 1
|
||||
```
|
||||
|
||||
## Output
|
||||
|
||||
Subscription tier, quota usage, remaining characters, and daily usage breakdown.
|
||||
28
commands/list-models.md
Normal file
28
commands/list-models.md
Normal file
@@ -0,0 +1,28 @@
|
||||
---
|
||||
description: List ElevenLabs TTS models
|
||||
---
|
||||
|
||||
List all available ElevenLabs TTS models with characteristics.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
elevenlabs-tts-tool list-models
|
||||
```
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# List all models
|
||||
elevenlabs-tts-tool list-models
|
||||
|
||||
# Filter by status
|
||||
elevenlabs-tts-tool list-models | grep stable
|
||||
|
||||
# Find specific features
|
||||
elevenlabs-tts-tool list-models | grep -i "ultra-low"
|
||||
```
|
||||
|
||||
## Output
|
||||
|
||||
Detailed model information with IDs, features, languages, and use cases.
|
||||
28
commands/list-voices.md
Normal file
28
commands/list-voices.md
Normal file
@@ -0,0 +1,28 @@
|
||||
---
|
||||
description: List available ElevenLabs voices
|
||||
---
|
||||
|
||||
List all available ElevenLabs voices with characteristics.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
elevenlabs-tts-tool list-voices
|
||||
```
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# List all voices
|
||||
elevenlabs-tts-tool list-voices
|
||||
|
||||
# Filter by gender
|
||||
elevenlabs-tts-tool list-voices | grep female
|
||||
|
||||
# Filter by accent
|
||||
elevenlabs-tts-tool list-voices | grep British
|
||||
```
|
||||
|
||||
## Output
|
||||
|
||||
Table format with voice name, gender, age, accent, and description.
|
||||
44
commands/synthesize.md
Normal file
44
commands/synthesize.md
Normal file
@@ -0,0 +1,44 @@
|
||||
---
|
||||
description: Convert text to speech with ElevenLabs
|
||||
argument-hint: text
|
||||
---
|
||||
|
||||
Convert TEXT to speech using ElevenLabs API. Play through speakers or save to file.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
elevenlabs-tts-tool synthesize TEXT [OPTIONS]
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
- `TEXT`: Text to synthesize (required, or use --stdin)
|
||||
- `--stdin, -s`: Read text from stdin instead
|
||||
- `--voice, -v NAME`: Voice name or ID (default: rachel)
|
||||
- `--model, -m ID`: Model ID (default: eleven_turbo_v2_5)
|
||||
- `--output, -o PATH`: Save to file instead of playing
|
||||
- `--format, -f FORMAT`: Output format (default: mp3_44100_128)
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Basic usage
|
||||
elevenlabs-tts-tool synthesize "Hello world"
|
||||
|
||||
# Different voice
|
||||
elevenlabs-tts-tool synthesize "Hello" --voice adam
|
||||
|
||||
# Emotional expression (requires eleven_v3)
|
||||
elevenlabs-tts-tool synthesize "[happy] Welcome!" --model eleven_v3
|
||||
|
||||
# Read from stdin
|
||||
echo "Text" | elevenlabs-tts-tool synthesize --stdin
|
||||
|
||||
# Save to file
|
||||
elevenlabs-tts-tool synthesize "Text" --output speech.mp3
|
||||
```
|
||||
|
||||
## Output
|
||||
|
||||
Plays audio through speakers or saves to file in specified format.
|
||||
29
commands/update-voices.md
Normal file
29
commands/update-voices.md
Normal file
@@ -0,0 +1,29 @@
|
||||
---
|
||||
description: Update voice lookup table from API
|
||||
---
|
||||
|
||||
Fetch latest voices from ElevenLabs API and update local lookup table.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
elevenlabs-tts-tool update-voices [--output PATH]
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
- `--output, -o PATH`: Output file path (default: ~/.config/elevenlabs-tts-tool/voices_lookup.json)
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Update default voice lookup
|
||||
elevenlabs-tts-tool update-voices
|
||||
|
||||
# Save to custom location
|
||||
elevenlabs-tts-tool update-voices --output custom_voices.json
|
||||
```
|
||||
|
||||
## Output
|
||||
|
||||
Updates voice lookup table with latest premade voices from API.
|
||||
65
plugin.lock.json
Normal file
65
plugin.lock.json
Normal file
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"$schema": "internal://schemas/plugin.lock.v1.json",
|
||||
"pluginId": "gh:dnvriend/elevenlabs-tts-tool:plugins/elevenlabs-tts-tool",
|
||||
"normalized": {
|
||||
"repo": null,
|
||||
"ref": "refs/tags/v20251128.0",
|
||||
"commit": "af6dbbf9d00e77221dff2948d4a9dd0d85fb4757",
|
||||
"treeHash": "9c64c06848bb9bad601398f1bdd70a5c82baba3504d8082912013e797185497c",
|
||||
"generatedAt": "2025-11-28T10:16:35.061579Z",
|
||||
"toolVersion": "publish_plugins.py@0.2.0"
|
||||
},
|
||||
"origin": {
|
||||
"remote": "git@github.com:zhongweili/42plugin-data.git",
|
||||
"branch": "master",
|
||||
"commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390",
|
||||
"repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data"
|
||||
},
|
||||
"manifest": {
|
||||
"name": "elevenlabs-tts-tool",
|
||||
"description": "CLI tool for ElevenLabs text-to-speech synthesis",
|
||||
"version": "0.2.0"
|
||||
},
|
||||
"content": {
|
||||
"files": [
|
||||
{
|
||||
"path": "README.md",
|
||||
"sha256": "a602d7c5d4fa70f019df3a98b6e81dfb7ccbec08cb20fa9906e215365bc8cd45"
|
||||
},
|
||||
{
|
||||
"path": ".claude-plugin/plugin.json",
|
||||
"sha256": "b411b622f0e84565462a8dc82777db75b12764b515bcbd6cee9b1a0aa37f3a24"
|
||||
},
|
||||
{
|
||||
"path": "commands/list-models.md",
|
||||
"sha256": "9d1bb3256b03bdfc4701f02798107fce1359cc2fad75f4bf2673dfaf19687f1b"
|
||||
},
|
||||
{
|
||||
"path": "commands/synthesize.md",
|
||||
"sha256": "737e53c0fc16da6d7bd9e477dfa78d5915ecccc612f950c4e93112b5a9063f88"
|
||||
},
|
||||
{
|
||||
"path": "commands/info.md",
|
||||
"sha256": "0dfebaa8979423847ebebeea9d4d0e7e0f77edba431a52f44091a1fc2c9b650e"
|
||||
},
|
||||
{
|
||||
"path": "commands/update-voices.md",
|
||||
"sha256": "2e9d8d6c71fd3bc190d4602fb712277f28703bb2958474f59df77c700347b9ba"
|
||||
},
|
||||
{
|
||||
"path": "commands/list-voices.md",
|
||||
"sha256": "e3a78b3bcbc3961f7b8badc6c4c4beaf18f2505636a58e0577e9e747a9c021c2"
|
||||
},
|
||||
{
|
||||
"path": "skills/elevenlabs-tts-tool/SKILL.md",
|
||||
"sha256": "7500946a945804d0f4c91895a592eeee17890f5e69334ce2545b83af3fe83aeb"
|
||||
}
|
||||
],
|
||||
"dirSha256": "9c64c06848bb9bad601398f1bdd70a5c82baba3504d8082912013e797185497c"
|
||||
},
|
||||
"security": {
|
||||
"scannedAt": null,
|
||||
"scannerVersion": null,
|
||||
"flags": []
|
||||
}
|
||||
}
|
||||
776
skills/elevenlabs-tts-tool/SKILL.md
Normal file
776
skills/elevenlabs-tts-tool/SKILL.md
Normal file
@@ -0,0 +1,776 @@
|
||||
---
|
||||
name: skill-elevenlabs-tts-tool
|
||||
description: ElevenLabs text-to-speech CLI tool guide
|
||||
---
|
||||
|
||||
# When to use
|
||||
- Converting text to speech with ElevenLabs API
|
||||
- Exploring available voices and models
|
||||
- Managing TTS subscriptions and usage
|
||||
- Integrating TTS into workflows and pipelines
|
||||
|
||||
# ElevenLabs TTS Tool Skill
|
||||
|
||||
## Purpose
|
||||
|
||||
Comprehensive guide for the `elevenlabs-tts-tool` CLI - a professional command-line interface for ElevenLabs text-to-speech synthesis. Provides both direct audio playback and file output with support for 42+ premium voices and multiple models.
|
||||
|
||||
## When to Use This Skill
|
||||
|
||||
**Use this skill when:**
|
||||
- Converting text to speech for notifications, audiobooks, or content creation
|
||||
- Exploring and comparing different voice characteristics
|
||||
- Managing ElevenLabs subscription quotas and usage
|
||||
- Building voice-enabled workflows and automation
|
||||
- Integrating TTS into Claude Code hooks or other tools
|
||||
|
||||
**Do NOT use this skill for:**
|
||||
- Direct ElevenLabs API programming (use SDK docs instead)
|
||||
- Custom voice cloning (requires ElevenLabs web interface)
|
||||
- Real-time streaming TTS (tool focuses on file/playback generation)
|
||||
|
||||
## CLI Tool: elevenlabs-tts-tool
|
||||
|
||||
Professional text-to-speech CLI tool built with Python 3.13+, uv, and the ElevenLabs SDK.
|
||||
|
||||
### Installation
|
||||
|
||||
```bash
|
||||
# Clone repository
|
||||
git clone https://github.com/dnvriend/elevenlabs-tts-tool.git
|
||||
cd elevenlabs-tts-tool
|
||||
|
||||
# Install globally with uv
|
||||
uv tool install .
|
||||
|
||||
# Verify installation
|
||||
elevenlabs-tts-tool --version
|
||||
```
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- **Python**: 3.13 or higher
|
||||
- **API Key**: ElevenLabs API key (get from https://elevenlabs.io/app/settings/api-keys)
|
||||
- **Environment Variable**: `export ELEVENLABS_API_KEY='your-api-key'`
|
||||
|
||||
### Quick Start
|
||||
|
||||
```bash
|
||||
# Set API key
|
||||
export ELEVENLABS_API_KEY='your-api-key'
|
||||
|
||||
# Basic text-to-speech
|
||||
elevenlabs-tts-tool synthesize "Hello world"
|
||||
|
||||
# Use different voice
|
||||
elevenlabs-tts-tool synthesize "Hello" --voice adam
|
||||
|
||||
# Save to file
|
||||
elevenlabs-tts-tool synthesize "Text" --output speech.mp3
|
||||
```
|
||||
|
||||
## Progressive Disclosure
|
||||
|
||||
<details>
|
||||
<summary><strong>📖 Core Commands (Click to expand)</strong></summary>
|
||||
|
||||
### synthesize - Convert Text to Speech
|
||||
|
||||
Convert text to speech using ElevenLabs API. Supports direct playback or file output.
|
||||
|
||||
**Usage:**
|
||||
```bash
|
||||
elevenlabs-tts-tool synthesize [TEXT] [OPTIONS]
|
||||
```
|
||||
|
||||
**Arguments:**
|
||||
- `TEXT`: Text to synthesize (optional if --stdin used)
|
||||
- `--stdin, -s`: Read text from stdin instead of argument
|
||||
- `--voice, -v NAME`: Voice name or ID (default: rachel)
|
||||
- `--model, -m ID`: Model ID (default: eleven_turbo_v2_5)
|
||||
- `--output, -o PATH`: Save to audio file instead of playing
|
||||
- `--format, -f FORMAT`: Output format (default: mp3_44100_128)
|
||||
|
||||
**Examples:**
|
||||
```bash
|
||||
# Basic usage - play through speakers
|
||||
elevenlabs-tts-tool synthesize "Hello world"
|
||||
|
||||
# Use different voice
|
||||
elevenlabs-tts-tool synthesize "Hello" --voice adam
|
||||
|
||||
# Use specific model
|
||||
elevenlabs-tts-tool synthesize "Hello" --model eleven_multilingual_v2
|
||||
|
||||
# Emotional expression (requires eleven_v3 model)
|
||||
elevenlabs-tts-tool synthesize "[happy] Welcome to our service!" --model eleven_v3
|
||||
|
||||
# Multiple emotions
|
||||
elevenlabs-tts-tool synthesize "[excited] Great news! [cheerfully] Your project is approved!" --model eleven_v3
|
||||
|
||||
# Add pauses with SSML
|
||||
elevenlabs-tts-tool synthesize "Point one <break time=\"0.5s\" /> Point two <break time=\"0.5s\" /> Point three."
|
||||
|
||||
# Read from stdin
|
||||
echo "Text from pipeline" | elevenlabs-tts-tool synthesize --stdin
|
||||
|
||||
# Save to file
|
||||
elevenlabs-tts-tool synthesize "Text" --output speech.mp3
|
||||
|
||||
# Pipeline integration
|
||||
cat document.txt | elevenlabs-tts-tool synthesize --stdin --output audiobook.mp3
|
||||
```
|
||||
|
||||
**Output:**
|
||||
Plays audio through default speakers or saves to specified file format.
|
||||
|
||||
**Available Formats:**
|
||||
- `mp3_44100_128` (default): MP3, 44.1kHz, 128kbps
|
||||
- `mp3_44100_64`: MP3, 44.1kHz, 64kbps
|
||||
- `mp3_22050_32`: MP3, 22.05kHz, 32kbps
|
||||
- `pcm_44100`: PCM WAV, 44.1kHz (requires Pro tier)
|
||||
|
||||
---
|
||||
|
||||
### list-voices - Show Available Voices
|
||||
|
||||
List all available ElevenLabs voices with characteristics.
|
||||
|
||||
**Usage:**
|
||||
```bash
|
||||
elevenlabs-tts-tool list-voices
|
||||
```
|
||||
|
||||
**Examples:**
|
||||
```bash
|
||||
# List all voices
|
||||
elevenlabs-tts-tool list-voices
|
||||
|
||||
# Filter by gender
|
||||
elevenlabs-tts-tool list-voices | grep female
|
||||
elevenlabs-tts-tool list-voices | grep male
|
||||
|
||||
# Filter by accent
|
||||
elevenlabs-tts-tool list-voices | grep British
|
||||
elevenlabs-tts-tool list-voices | grep American
|
||||
|
||||
# Filter by age
|
||||
elevenlabs-tts-tool list-voices | grep young
|
||||
elevenlabs-tts-tool list-voices | grep middle_aged
|
||||
|
||||
# Combine filters
|
||||
elevenlabs-tts-tool list-voices | grep "female.*young.*British"
|
||||
```
|
||||
|
||||
**Output:**
|
||||
```
|
||||
Voice Gender Age Accent Description
|
||||
====================================================================================================
|
||||
rachel female young American Calm and friendly American voice...
|
||||
adam male middle_aged American Deep, authoritative American male...
|
||||
charlotte female middle_aged British Smooth, professional British voice...
|
||||
...
|
||||
====================================================================================================
|
||||
Total: 42 voices available
|
||||
```
|
||||
|
||||
**Popular Voices:**
|
||||
- **rachel**: Calm, friendly American female (default)
|
||||
- **adam**: Deep, authoritative American male
|
||||
- **charlotte**: Professional British female
|
||||
- **josh**: Young, casual American male
|
||||
- **bella**: Expressive Italian female
|
||||
|
||||
---
|
||||
|
||||
### list-models - Show TTS Models
|
||||
|
||||
List all available ElevenLabs TTS models with characteristics and use cases.
|
||||
|
||||
**Usage:**
|
||||
```bash
|
||||
elevenlabs-tts-tool list-models
|
||||
```
|
||||
|
||||
**Examples:**
|
||||
```bash
|
||||
# List all models
|
||||
elevenlabs-tts-tool list-models
|
||||
|
||||
# Filter by status
|
||||
elevenlabs-tts-tool list-models | grep stable
|
||||
elevenlabs-tts-tool list-models | grep deprecated
|
||||
|
||||
# Find low-latency models
|
||||
elevenlabs-tts-tool list-models | grep -i "ultra-low"
|
||||
|
||||
# Find multilingual models
|
||||
elevenlabs-tts-tool list-models | grep -i "multilingual"
|
||||
```
|
||||
|
||||
**Output:**
|
||||
Comprehensive model information including:
|
||||
- Model ID and version
|
||||
- Quality and latency characteristics
|
||||
- Language support (mono vs multilingual)
|
||||
- Character limits
|
||||
- Best use cases
|
||||
- Special features (emotions, etc.)
|
||||
|
||||
**Key Models:**
|
||||
- **eleven_turbo_v2_5**: Fast, high-quality (default, best value)
|
||||
- **eleven_flash_v2_5**: Ultra-low latency (real-time applications)
|
||||
- **eleven_multilingual_v2**: 29 languages, production quality
|
||||
- **eleven_v3**: Most expressive with emotion tags (alpha, 2x cost)
|
||||
|
||||
**Cost Multipliers:**
|
||||
- Turbo/Flash models: 1x cost
|
||||
- Multilingual v2: 1x cost
|
||||
- v3 models: 2x cost (half the minutes/tokens)
|
||||
|
||||
---
|
||||
|
||||
### info - Show Subscription Info
|
||||
|
||||
Display subscription tier, character usage, quota limits, and historical usage.
|
||||
|
||||
**Usage:**
|
||||
```bash
|
||||
elevenlabs-tts-tool info [--days N]
|
||||
```
|
||||
|
||||
**Arguments:**
|
||||
- `--days, -d N`: Number of days of historical usage to display (default: 7)
|
||||
|
||||
**Examples:**
|
||||
```bash
|
||||
# View subscription with last 7 days of usage
|
||||
elevenlabs-tts-tool info
|
||||
|
||||
# View last 30 days of usage
|
||||
elevenlabs-tts-tool info --days 30
|
||||
|
||||
# Quick quota check (1 day)
|
||||
elevenlabs-tts-tool info --days 1
|
||||
|
||||
# Check usage before long generation
|
||||
elevenlabs-tts-tool info --days 1 && elevenlabs-tts-tool synthesize "Long text..."
|
||||
```
|
||||
|
||||
**Output Information:**
|
||||
- Subscription tier and status
|
||||
- Character usage (used/limit/remaining)
|
||||
- Quota reset date
|
||||
- Historical usage breakdown by day
|
||||
- Average daily usage
|
||||
- Projected monthly usage
|
||||
- Warnings when approaching quota limits
|
||||
|
||||
**Use Cases:**
|
||||
- Monitor character quota consumption
|
||||
- Track usage patterns over time
|
||||
- Plan when to upgrade subscription tier
|
||||
- Avoid hitting quota limits unexpectedly
|
||||
- Identify high-usage periods
|
||||
|
||||
---
|
||||
|
||||
### update-voices - Update Voice Table
|
||||
|
||||
Fetch latest voices from ElevenLabs API and update local lookup table.
|
||||
|
||||
**Usage:**
|
||||
```bash
|
||||
elevenlabs-tts-tool update-voices [--output PATH]
|
||||
```
|
||||
|
||||
**Arguments:**
|
||||
- `--output, -o PATH`: Output file path (default: ~/.config/elevenlabs-tts-tool/voices_lookup.json)
|
||||
|
||||
**Examples:**
|
||||
```bash
|
||||
# Update default voice lookup (user config directory)
|
||||
elevenlabs-tts-tool update-voices
|
||||
|
||||
# Save to custom location
|
||||
elevenlabs-tts-tool update-voices --output custom_voices.json
|
||||
|
||||
# Update before listing voices
|
||||
elevenlabs-tts-tool update-voices && elevenlabs-tts-tool list-voices
|
||||
```
|
||||
|
||||
**Behavior:**
|
||||
- Fetches all premade voices from ElevenLabs API
|
||||
- Saves to user config directory by default (`~/.config/elevenlabs-tts-tool/`)
|
||||
- Creates config directory if it doesn't exist
|
||||
- Updates take precedence over package default
|
||||
- Persists across package reinstalls
|
||||
|
||||
---
|
||||
|
||||
### pricing - Show Pricing Information
|
||||
|
||||
Display ElevenLabs pricing tiers and feature comparison.
|
||||
|
||||
**Usage:**
|
||||
```bash
|
||||
elevenlabs-tts-tool pricing
|
||||
```
|
||||
|
||||
**Examples:**
|
||||
```bash
|
||||
# View full pricing table
|
||||
elevenlabs-tts-tool pricing
|
||||
|
||||
# Find specific tier information
|
||||
elevenlabs-tts-tool pricing | grep Creator
|
||||
elevenlabs-tts-tool pricing | grep "44.1kHz PCM"
|
||||
```
|
||||
|
||||
**Output Information:**
|
||||
- Pricing tiers (Free, Starter, Creator, Pro, Scale, Business)
|
||||
- Minutes included per tier
|
||||
- Additional minute costs
|
||||
- Audio quality options
|
||||
- Concurrency limits
|
||||
- Priority levels
|
||||
- API formats by tier
|
||||
- Model cost multipliers
|
||||
|
||||
**Key Insights:**
|
||||
- Free tier: 10,000-20,000 characters/month
|
||||
- v3 models cost 2x (half the minutes/tokens)
|
||||
- Use Flash v2.5 for high-volume integrations
|
||||
- Reserve v3 for content requiring emotional expression
|
||||
- PCM 44.1kHz requires Pro tier
|
||||
|
||||
---
|
||||
|
||||
### completion - Shell Completion
|
||||
|
||||
Generate shell completion scripts for bash, zsh, or fish.
|
||||
|
||||
**Usage:**
|
||||
```bash
|
||||
elevenlabs-tts-tool completion [bash|zsh|fish]
|
||||
```
|
||||
|
||||
**Installation:**
|
||||
```bash
|
||||
# Bash (add to ~/.bashrc)
|
||||
eval "$(elevenlabs-tts-tool completion bash)"
|
||||
|
||||
# Zsh (add to ~/.zshrc)
|
||||
eval "$(elevenlabs-tts-tool completion zsh)"
|
||||
|
||||
# Fish (save to completion file)
|
||||
elevenlabs-tts-tool completion fish > ~/.config/fish/completions/elevenlabs-tts-tool.fish
|
||||
```
|
||||
|
||||
**Features:**
|
||||
- Tab-complete commands and subcommands
|
||||
- Tab-complete options and flags
|
||||
- Context-aware completion for file paths
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><strong>⚙️ Advanced Features (Click to expand)</strong></summary>
|
||||
|
||||
### Emotion Control (v3 Models)
|
||||
|
||||
ElevenLabs v3 model (`eleven_v3`) supports **Audio Tags** for emotional expression.
|
||||
|
||||
**Available Emotion Tags:**
|
||||
- Basic emotions: `[happy]`, `[excited]`, `[sad]`, `[angry]`, `[nervous]`, `[curious]`
|
||||
- Delivery styles: `[cheerfully]`, `[playfully]`, `[mischievously]`, `[resigned tone]`, `[flatly]`, `[deadpan]`
|
||||
- Speech characteristics: `[whispers]`, `[laughs]`, `[gasps]`, `[sighs]`, `[pauses]`, `[hesitates]`, `[stammers]`, `[gulps]`
|
||||
|
||||
**Usage Examples:**
|
||||
```bash
|
||||
# Basic emotion (requires eleven_v3 model)
|
||||
elevenlabs-tts-tool synthesize "[happy] Welcome to our service!" --model eleven_v3
|
||||
|
||||
# Multiple emotions in sequence
|
||||
elevenlabs-tts-tool synthesize "[excited] Great news! [cheerfully] Your project is approved!" --model eleven_v3
|
||||
|
||||
# Combine emotions with pauses
|
||||
elevenlabs-tts-tool synthesize "[happy] Hello! <break time=\"0.5s\" /> [curious] How are you today?" --model eleven_v3
|
||||
|
||||
# Whispered speech
|
||||
elevenlabs-tts-tool synthesize "[whispers] This is a secret message." --model eleven_v3
|
||||
|
||||
# Playful delivery
|
||||
elevenlabs-tts-tool synthesize "[playfully] Guess what I found!" --model eleven_v3
|
||||
```
|
||||
|
||||
**Best Practices:**
|
||||
- Place tags at the beginning of phrases
|
||||
- Align text content with emotional intent
|
||||
- Test with different voices for best results
|
||||
- Use sparingly - let AI infer emotion from context when possible
|
||||
- Remember: v3 models cost 2x as much (half the minutes/tokens)
|
||||
|
||||
---
|
||||
|
||||
### Pause Control (SSML)
|
||||
|
||||
Add natural pauses using SSML `<break>` tags.
|
||||
|
||||
**Syntax:**
|
||||
```xml
|
||||
<break time="X.Xs" />
|
||||
```
|
||||
|
||||
**Examples:**
|
||||
```bash
|
||||
# 1-second pause
|
||||
elevenlabs-tts-tool synthesize "Welcome <break time=\"1.0s\" /> to our service."
|
||||
|
||||
# Multiple pauses
|
||||
elevenlabs-tts-tool synthesize "Point one <break time=\"0.5s\" /> Point two <break time=\"0.5s\" /> Point three."
|
||||
|
||||
# Short pause for emphasis
|
||||
elevenlabs-tts-tool synthesize "Think about this <break time=\"0.3s\" /> carefully."
|
||||
|
||||
# Combine with emotions (requires eleven_v3)
|
||||
elevenlabs-tts-tool synthesize "[happy] Hello! <break time=\"0.5s\" /> [cheerfully] How are you?" --model eleven_v3
|
||||
```
|
||||
|
||||
**Limitations:**
|
||||
- Maximum pause duration: 3 seconds
|
||||
- Recommended: 2-4 breaks per generation
|
||||
- Too many breaks can cause:
|
||||
- AI speedup
|
||||
- Audio artifacts
|
||||
- Background noise
|
||||
- Generation instability
|
||||
|
||||
**Alternative Methods:**
|
||||
- Dashes (`-` or `—`) for shorter pauses (less consistent)
|
||||
- Ellipses (`...`) for hesitation (may add nervous tone)
|
||||
- SSML `<break>` is most reliable
|
||||
|
||||
---
|
||||
|
||||
### Verbosity Control
|
||||
|
||||
Multi-level verbosity for progressive detail control.
|
||||
|
||||
**Verbosity Levels:**
|
||||
- **No flag** (default): WARNING level - only critical issues
|
||||
- **`-v`**: INFO level - high-level operations, important events
|
||||
- **`-vv`**: DEBUG level - detailed operations, API calls, validation steps
|
||||
- **`-vvv`**: TRACE level - full HTTP requests/responses, ElevenLabs SDK internals
|
||||
|
||||
**Usage:**
|
||||
```bash
|
||||
# Quiet mode (warnings only)
|
||||
elevenlabs-tts-tool synthesize "Hello world"
|
||||
|
||||
# INFO level
|
||||
elevenlabs-tts-tool -v synthesize "Hello world"
|
||||
|
||||
# DEBUG level (detailed operations)
|
||||
elevenlabs-tts-tool -vv synthesize "Hello world"
|
||||
|
||||
# TRACE level (shows HTTP requests/responses)
|
||||
elevenlabs-tts-tool -vvv synthesize "Hello world"
|
||||
```
|
||||
|
||||
**Dependent Library Logging:**
|
||||
At trace level (`-vvv`), the following libraries enable DEBUG logging:
|
||||
- `elevenlabs` - ElevenLabs SDK internals
|
||||
- `httpx` / `httpcore` - HTTP request/response details
|
||||
- `urllib3` - Low-level HTTP operations
|
||||
|
||||
---
|
||||
|
||||
### Pipeline Integration
|
||||
|
||||
The tool is designed for composition with other CLI tools.
|
||||
|
||||
**Design Principles:**
|
||||
- JSON output to stdout, logs/errors to stderr
|
||||
- Stdin support for text input
|
||||
- Exit codes for success/failure detection
|
||||
- Shell completion for productivity
|
||||
|
||||
**Examples:**
|
||||
```bash
|
||||
# Read from file
|
||||
cat document.txt | elevenlabs-tts-tool synthesize --stdin --output audio.mp3
|
||||
|
||||
# Combine with other tools
|
||||
gemini-google-search-tool query "AI news" | \
|
||||
elevenlabs-tts-tool synthesize --stdin --voice charlotte --output news.mp3
|
||||
|
||||
# Conditional execution
|
||||
make build && elevenlabs-tts-tool synthesize "[cheerfully] Build successful!" || \
|
||||
elevenlabs-tts-tool synthesize "[sad] Build failed. Check logs."
|
||||
|
||||
# Process multiple texts
|
||||
for text in "First" "Second" "Third"; do
|
||||
elevenlabs-tts-tool synthesize "$text" --output "${text}.mp3"
|
||||
done
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Claude Code Integration
|
||||
|
||||
Use `elevenlabs-tts-tool` as notification system for Claude Code hooks.
|
||||
|
||||
**Use Cases:**
|
||||
|
||||
1. **Task Completion Alerts**
|
||||
```bash
|
||||
# After long-running task
|
||||
elevenlabs-tts-tool synthesize "[excited] Task completed successfully!"
|
||||
```
|
||||
|
||||
2. **Error Notifications**
|
||||
```bash
|
||||
# On build failure
|
||||
elevenlabs-tts-tool synthesize "[nervous] Error detected. Please check output."
|
||||
```
|
||||
|
||||
3. **Custom Workflows**
|
||||
```bash
|
||||
# Shell script integration
|
||||
make build && elevenlabs-tts-tool synthesize "[cheerfully] Build successful!" || \
|
||||
elevenlabs-tts-tool synthesize "[sad] Build failed. Check logs."
|
||||
```
|
||||
|
||||
4. **Multi-Tool Integration**
|
||||
```bash
|
||||
# Combine with other CLI tools
|
||||
gemini-google-search-tool query "AI news" | \
|
||||
elevenlabs-tts-tool synthesize --stdin --voice charlotte --output news.mp3
|
||||
```
|
||||
|
||||
**Hook Configuration:**
|
||||
|
||||
Create hooks in `~/.config/claude-code/hooks.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"hooks": {
|
||||
"after_command": {
|
||||
"type": "bash",
|
||||
"command": "elevenlabs-tts-tool synthesize \"[happy] Task completed!\" --voice rachel"
|
||||
},
|
||||
"on_error": {
|
||||
"type": "bash",
|
||||
"command": "elevenlabs-tts-tool synthesize \"[nervous] Error occurred!\" --voice adam"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Benefits:**
|
||||
- Audio alerts for completed tasks without monitoring terminal
|
||||
- Error notifications while away from screen
|
||||
- Multi-step automation with voice feedback
|
||||
- Voice-enabled AI agent pipelines
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><strong>🔧 Troubleshooting (Click to expand)</strong></summary>
|
||||
|
||||
### Common Issues
|
||||
|
||||
**Issue: "API key not found" error**
|
||||
```bash
|
||||
# Symptom
|
||||
Error: ELEVENLABS_API_KEY environment variable not set
|
||||
```
|
||||
|
||||
**Solution:**
|
||||
1. Get API key from https://elevenlabs.io/app/settings/api-keys
|
||||
2. Export as environment variable:
|
||||
```bash
|
||||
export ELEVENLABS_API_KEY='your-api-key'
|
||||
```
|
||||
3. Add to shell profile for persistence:
|
||||
```bash
|
||||
echo 'export ELEVENLABS_API_KEY="your-api-key"' >> ~/.bashrc
|
||||
source ~/.bashrc
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Issue: "Voice not found" error**
|
||||
```bash
|
||||
# Symptom
|
||||
ValueError: Voice 'unknown' not found in lookup table
|
||||
```
|
||||
|
||||
**Solution:**
|
||||
1. List available voices:
|
||||
```bash
|
||||
elevenlabs-tts-tool list-voices
|
||||
```
|
||||
2. Update voice table if needed:
|
||||
```bash
|
||||
elevenlabs-tts-tool update-voices
|
||||
```
|
||||
3. Use correct voice name (case-insensitive):
|
||||
```bash
|
||||
elevenlabs-tts-tool synthesize "Hello" --voice rachel
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Issue: Character quota exceeded**
|
||||
```bash
|
||||
# Symptom
|
||||
Error: Character quota exceeded for this month
|
||||
```
|
||||
|
||||
**Solution:**
|
||||
1. Check current usage:
|
||||
```bash
|
||||
elevenlabs-tts-tool info
|
||||
```
|
||||
2. Wait until quota reset date
|
||||
3. Consider upgrading subscription tier:
|
||||
```bash
|
||||
elevenlabs-tts-tool pricing
|
||||
```
|
||||
4. Use more efficient models (Flash/Turbo vs v3)
|
||||
|
||||
---
|
||||
|
||||
**Issue: Audio quality issues**
|
||||
|
||||
**Symptom:** Poor audio quality or artifacts
|
||||
|
||||
**Solution:**
|
||||
1. Try different output format:
|
||||
```bash
|
||||
elevenlabs-tts-tool synthesize "Text" --format mp3_44100_128
|
||||
```
|
||||
2. Use higher-quality model:
|
||||
```bash
|
||||
elevenlabs-tts-tool synthesize "Text" --model eleven_multilingual_v2
|
||||
```
|
||||
3. For professional content, use PCM format (requires Pro tier):
|
||||
```bash
|
||||
elevenlabs-tts-tool synthesize "Text" --format pcm_44100
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Issue: Emotional tags not working**
|
||||
|
||||
**Symptom:** Emotion tags like `[happy]` are spoken literally
|
||||
|
||||
**Solution:**
|
||||
1. Ensure using v3 model:
|
||||
```bash
|
||||
elevenlabs-tts-tool synthesize "[happy] Text" --model eleven_v3
|
||||
```
|
||||
2. Place tags at beginning of phrases
|
||||
3. Test with different voices (some work better than others)
|
||||
|
||||
---
|
||||
|
||||
**Issue: Too many SSML breaks causing issues**
|
||||
|
||||
**Symptom:** Audio artifacts, speedup, or noise with multiple `<break>` tags
|
||||
|
||||
**Solution:**
|
||||
1. Limit to 2-4 breaks per generation
|
||||
2. Use maximum 3 seconds per break
|
||||
3. Consider splitting into multiple generations:
|
||||
```bash
|
||||
elevenlabs-tts-tool synthesize "Part 1" --output part1.mp3
|
||||
elevenlabs-tts-tool synthesize "Part 2" --output part2.mp3
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Getting Help
|
||||
|
||||
```bash
|
||||
# Main help
|
||||
elevenlabs-tts-tool --help
|
||||
|
||||
# Command-specific help
|
||||
elevenlabs-tts-tool synthesize --help
|
||||
elevenlabs-tts-tool list-voices --help
|
||||
elevenlabs-tts-tool info --help
|
||||
|
||||
# Version information
|
||||
elevenlabs-tts-tool --version
|
||||
```
|
||||
|
||||
**Additional Resources:**
|
||||
- **GitHub Issues**: https://github.com/dnvriend/elevenlabs-tts-tool/issues
|
||||
- **ElevenLabs Docs**: https://elevenlabs.io/docs
|
||||
- **API Reference**: https://elevenlabs.io/docs/api-reference
|
||||
|
||||
</details>
|
||||
|
||||
## Free Tier Limitations
|
||||
|
||||
**ElevenLabs Free Tier (2024-2025):**
|
||||
- ✅ 10,000-20,000 characters per month
|
||||
- ✅ All 42 premade voices
|
||||
- ✅ Create up to 3 custom voices
|
||||
- ✅ MP3 formats (all bitrates)
|
||||
- ✅ Basic SSML support (`<break>`, phonemes)
|
||||
- ✅ Emotional tags (v3 models)
|
||||
- ✅ Full API access
|
||||
- ❌ No commercial license (personal/experimentation only)
|
||||
- ❌ PCM 44.1kHz format (requires Pro tier)
|
||||
- ⚠️ Max 2,500 characters per single generation
|
||||
|
||||
**Upgrade Tiers:**
|
||||
- **Starter ($5/month)**: 30,000 characters, commercial license
|
||||
- **Creator ($22/month)**: 100,000 characters, PCM formats
|
||||
- **Pro ($99/month)**: 500,000 characters, PCM 44.1kHz, highest priority
|
||||
- **Scale ($330/month)**: 2,000,000 characters
|
||||
- **Business (custom)**: Custom limits and features
|
||||
|
||||
**Rate Limits:** Not publicly documented - expect reasonable use restrictions on free tier
|
||||
|
||||
## Exit Codes
|
||||
|
||||
- `0`: Success
|
||||
- `1`: General error (validation, API error, etc.)
|
||||
|
||||
## Output Formats
|
||||
|
||||
**Audio Formats:**
|
||||
- `mp3_44100_128`: MP3, 44.1kHz, 128kbps (default, best quality)
|
||||
- `mp3_44100_64`: MP3, 44.1kHz, 64kbps (good quality, smaller)
|
||||
- `mp3_22050_32`: MP3, 22.05kHz, 32kbps (acceptable quality, smallest)
|
||||
- `pcm_44100`: PCM WAV, 44.1kHz, uncompressed (requires Pro tier)
|
||||
|
||||
**Text Formats:**
|
||||
- Human-readable tables for list commands
|
||||
- Structured output with clear sections
|
||||
- Errors to stderr, audio/data to stdout
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Use Turbo v2.5 for High Volume**: Default model offers best value (1x cost, fast, high quality)
|
||||
2. **Reserve v3 for Emotional Content**: Use v3 only when emotion tags needed (costs 2x)
|
||||
3. **Monitor Quota Regularly**: Check `info` command before large generations
|
||||
4. **Update Voices Periodically**: Run `update-voices` monthly to get latest voices
|
||||
5. **Test Voices for Your Use Case**: Different voices work better for different content types
|
||||
6. **Use SSML Breaks Sparingly**: Limit to 2-4 breaks per generation for stability
|
||||
7. **Pipeline for Efficiency**: Combine with other tools for automated workflows
|
||||
8. **Set Verbosity Appropriately**: Use `-vv` or `-vvv` for debugging, default for production
|
||||
|
||||
## Resources
|
||||
|
||||
- **GitHub Repository**: https://github.com/dnvriend/elevenlabs-tts-tool
|
||||
- **ElevenLabs Documentation**: https://elevenlabs.io/docs
|
||||
- **API Reference**: https://elevenlabs.io/docs/api-reference
|
||||
- **Voice Library**: https://elevenlabs.io/voice-library
|
||||
- **Python SDK**: https://github.com/elevenlabs/elevenlabs-python
|
||||
- **Claude Code**: https://docs.anthropic.com/claude-code
|
||||
Reference in New Issue
Block a user