# Announcer

> Announce text throughout the house via AirPlay speakers using Airfoil + ElevenLabs TTS.

- Skill: `kbarbel640-del/announcer` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add kbarbel640-del/announcer`
- Raw SKILL.md: https://api.skillmd.com/api/skills/kbarbel640-del/announcer/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: kbarbel640-del (https://skillmd.com/u/kbarbel640-del)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/kbarbel640-del/announcer

---


# 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
```

