Awesome-openclaw-skills voice-ai-tts
install
source · Clone the upstream repo
git clone https://github.com/sundial-org/awesome-openclaw-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/sundial-org/awesome-openclaw-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/voice-ai-tts" ~/.claude/skills/sundial-org-awesome-openclaw-skills-voice-ai-tts && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/sundial-org/awesome-openclaw-skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/voice-ai-tts" ~/.openclaw/skills/sundial-org-awesome-openclaw-skills-voice-ai-tts && rm -rf "$T"
manifest:
skills/voice-ai-tts/SKILL.mdsource content
Voice.ai Voices
✨ Features
- 9 Voice Personas - Carefully curated voices for different use cases
- 11 Languages - Multi-language synthesis with multilingual model
- Streaming Mode - Real-time audio output as it generates
- Voice Cloning - Clone voices from audio samples
- Voice Design - Customize with temperature and top_p parameters
- OpenClaw Integration - Works with OpenClaw's built-in TTS
⚙️ Configuration
The scripts look for your API key in this order:
environment variableVOICE_AI_API_KEY- OpenClaw config (
)~/.openclaw/openclaw.json - Skill-local
file.env
Get your API key: Voice.ai Dashboard
Create .env
file (Recommended)
.envecho 'VOICE_AI_API_KEY=your-key-here' > .env
Or export directly
export VOICE_AI_API_KEY="your-api-key"
🤖 OpenClaw Integration
Add this skill to your OpenClaw configuration at
~/.openclaw/openclaw.json:
{ "skills": { "voice-ai-tts": { "enabled": true, "api_key": "your-voice-ai-api-key", "default_voice": "ellie", "default_format": "mp3" } }, "tts": { "skill": "voice-ai-tts", "voice_id": "d1bf0f33-8e0e-4fbf-acf8-45c3c6262513", "streaming": true } }
YAML config alternative
tts: skill: voice-ai-tts voice_id: d1bf0f33-8e0e-4fbf-acf8-45c3c6262513 streaming: true
📝 Triggers
These chat commands work with OpenClaw:
| Command | Description |
|---|---|
| Generate speech with default voice |
| Generate speech with specific voice |
| Generate with streaming mode |
| List available voices |
| Clone a voice from audio |
Examples:
/tts Hello, welcome to Voice.ai! /tts --voice oliver Good morning, everyone. /tts --voice lilith --stream This is a long story that will stream as it generates...
🎙️ Available Voices
| Voice | ID | Gender | Persona | Best For |
|---|---|---|---|---|
| ellie | | female | youthful | Vlogs, social content |
| oliver | | male | british | Narration, tutorials |
| lilith | | female | soft | ASMR, calm content |
| smooth | | male | deep | Documentaries, audiobooks |
| corpse | | male | distinctive | Gaming, entertainment |
| skadi | | female | anime | Character voices |
| zhongli | | male | deep | Gaming, dramatic content |
| flora | | female | cheerful | Kids content, upbeat |
| chief | | male | heroic | Gaming, action content |
🌍 Supported Languages
| Code | Language |
|---|---|
| English |
| Spanish |
| French |
| German |
| Italian |
| Portuguese |
| Polish |
| Russian |
| Dutch |
| Swedish |
| Catalan |
Use the multilingual model for non-English languages:
const audio = await client.generateSpeech({ text: 'Bonjour le monde!', voice_id: 'ellie-voice-id', model: 'voiceai-tts-multilingual-v1-latest', language: 'fr' });
🎨 Voice Design
Customize voice output with these parameters:
| Parameter | Range | Default | Description |
|---|---|---|---|
| 0-2 | 1.0 | Higher = more expressive, lower = more consistent |
| 0-1 | 0.8 | Controls randomness in speech generation |
Example:
const audio = await client.generateSpeech({ text: 'This will sound very expressive!', voice_id: 'ellie-voice-id', temperature: 1.8, top_p: 0.9 });
📡 Streaming Mode
Generate audio with real-time streaming (recommended for long texts):
# Stream audio as it generates node scripts/tts.js --text "This is a long story..." --voice ellie --stream # Streaming with custom output node scripts/tts.js --text "Chapter one..." --voice oliver --stream --output chapter1.mp3
SDK streaming:
const stream = await client.streamSpeech({ text: 'Long text here...', voice_id: 'ellie-voice-id' }); // Pipe to file stream.pipe(fs.createWriteStream('output.mp3')); // Or handle chunks stream.on('data', chunk => { // Process audio chunk });
🔊 Audio Formats
| Format | Description | Use Case |
|---|---|---|
| Standard MP3 (32kHz) | General use |
| Uncompressed WAV | High quality |
| Raw PCM audio | Processing |
| Opus 128kbps | Streaming |
| High-quality MP3 | Professional |
See
voice-ai-tts-sdk.js for all format options.
💻 CLI Usage
# Set API key echo 'VOICE_AI_API_KEY=your-key-here' > .env # Generate speech node scripts/tts.js --text "Hello world!" --voice ellie # Choose different voice node scripts/tts.js --text "Good morning!" --voice oliver --output morning.mp3 # Use streaming for long texts node scripts/tts.js --text "Once upon a time..." --voice lilith --stream # Show help node scripts/tts.js --help
🧬 Voice Cloning
Clone any voice from an audio sample:
const VoiceAI = require('./voice-ai-tts-sdk'); const client = new VoiceAI(process.env.VOICE_AI_API_KEY); // Clone from file const result = await client.cloneVoice({ file: './my-voice-sample.mp3', name: 'My Custom Voice', visibility: 'PRIVATE', language: 'en' }); console.log('Voice ID:', result.voice_id); console.log('Status:', result.status); // Wait for voice to be ready const voice = await client.waitForVoice(result.voice_id); console.log('Voice ready!', voice);
Requirements:
- Audio sample: 10-30 seconds recommended
- Clear speech, minimal background noise
- Supported formats: MP3, WAV, M4A
📁 Files
voice-ai-tts/ ├── SKILL.md # This documentation ├── voice-ai-tts.yaml # OpenAPI specification ├── voice-ai-tts-sdk.js # JavaScript/Node.js SDK ├── scripts/ │ └── tts.js # CLI tool └── .env # API key (create this)
💰 Cost & Usage
Voice.ai uses a credit-based system. Check your usage:
// The SDK tracks usage via API responses const voices = await client.listVoices(); // Check response headers for rate limit info
Tips to reduce costs:
- Use streaming for long texts (more efficient)
- Cache generated audio when possible
- Use appropriate audio quality for your use case
🔗 Links
- Get API Key - Sign up and get your key
- API Documentation - Full API reference
- Voice Library - Browse all voices
- API Reference - Endpoint details
- Pricing - Plans and credits
📋 Changelog
v1.0.0 (2025-01-31)
- Initial release
- 9 curated voice personas
- 11 language support
- Streaming mode
- Voice cloning
- Voice design parameters
- Full SDK with error handling
- CLI tool
🛠️ SDK Quick Reference
const VoiceAI = require('./voice-ai-tts-sdk'); const client = new VoiceAI(process.env.VOICE_AI_API_KEY); // List voices const voices = await client.listVoices({ limit: 10 }); // Get voice details const voice = await client.getVoice('voice-id'); // Generate speech const audio = await client.generateSpeech({ text: 'Hello, world!', voice_id: 'voice-id', audio_format: 'mp3' }); // Generate to file await client.generateSpeechToFile( { text: 'Hello!', voice_id: 'voice-id' }, 'output.mp3' ); // Stream speech const stream = await client.streamSpeech({ text: 'Long text...', voice_id: 'voice-id' }); // Clone voice const clone = await client.cloneVoice({ file: './sample.mp3', name: 'My Voice' }); // Delete voice await client.deleteVoice('voice-id');
❓ Troubleshooting
| Error | Cause | Solution |
|---|---|---|
| Invalid API key | Check your |
| Out of credits | Add credits at voice.ai/dashboard |
| Too many requests | Wait and retry, or upgrade plan |
| Invalid parameters | Check text length and voice_id |
Made with ❤️ by Nick Gill