Author: Parth Maniar — @officialpm
This skill is a thin workflow wrapper around two tools:
atvremote) for discovering Apple TVs/HomePods and (when supported/paired) remote-control style commands.airfoil skill) for reliable speaker connect/disconnect + volume control across AirPlay speakers (including HomePods).This skill uses pyatv installed via pipx.
Install/repair (pinned to Python 3.12 to avoid Python 3.14 asyncio issues):
bash
pipx install pyatv || pipx upgrade pyatv
pipx reinstall pyatv --python python3.12
Verify:
bash
atvremote --help | head
bash
# Fast scan (5s)
./scripts/scan.sh 5
# Faster scan when you know IP(s)
./scripts/scan-hosts.sh "10.0.0.28,10.0.0.111" 3
# Or JSON output
node ./scripts/scan-json.js 5
You’ll see devices like:
Use Airfoil for speaker control (reliable for HomePods):
bash
# List speakers Airfoil can see
../airfoil/airfoil.sh list
# Connect and set volume
./scripts/connect.sh "Living Room"
./scripts/volume.sh "Living Room" 35
# Disconnect (direct)
../airfoil/airfoil.sh disconnect "Living Room"
First, scan to find the Apple TV name or id, then run commands:
bash
# Examples (device name can be Apple TV or other targets)
atvremote -n "TV" playing
atvremote -n "TV" play_pause
atvremote -n "TV" turn_on
atvremote -n "TV" turn_off
If you get auth/protocol errors, pairing/credentials are needed (device-dependent).
pyatv HomePod control often requires authentication and may not support all remote-control commands out of the box.
atvremote scan is the source of truth for IP/ID discovery.
scripts/scan.sh#Runs atvremote scan with a configurable timeout.
bash
./scripts/scan.sh 5
scripts/scan-json.js#Parses atvremote scan output into a compact JSON summary (name, address, model, services).
bash
node ./scripts/scan-json.js