用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/duclm1x1/Dive-Ai --skill voice-ai-tts命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
Persistent memory system for AI agents following Model Context Protocol (MCP). Use for storing long-term memories across sessions, semantic search of past knowledge, building knowledge graphs, auto-injecting context, deduplicating memories, syncing to cloud storage. Essential for agents that need to remember decisions, solutions, preferences, and learned patterns over time.
Persistent memory system for AI agents following Model Context Protocol (MCP). Use for storing long-term memories across sessions, semantic search of past knowledge, building knowledge graphs, auto-injecting context, deduplicating memories, syncing to cloud storage. Essential for agents that need to remember decisions, solutions, preferences, and learned patterns over time.
Master REST and GraphQL API design principles to build intuitive, scalable, and maintainable APIs that delight developers. Use when designing new APIs, reviewing API specifications, or establishing API design standards.
正在显示 SKILL.md
| name | voice-ai-tts |
| description | High-quality voice synthesis with 9 personas, 11 languages, streaming, and voice cloning using Voice.ai API. |
| version | 1.0.0 |
The scripts look for your API key in this order:
VOICE_AI_API_KEY environment variable~/.openclaw/openclaw.json).env fileGet your API key: Voice.ai Dashboard
.env file (Recommended)echo 'VOICE_AI_API_KEY=your-key-here' > .env
export VOICE_AI_API_KEY="your-api-key"
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
}
}
tts:
skill: voice-ai-tts
voice_id: d1bf0f33-8e0e-4fbf-acf8-45c3c6262513
streaming: true
These chat commands work with OpenClaw:
| Command | Description |
|---|---|
/tts <text> | Generate speech with default voice |
/tts --voice ellie <text> | Generate speech with specific voice |
/tts --stream <text> | Generate with streaming mode |
/voices | List available voices |
/clone <audio_url> | 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...
| Voice | ID | Gender | Persona | Best For |
|---|---|---|---|---|
| ellie | d1bf0f33-8e0e-4fbf-acf8-45c3c6262513 | female | youthful | Vlogs, social content |
| oliver | f9e6a5eb-a7fd-4525-9e92-75125249c933 | male | british | Narration, tutorials |
| lilith | 4388040c-8812-42f4-a264-f457a6b2b5b9 | female | soft | ASMR, calm content |
| smooth | dbb271df-db25-4225-abb0-5200ba1426bc | male | deep | Documentaries, audiobooks |
| corpse | 72d2a864-b236-402e-a166-a838ccc2c273 | male | distinctive | Gaming, entertainment |
| skadi | 559d3b72-3e79-4f11-9b62-9ec702a6c057 | female | anime | Character voices |
| zhongli | ed751d4d-e633-4bb0-8f5e-b5c8ddb04402 | male | deep | Gaming, dramatic content |
| flora | a931a6af-fb01-42f0-a8c0-bd14bc302bb1 | female | cheerful | Kids content, upbeat |
| chief | bd35e4e6-6283-46b9-86b6-7cfa3dd409b9 | male | heroic | Gaming, action content |
| Code | Language |
|---|---|
en | English |
es | Spanish |
fr | French |
de | German |
it | Italian |
pt | Portuguese |
pl | Polish |
ru | Russian |
nl | Dutch |
sv | Swedish |
ca | 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'
});
Customize voice output with these parameters:
| Parameter | Range | Default | Description |
|---|---|---|---|
temperature | 0-2 | 1.0 | Higher = more expressive, lower = more consistent |
top_p | 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
});
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
});
| Format | Description | Use Case |
|---|---|---|
mp3 | Standard MP3 (32kHz) | General use |
wav | Uncompressed WAV | High quality |
pcm | Raw PCM audio | Processing |
opus_48000_128 | Opus 128kbps | Streaming |
mp3_44100_192 | High-quality MP3 | Professional |
See voice-ai-tts-sdk.js for all format options.
# 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
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:
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)
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:
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');
| Error | Cause | Solution |
|---|---|---|
AuthenticationError | Invalid API key | Check your VOICE_AI_API_KEY |
PaymentRequiredError | Out of credits | Add credits at voice.ai/dashboard |
RateLimitError | Too many requests | Wait and retry, or upgrade plan |
ValidationError | Invalid parameters | Check text length and voice_id |
Made with ❤️ by Nick Gill