Media
announcer
Announce text throughout the house via AirPlay speakers using Airfoil +.
---
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.2
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
1. Generate speech via ElevenLabs (high-quality opus → stereo MP3)
2. Connect to AirPlay speakers via Airfoil
3. Play an optional chime (gong) followed by the announcement
4. 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`:
```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": "System-Wide Audio",
"connection_timeout_seconds": 30,
"volume": 0.7
}
}
```
### 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
```bash
# Announce to all configured speakers
python3 skills/announcer/scripts/announce.py "Dinner is ready!"
# Announce to specific speakers only
python3 skills/announcer/scripts/announce.py "Wake up!" --speakers "Kids Room"
# Skip the chime
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
```
media
By
Comments
Sign in to leave a comment