TTS
Text-to-speech with local Piper voices, StreamElements, and ElevenLabs.
TTS
The TTS plugin speaks text through local Piper voices, StreamElements, or ElevenLabs.
Setup
Open Plugins → TTS → Configure and set up one or more providers:
| Provider | Requirements |
|---|---|
| Local TTS | Download Piper voices in the app |
| StreamElements | StreamElements overlay token |
| ElevenLabs | ElevenLabs API key |
ElevenLabs voices
After a valid API key:
- Open Voices on the configure page.
- Search and copy a voice ID from the table.
- In TTS → ElevenLabs → Speak Text, choose Variable for voice and use
{voiceId}from context.
Choose a default model on the configure page; override per handler or use Use default model.
Handlers
| Handler | Description |
|---|---|
| TTS → Skip | Stop the currently playing TTS message (and discard in-flight synthesis); the next queued clip still plays |
| TTS → Local → Speak Text | Offline Piper voice |
| TTS → StreamElements → Speak Text | Cloud via StreamElements |
| TTS → ElevenLabs → Speak Text | Cloud via ElevenLabs |
Each handler supports a fixed voice or a Variable voice ID.
Speak handlers finish after their audio has finished playing, or after a playback timeout (about two minutes) if the audio device hangs. A stalled ElevenLabs request is aborted after 30 seconds. In both cases the handler fails softly and the next clip or action can run — the TTS queue will not stay blocked. Use an action queue with blocking enabled when later actions must wait for that speech to end.
Reference: TTS handlers.