Voice
Fish Audio
Fish Audio TTS speech provider plugin for OpenClaw
Install
openclaw plugins install @conan-scott/openclaw-fish-audio
README
# Fish Audio Speech β OpenClaw Plugin
[Fish Audio](https://fish.audio) TTS speech provider for [OpenClaw](https://openclaw.ai). High-quality voice cloning and text-to-speech with S2-Pro and S1 models.
## Features
- **Voice cloning** β use any Fish Audio voice (your own clones or community voices)
- **S2-Pro & S1 models** β latest Fish Audio TTS models
- **Format-aware output** β opus for voice notes (Telegram, WhatsApp), mp3 otherwise
- **Inline directives** β control voice, speed, model, latency, and sampling per-message
- **Voice listing** β browse your cloned voices and popular community voices via `/voice list`
## Installation
```bash
openclaw plugins install @conan-scott/openclaw-fish-audio
```
Then restart OpenClaw.
## Getting an API Key
1. Sign up at [fish.audio](https://fish.audio)
2. Go to **Account** β **API Keys** β **Create API Key**
3. Copy the key for configuration below
## Configuration
Add to your `openclaw.json`:
```json5
{
messages: {
tts: {
provider: "fish-audio",
providers: {
"fish-audio": {
apiKey: "your-fish-audio-api-key",
voiceId: "reference-id-of-your-voice",
model: "s2-pro", // s2-pro (default) | s1
latency: "normal", // normal (default) | balanced | low
// speed: 1.0, // 0.5β2.0 (optional)
// temperature: 0.7, // 0β1 (optional)
// topP: 0.8, // 0β1 (optional)
},
},
},
},
}
```
Alternatively, set the `FISH_AUDIO_API_KEY` environment variable and configure only `voiceId`.
## Finding a Voice
Use the `/voice list` command in OpenClaw to browse available voices. The plugin shows:
1. **Your cloned/trained voices** (all pages, via `self=true`)
2. **Popular community voices** (top-ranked by score) as a fallback for new users
You can also browse voices at [fish.audio](https://fish.audio) and copy the voice ID from the URL.
## Inline Directives
All directive keys are provider-prefixed to avoid collisions with other speech providers. Both `fishaudio_*` and shorter `fish_*` aliases work.
```
[[tts:fishaudio_voice=<ref_id>]] Switch voice
[[tts:fishaudio_speed=1.2]] Prosody speed (0.5β2.0)
[[tts:fishaudio_model=s1]] Model override
[[tts:fishaudio_latency=low]] Latency mode
[[tts:fishaudio_temperature=0.7]] Sampling temperature (0β1)
[[tts:fishaudio_top_p=0.8]] Top-p sampling (0β1)
```
Short aliases: `fish_voice`, `fish_speed`, `fish_model`, `fish_latency`, `fish_temperature`, `fish_top_p`.
## Models
| Model | Description |
|-------|-------------|
| `s2-pro` | Latest high-quality model (default) |
| `s1` | Previous generation, lighter weight |
## Latency Modes
| Mode | Description |
|------|-------------|
| `normal` | Best quality, higher latency (default) |
| `balanced` | Balance between quality and speed |
| `low` | Fastest response, may reduce quality |
## Troubleshooting
- **No voice configured**: Set `voiceId` in config. Fish Audio has no universal default voice.
- **Empty voice list**: New users with no cloned voices will see popular community voices as a starting point.
- **API key missing**: Set either `apiKey` in config or `FISH_AUDIO_API_KEY` env var.
## License
MIT
voice
Comments
Sign in to leave a comment