2025-12-20 12:22:15 +01:00
|
|
|
---
|
|
|
|
|
name: sag
|
|
|
|
|
description: ElevenLabs text-to-speech with mac-style say UX.
|
2025-12-20 21:12:48 +01:00
|
|
|
homepage: https://sag.sh
|
2026-01-31 21:21:09 +09:00
|
|
|
metadata:
|
|
|
|
|
{
|
|
|
|
|
"openclaw":
|
|
|
|
|
{
|
2026-03-11 09:13:10 -04:00
|
|
|
"emoji": "🔊",
|
2026-01-31 21:21:09 +09:00
|
|
|
"requires": { "bins": ["sag"], "env": ["ELEVENLABS_API_KEY"] },
|
|
|
|
|
"primaryEnv": "ELEVENLABS_API_KEY",
|
|
|
|
|
"install":
|
|
|
|
|
[
|
|
|
|
|
{
|
|
|
|
|
"id": "brew",
|
|
|
|
|
"kind": "brew",
|
|
|
|
|
"formula": "steipete/tap/sag",
|
|
|
|
|
"bins": ["sag"],
|
|
|
|
|
"label": "Install sag (brew)",
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
}
|
2025-12-20 12:22:15 +01:00
|
|
|
---
|
|
|
|
|
|
|
|
|
|
# sag
|
|
|
|
|
|
2025-12-20 12:54:15 +01:00
|
|
|
Use `sag` for ElevenLabs TTS with local playback.
|
2025-12-20 12:22:15 +01:00
|
|
|
|
2025-12-20 12:54:15 +01:00
|
|
|
API key (required)
|
2026-01-31 21:21:09 +09:00
|
|
|
|
2025-12-20 12:54:15 +01:00
|
|
|
- `ELEVENLABS_API_KEY` (preferred)
|
|
|
|
|
- `SAG_API_KEY` also supported by the CLI
|
2025-12-20 12:22:15 +01:00
|
|
|
|
2025-12-20 12:54:15 +01:00
|
|
|
Quick start
|
2026-01-31 21:21:09 +09:00
|
|
|
|
2025-12-20 12:54:15 +01:00
|
|
|
- `sag "Hello there"`
|
|
|
|
|
- `sag speak -v "Roger" "Hello"`
|
|
|
|
|
- `sag voices`
|
|
|
|
|
- `sag prompting` (model-specific tips)
|
|
|
|
|
|
|
|
|
|
Model notes
|
2026-01-31 21:21:09 +09:00
|
|
|
|
2025-12-20 12:54:15 +01:00
|
|
|
- Default: `eleven_v3` (expressive)
|
|
|
|
|
- Stable: `eleven_multilingual_v2`
|
|
|
|
|
- Fast: `eleven_flash_v2_5`
|
|
|
|
|
|
2025-12-20 21:43:03 +01:00
|
|
|
Pronunciation + delivery rules
|
2026-01-31 21:21:09 +09:00
|
|
|
|
2025-12-20 21:43:03 +01:00
|
|
|
- First fix: respell (e.g. "key-note"), add hyphens, adjust casing.
|
|
|
|
|
- Numbers/units/URLs: `--normalize auto` (or `off` if it harms names).
|
|
|
|
|
- Language bias: `--lang en|de|fr|...` to guide normalization.
|
|
|
|
|
- v3: SSML `<break>` not supported; use `[pause]`, `[short pause]`, `[long pause]`.
|
|
|
|
|
- v2/v2.5: SSML `<break time="1.5s" />` supported; `<phoneme>` not exposed in `sag`.
|
|
|
|
|
|
|
|
|
|
v3 audio tags (put at the entrance of a line)
|
2026-01-31 21:21:09 +09:00
|
|
|
|
2025-12-20 21:43:03 +01:00
|
|
|
- `[whispers]`, `[shouts]`, `[sings]`
|
|
|
|
|
- `[laughs]`, `[starts laughing]`, `[sighs]`, `[exhales]`
|
|
|
|
|
- `[sarcastic]`, `[curious]`, `[excited]`, `[crying]`, `[mischievously]`
|
|
|
|
|
- Example: `sag "[whispers] keep this quiet. [short pause] ok?"`
|
|
|
|
|
|
2025-12-20 12:54:15 +01:00
|
|
|
Voice defaults
|
2026-01-31 21:21:09 +09:00
|
|
|
|
2025-12-20 12:54:15 +01:00
|
|
|
- `ELEVENLABS_VOICE_ID` or `SAG_VOICE_ID`
|
|
|
|
|
|
|
|
|
|
Confirm voice + speaker before long output.
|
2026-01-03 03:34:26 +00:00
|
|
|
|
|
|
|
|
## Chat voice responses
|
|
|
|
|
|
|
|
|
|
When Peter asks for a "voice" reply (e.g., "crazy scientist voice", "explain in voice"), generate audio and send it:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# Generate audio file
|
|
|
|
|
sag -v Clawd -o /tmp/voice-reply.mp3 "Your message here"
|
|
|
|
|
|
|
|
|
|
# Then include in reply:
|
|
|
|
|
# MEDIA:/tmp/voice-reply.mp3
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Voice character tips:
|
2026-01-31 21:21:09 +09:00
|
|
|
|
2026-01-03 03:34:26 +00:00
|
|
|
- Crazy scientist: Use `[excited]` tags, dramatic pauses `[short pause]`, vary intensity
|
|
|
|
|
- Calm: Use `[whispers]` or slower pacing
|
|
|
|
|
- Dramatic: Use `[sings]` or `[shouts]` sparingly
|
|
|
|
|
|
|
|
|
|
Default voice for Clawd: `lj2rcrvANS3gaWWnczSX` (or just `-v Clawd`)
|