TJ

T-009

TV Remote

The TV's remote on the Mac, with every app on the TV a click away.

The TV Remote app icon: a white remote on a dark rounded square, with a green light.

Mac app · macOS 15

What it does

  • Sits in the menu bar. Finds Android TV and Google TV sets on the Wi-Fi and pairs with the code the TV shows.
  • The TV's remote, key for key: power, the ring and OK, back, home, volume, mute, input, live TV and settings.
  • Netflix, Prime Video and YouTube keys, and a blue key you set to any app.
  • An Apps page: search 57 TV apps, or type any package name, and open one. Apps open by link, and if the TV refuses the link, by their Google Play page.
  • The mic key asks Google Assistant on the TV, through the Mac's microphone.
  • Keyboard mode, on ⌃⌥K: the Mac's keyboard types into the TV, and its volume and play keys work the TV.
  • A floating remote above every app, that tucks into the edge of the screen.
  • Wakes the TV with Wake-on-LAN, where the TV allows it.

Needs

  • macOS 15 or later.
  • A TV on Android TV or Google TV, on the same network.
  • Accessibility permission, only for the Mac's media keys in keyboard mode.

tvctl

The app's code, from a terminal. It shares the app's pairing, so pair once in either.

Commands
tvctl discover               # list TVs on the network
tvctl pair [name|ip]         # pair this Mac (type the code the TV shows)
tvctl status                 # power, current app, volume
tvctl key UP OK BACK         # press buttons
tvctl launch com.netflix.ninja
tvctl text "words"           # type into the TV's focused text field
tvctl say what time is it    # ask the Assistant, in the Mac's voice
tvctl wake                   # Wake-on-LAN
tvctl forget                 # drop the saved TV
Run it from the package
swift run tvctl discover

Build it

A Swift package: the app, tvctl, and TVRemoteKit, the Google TV remote protocol they share. The script builds TV Remote.app into build/ and signs it ad hoc, so it runs on the Mac that built it. The source isn't public yet.

Build
scripts/build-app.sh            # build only
scripts/build-app.sh --install  # also copy it to ~/Applications and open it

Ideas

  • Pause the show when your phone rings.
  • Movie night: everyone votes for the app from their phone.
  • The TV turns itself off when the last person leaves the room.

Want one of these, or something wilder? Let's make it.