nickustinov
itsytv-macos
Swift

The missing Apple TV remote app for macOS

Last updated Jul 6, 2026
581
Stars
23
Forks
3
Issues
+581
Stars/day
Attention Score
81
Language breakdown
Swift 96.5%
Shell 3.5%
โ–ธ Files click to expand
README

Itsytv

Release Downloads License: MIT Swift 5.10 macOS 14+ Homebrew

A native macOS menu bar app for controlling your Apple TV. macOS has no built-in Apple TV remote โ€“ Itsytv fills the gap: d-pad, keyboard navigation, live text input, now playing, and an app launcher, speaking the same local-network protocol the Siri Remote uses. Free and open source (MIT), installable via Homebrew.

Download on the Mac App Store

itsytv hero

Also on iPhone

Itsytv is now available on iOS with the same core experience plus features designed for mobile:

  • TMDB lookup for what's playing โ€“ poster art, ratings, and details for movies and TV shows
  • Ergonomic design for left- and right-handed use

Itsytv iPhone remote    Itsytv iPhone app launcher

Download on the App Store

Features

  • Menu bar remote โ€“ control your Apple TV from a compact floating panel
  • D-pad and buttons โ€“ circular d-pad with directional navigation, select, home, menu/back, play/pause
  • Keyboard navigation โ€“ arrow keys, Return, Backspace, Escape, Space mapped to remote buttons
  • Text input โ€“ type directly into Apple TV text fields with a live keyboard
  • Now playing โ€“ artwork, title, artist, progress bar, and playback controls
  • App launcher โ€“ grid of installed apps with icons fetched from the App Store; drag to reorder
  • Multiple devices โ€“ pair and switch between multiple Apple TVs
  • Global hotkeys โ€“ assign keyboard shortcuts to instantly open the remote for specific Apple TVs
  • Per-device panel position โ€“ remembers where you placed the remote for each Apple TV
  • Launch at login โ€“ optional auto-start from the menu bar
  • Unpair โ€“ remove pairing credentials from the panel menu
  • AppleScript & Shortcuts โ€“ script play/pause from anything that runs AppleScript

AppleScript and Shortcuts automation

Itsytv exposes AppleScript commands, so the Apple TV becomes scriptable from Shortcuts, Keyboard Maestro, Hammerspoon, Raycast, or a plain shell:

osascript -e 'tell application "itsytv" to pause'
osascript -e 'tell application "itsytv" to play'

Both commands are no-ops when nothing is playing, so they are safe to fire blindly. Some ideas:

  • A Shortcuts automation that pauses the Apple TV when a calendar meeting starts (Run AppleScript action)
  • A Hammerspoon or Keyboard Maestro hotkey that toggles playback without touching a remote
  • A cron job or at timer that pauses playback at bedtime
There is also a Shortcuts action to open the remote panel for a specific Apple TV โ€“ handy on a Stream Deck.

Perfect companion to Itsyhome

Itsytv pairs naturally with Itsyhome โ€“ a free macOS menu bar app for controlling your HomeKit devices. Manage lights, cameras, thermostats, locks, scenes, and 18+ accessory types without ever opening the Home app.

Itsyhome

Install

brew install --cask itsytv

Or download the latest DMG from GitHub releases.

Troubleshooting

Apple TV doesn't show a PIN code when pairing

If you send a pairing request but no PIN appears on your TV screen, your Apple TV is likely restricting which devices can connect to it. To fix this:

  • Open Settings > AirPlay and Apple Home on your Apple TV
  • Set Allow access to Anyone on the same network
  • Set Require Password to Off (after pairing is completed, Require Password can be turned back on)
  • Go to Settings > General > Restrictions
  • Set both AirPlay Settings and Remote App Pairing to Allow
The settings in step 2 and 5 need to stay on this value for itsytv to maintain a connection to your Apple TV.

Remote disappears after a few seconds

If the remote panel closes on its own shortly after connecting, your Apple TV's AirPlay access setting is likely set to Only people sharing this home. Open Settings on your Apple TV, go to AirPlay and Apple Home, and change Allow access to Anyone on the same network.

Nothing happens when I launch the app

Itsytv is a menu bar app โ€“ it lives in the top-right area of your screen as a small TV icon, not in the Dock. On MacBooks with a notch, macOS hides menu bar icons that don't fit behind the notch โ€“ silently, with no warning. If your menu bar is crowded, the itsytv icon may be there but invisible.

To fix this, hold Cmd and drag any icons you don't need off the menu bar. Once itsytv appears, Cmd-drag it to the right so it stays visible.

FAQ

Is it free? On the Mac, yes โ€“ free via Homebrew or the DMG, MIT-licensed open source. The Mac App Store version is a one-time $4.99 universal purchase that also covers iPhone and iPad. No subscription, ads, or in-app purchases anywhere.

Which Apple TVs work? Apple TV 4th generation or later running tvOS 15+, on the same local network as the Mac. Older Apple TVs don't support the protocol.

Do I need the physical Siri Remote to pair? No. The Apple TV shows a four-digit PIN on the TV screen and you type it into Itsytv. Credentials are stored in the macOS Keychain and the connection is end-to-end encrypted.

How is this different from other Apple TV remote apps? Itsytv speaks Apple's native MediaRemote/Companion protocol over the local network โ€“ the same one the Siri Remote uses โ€“ so input is instant, with no cloud service or polling in between. Most remote apps in this category charge a subscription; Itsytv doesn't, and on the Mac you can read the source to verify what it does.

Can it change the TV volume? Yes, when the Apple TV controls volume over HDMI-CEC (Settings โ†’ Remotes and Devices โ†’ Volume Control on the Apple TV). Learned infrared volume codes only work from the physical remote, since Macs have no IR blaster.

More guides: control Apple TV from your Mac ยท Apple TV pairing troubleshooting ยท all Apple TV remote guides

Architecture

This app is a thin macOS UI layer on top of itsytv-core โ€“ a Swift package that implements the Apple TV Companion Link and AirPlay protocols. The same core powers both the macOS and iOS apps.

itsytv-macos/
โ”œโ”€โ”€ itsytvApp.swift              # App entry point
โ”œโ”€โ”€ UI/
โ”‚   โ”œโ”€โ”€ AppController.swift      # NSStatusItem, menu, floating panel, keyboard monitor
โ”‚   โ”œโ”€โ”€ MenuBarView.swift        # SwiftUI views: remote, now playing, app grid
โ”‚   โ””โ”€โ”€ AppIconLoader.swift      # App icons from iTunes Lookup API
โ”œโ”€โ”€ DesignSystem/
โ”‚   โ”œโ”€โ”€ DesignSystem.swift       # Colours, typography, spacing, sizing tokens
โ”‚   โ””โ”€โ”€ HighlightingMenuItemView.swift
โ”œโ”€โ”€ AppIntents/
โ”‚   โ””โ”€โ”€ OpenRemoteIntent.swift   # Shortcuts action to open the remote for a specific Apple TV
โ”œโ”€โ”€ MRP/
โ”‚   โ””โ”€โ”€ Proto/                   # Protobuf definitions (.proto files)
โ””โ”€โ”€ Utilities/
    โ”œโ”€โ”€ UpdateChecker.swift      # GitHub release checker
    โ””โ”€โ”€ HotkeyManager.swift      # Global hotkey registration

All protocol, crypto, discovery, and device management code lives in itsytv-core.

Requirements

  • macOS 14.0 or later
  • Xcode 16.0 or later
  • XcodeGen for project generation
  • Apple TV running tvOS 15 or later on the same local network

Setup

1. Clone the repositories

git clone https://github.com/nickustinov/itsytv-macos.git
git clone https://github.com/nickustinov/itsytv-core.git

Both repositories must be side by side โ€“ the Xcode project references ../itsytv-core as a local Swift package.

2. Install XcodeGen

brew install xcodegen

3. Generate the Xcode project

cd itsytv-macos
xcodegen generate

4. Open and run

open itsytv.xcodeproj

Select the itsytv scheme and run.

Building

The project uses XcodeGen to generate the Xcode project from project.yml. After making changes to project configuration:

xcodegen generate

Releasing

  • Bump MARKETINGVERSION and CURRENTPROJECT_VERSION in project.yml
  • Update CHANGELOG.md
  • Build, sign, and package the DMG:
bash scripts/build-release.sh
  • Notarize and staple:
xcrun notarytool submit dist/Itsytv-<VERSION>.dmg \
    --apple-id <APPLEID> --team-id <TEAMID> \
    --password <APPSPECIFICPASSWORD> --wait
xcrun stapler staple dist/Itsytv-<VERSION>.dmg
  • Create the GitHub release:
gh release create v<VERSION> dist/Itsytv-<VERSION>.dmg \
    --title "v<VERSION>" --notes "Release notes here"
  • Homebrew cask โ€“ itsytv is in the official homebrew-cask repository with autobump enabled. BrewTestBot automatically detects new GitHub releases and opens a PR within ~3 hours. No manual action needed.

License

MIT License (c) 2026 Nick Ustinov โ€“ see LICENSE for details.

Author

Nick Ustinov โ€“ @nickustinov

Acknowledgements

Protocol implementation informed by pyatv, the comprehensive Python library for Apple TV control.

ยฉ 2026 GitRepoTrend ยท nickustinov/itsytv-macos ยท Updated daily from GitHub