| name | announcer |
| description | Announce text throughout the house via AirPlay speakers using Airfoil + ElevenLabs TTS. |
| summary | House-wide TTS announcements via AirPlay speakers, Airfoil, and ElevenLabs. |
| version | 1.1.0 |
| homepage | https://github.com/odrobnik/announcer-skill |
| metadata | {"openclaw":{"emoji":"📢","requires":{"bins":["python3","ffmpeg"],"apps":["Airfoil"],"env":["ELEVENLABS_API_KEY"],"skills":["elevenlabs"]}}} |
Announcer
Play TTS announcements through AirPlay speakers via Airfoil and ElevenLabs.
How It Works
- Generate speech via ElevenLabs (high-quality opus → stereo MP3)
- Connect to AirPlay speakers via Airfoil
- Play an optional chime (gong) followed by the announcement
- Disconnect speakers after playback
Requirements
- Airfoil (Rogue Amoeba) — running on the host Mac
- ElevenLabs API key — set
ELEVENLABS_API_KEY env var
- ffmpeg — for audio format conversion
- elevenlabs skill — sibling skill for TTS generation
Configuration
User config lives at ~/clawd/announcer/config.json:
{
"speakers": ["Living (2)", "Kitchen", "Office"],
"excluded": ["Computer"],
"elevenlabs": {
"voice_id": "your-voice-id",
"format": "opus_48000_192"
},
"audio": {
"output_format": "mp3",
"stereo": true,
"sample_rate": 48000,
"bitrate": "256k",
"chime_file": "gong_stereo.mp3"
},
"airfoil": {
"source"
Config Fields
| Field | Description |
|---|
speakers | AirPlay speaker names to connect |
excluded | Speaker names to never connect |
elevenlabs.voice_id | ElevenLabs voice to use |
audio.chime_file | Chime sound file in assets/ (set null to disable) |
airfoil.connection_timeout_seconds | Time to wait for speakers to connect |
airfoil.volume | Speaker volume (0.0–1.0) |
Usage
python3 skills/announcer/scripts/announce.py "Dinner is ready!"
python3 skills/announcer/scripts/announce.py "Wake up!" --speakers "Kids Room"
python3 skills/announcer/scripts/announce.py "Quick note" --no-gong
File Structure
announcer/
├── SKILL.md
├── assets/
│ └── gong_stereo.mp3 # Announcement chime
└── scripts/
└── announce.py # Main announcement script
User config (not part of skill):
~/clawd/announcer/
└── config.json # Speaker list, voice, audio settings