Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

tts-providers

A config-driven text-to-speech tool for OpenClaw. One script, multiple TTS providers, zero dependencies.

Adding a new provider = adding a JSON block. No code changes.

Features

  • 🔧 Config-driven — providers defined in tts_providers.json
  • 🗣️ Multi-provider — DashScope (Qwen3-TTS), Speechify, easily extensible
  • 📦 Zero dependencies — pure Python stdlib
  • 🔑 Reads API keys from environment (OpenClaw env.vars compatible)
  • 🌏 Multilingual — English, Chinese, Japanese, and more

Quick Start

# Set your API key
export DASHSCOPE_API_KEY="sk-..."

# Default provider
echo "Hello world" | python3 tts.py -o hello.mp3

# Specify provider
python3 tts.py -p dashscope --text "Hello" -o hello.mp3
python3 tts.py -p speechify --text "Hello" --voice george -o hello.mp3

# Instruction-controlled expressiveness
python3 tts.py -p dashscope-instruct --instruct "Speak warmly" --text "Welcome" -o warm.mp3

# List providers
python3 tts.py --list-providers

# List voices
python3 tts.py --list-voices -p dashscope

Adding a New Provider

Edit tts_providers.json and add a block:

{
  "my-provider": {
    "name": "My TTS Provider",
    "endpoint": "https://api.example.com/v1/tts",
    "auth": {"header": "Authorization", "prefix": "Bearer", "env": "MY_API_KEY"},
    "defaults": {"model": "default-model", "voice": "default-voice"},
    "request_template": {
      "model": "{{model}}",
      "text": "{{text}}",
      "voice": "{{voice}}"
    },
    "response": {
      "type": "url",
      "path": "output.audio.url"
    }
  }
}

Response types

Type Description
url Response contains an audio URL at the configured path. Script downloads it.
base64 Response contains base64-encoded audio at the configured path. Script decodes it.

Template variables

Variable Source
{{text}} Input text
{{voice}} --voice or provider default
{{model}} --model or provider default
{{lang}} --lang or provider default
{{instruct}} --instruct (stripped if empty)

Bundled Providers

Provider Model Key Notes
dashscope Qwen3-TTS Flash DASHSCOPE_API_KEY International endpoint (Singapore)
dashscope-instruct Qwen3-TTS Instruct Flash DASHSCOPE_API_KEY Instruction-controlled expressiveness
speechify Simba English SPEECHIFY_API_KEY Requires paid subscription

OpenClaw Integration

Add API keys to openclaw.jsonenv.vars:

{
  "env": {
    "vars": {
      "DASHSCOPE_API_KEY": "sk-...",
      "SPEECHIFY_API_KEY": "..."
    }
  }
}

License

MIT

About

Config-driven TTS for OpenClaw: one script, multiple providers (DashScope, Speechify, extensible via JSON)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages