A tiny menu-bar app that controls any Apple TV on your network — from the keyboard, the trackpad, or a faithful on-screen replica of the Siri Remote.
Click the icon, the remote drops down. Click outside, it disappears. Pin it if you want it sticky.
Swipe anywhere on the remote to move focus on tvOS. Two-finger tap is select; long-press is back.
Hold the touchpad center for context menus, hold TV for the app switcher, hold power to sleep.
Drag any corner to scale the remote up or down. Your size is remembered.
Volume +/− work over Companion. Mute toggles by remembering and restoring your level.
Switch between TVs from the menu — each pair-once and remember. Drag to move the panel anywhere.
Three short steps: install pyatv, install the app, pair from the in-app Settings window.
The app uses pyatv under the hood for Apple TV protocol support. Install via pipx so it gets its own isolated Python environment:
brew install pipx
pipx ensurepath
pipx install pyatv
Reopen Terminal afterward so ~/.local/bin is on your PATH.
Grab the latest DMG below. Drag Apple TV Remote to your Applications folder, then launch it. The app lives in the menu bar — click the icon to summon the remote.
The first time the app discovers Apple TVs, macOS will ask for permission to access your local network. Allow it.
On first launch the remote shows a No Apple TV paired screen. Click Open Settings (or click the bolt icon → Settings…) and choose Pair new Apple TV….
Pick your TV from the discovered list, then type the 4-digit PIN that appears on the screen. That's it — credentials are stored locally for every command going forward, and your TV shows up in the bottom toolbar's source picker.
Universal binary · macOS 14 Sonoma or later
Download .dmgSigned and notarized by Apple. Release notes
The app uses pyatv (an open-source Python library) to speak the protocols the Apple TV expects. Bundling Python inside a Mac app would balloon the download to 30+ MB and complicate updates. Keeping pyatv external means you also get its updates independently — useful when Apple changes things.
No. The App Store sandbox doesn't let apps run external binaries like atvremote, so distributing it through the Store would require rewriting the entire Companion protocol stack in Swift. Maybe one day.
To find your Apple TV the app uses Bonjour/mDNS, which counts as local network access on macOS 15+. The first time you trigger a scan you'll see a one-time prompt. You can later toggle it in System Settings → Privacy & Security → Local Network.
Yes — tap the silver power button to wake, long-press it to sleep. (Both go through pyatv's power.turn_on / power.turn_off, which work for most Apple TV configurations.)
Sort of. tvOS doesn't expose a real mute over the Companion protocol, so the app fakes it by ramping the volume to 0 and remembering your previous level so it can restore. If you change the volume by other means while "muted", the restore will land at the level we remembered, not your new one.
App preferences (size, pin state, swipe mode) live in macOS UserDefaults under bundle ID N8.AppleTV. Pyatv credentials live in ~/.pyatv/storage.json.