Speech & TranscriptionDocumentedScanned

voice-ai-voices

voice-ai-voices skill for OpenClaw agents

Share:

Installation

npx clawhub@latest install voice-ai-voices

View the full skill documentation and source below.

Documentation

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:

  • VOICE_AI_API_KEY environment variable

  • OpenClaw config (~/.openclaw/openclaw.json)

  • Skill-local .env file
  • Get your API key: [Voice.ai Dashboard]()

    Create .env file (Recommended)

    echo '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:

    CommandDescription
    /tts Generate speech with default voice
    /tts --voice ellie Generate speech with specific voice
    /tts --stream Generate with streaming mode
    /voicesList available voices
    /clone 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

    VoiceIDGenderPersonaBest For
    ellied1bf0f33-8e0e-4fbf-acf8-45c3c6262513femaleyouthfulVlogs, social content
    oliverf9e6a5eb-a7fd-4525-9e92-75125249c933malebritishNarration, tutorials
    lilith4388040c-8812-42f4-a264-f457a6b2b5b9femalesoftASMR, calm content
    smoothdbb271df-db25-4225-abb0-5200ba1426bcmaledeepDocumentaries, audiobooks
    corpse72d2a864-b236-402e-a166-a838ccc2c273maledistinctiveGaming, entertainment
    skadi559d3b72-3e79-4f11-9b62-9ec702a6c057femaleanimeCharacter voices
    zhonglied751d4d-e633-4bb0-8f5e-b5c8ddb04402maledeepGaming, dramatic content
    floraa931a6af-fb01-42f0-a8c0-bd14bc302bb1femalecheerfulKids content, upbeat
    chiefbd35e4e6-6283-46b9-86b6-7cfa3dd409b9maleheroicGaming, action content

    🌍 Supported Languages

    CodeLanguage
    enEnglish
    esSpanish
    frFrench
    deGerman
    itItalian
    ptPortuguese
    plPolish
    ruRussian
    nlDutch
    svSwedish
    caCatalan
    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:

    ParameterRangeDefaultDescription
    temperature0-21.0Higher = more expressive, lower = more consistent
    top_p0-10.8Controls 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

    FormatDescriptionUse Case
    mp3Standard MP3 (32kHz)General use
    wavUncompressed WAVHigh quality
    pcmRaw PCM audioProcessing
    opus_48000_128Opus 128kbpsStreaming
    mp3_44100_192High-quality MP3Professional
    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

    ErrorCauseSolution
    AuthenticationErrorInvalid API keyCheck your VOICE_AI_API_KEY
    PaymentRequiredErrorOut of creditsAdd credits at voice.ai/dashboard
    RateLimitErrorToo many requestsWait and retry, or upgrade plan
    ValidationErrorInvalid parametersCheck text length and voice_id

    Made with ❤️ by [Nick Gill]()