skills$openclaw/announcer
odrobnik9.5kā˜…

by odrobnik

announcer – OpenClaw Skill

announcer is an OpenClaw Skills integration for coding workflows. Announce text throughout the house via AirPlay speakers using Airfoil + ElevenLabs TTS.

9.5k stars2.6k forksSecurity L1
Updated Feb 7, 2026Created Feb 7, 2026coding

Skill Snapshot

nameannouncer
descriptionAnnounce text throughout the house via AirPlay speakers using Airfoil + ElevenLabs TTS. OpenClaw Skills integration.
ownerodrobnik
repositoryodrobnik/announcer
languageMarkdown
licenseMIT
topics
securityL1
installopenclaw add @odrobnik/announcer
last updatedFeb 7, 2026

Maintainer

odrobnik

odrobnik

Maintains announcer in the OpenClaw Skills directory.

View GitHub profile
File Explorer
5 files
.
scripts
announce.py
10.9 KB
_meta.json
272 B
README.md
1.0 KB
SKILL.md
2.6 KB
SKILL.md

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

  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:

{
  "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

FieldDescription
speakersAirPlay speaker names to connect
excludedSpeaker names to never connect
elevenlabs.voice_idElevenLabs voice to use
audio.chime_fileChime sound file in assets/ (set null to disable)
airfoil.connection_timeout_secondsTime to wait for speakers to connect
airfoil.volumeSpeaker volume (0.0–1.0)

Usage

# 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
README.md

announcer-skill

šŸ“¢ House-wide TTS announcements via AirPlay speakers using Airfoil and ElevenLabs.

An OpenClaw skill.

Works with any AirPlay speakers, including HomePods, Apple TVs, and third-party AirPlay receivers.

Airfoil connected to AirPlay speakers

How It Works

  1. Selects System-Wide Audio as the Airfoil source
  2. Connects to all configured speakers and waits until every one is online
  3. Sets the volume to the configured level
  4. Plays an optional chime (gong) followed by the TTS announcement
  5. Disconnects speakers after playback

Quick Start

# Announce to all configured speakers
python3 skills/announcer/scripts/announce.py say "Dinner is ready!"

# List available speakers
python3 skills/announcer/scripts/announce.py speakers

See SKILL.md for full documentation, configuration, and usage details.

Homepage

https://github.com/odrobnik/announcer-skill

Permissions & Security

Security level L1: Low-risk skills with minimal permissions. Review inputs and outputs before running in production.

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) |

FAQ

How do I install announcer?

Run openclaw add @odrobnik/announcer in your terminal. This installs announcer into your OpenClaw Skills catalog.

Does this skill run locally or in the cloud?

OpenClaw Skills execute locally by default. Review the SKILL.md and permissions before running any skill.

Where can I verify the source code?

The source repository is available at https://github.com/openclaw/skills/tree/main/skills/odrobnik/announcer. Review commits and README documentation before installing.