pyatv is a free, open source internet of things (iot) project written in Python and released under MIT. It has 1,201 GitHub stars, 164 forks and 258 open issues, and was last pushed 3 months ago. On this registry it ranks #74 of 99 tracked projects in Internet of Things (IoT), with 5 head-to-head comparisons available. It gained 23 stars over the last 30 tracked days.

What is pyatv?

pyatv is an asyncio Python client library, distributed on PyPI under the MIT licence, that lets developers and home-automation builders control Apple TV, HomePod, AirPort Express, and other AirPlay and RAOP receivers from their own code and scripts.

What it is

pyatv is a client library for Apple TV and AirPlay devices, written in Python and built around asyncio. It targets Apple TVs across all generations, including tvOS 15 and later, and it also handles audio streaming over AirPlay to receivers such as the HomePod, AirPort Express, and third-party speakers. It can additionally act as a remote control for the Music app and iTunes running on macOS. The library lives in the Python ecosystem, installs from PyPI, exposes its API at pyatv.dev, and ships a companion command-line tool called atvremote for day-to-day use.

The concrete problem it solves is access. Without it, controlling an Apple TV means using a physical remote and an on-screen interface, and there is no supported way for a program to read what is playing, launch an app, switch accounts, or change audio output destinations. pyatv replaces that manual, screen-bound control with a scriptable interface, pairing over the Media Remote Protocol (Protocol.MRP) and exposing playback state, metadata, and app control as ordinary calls. That makes Apple TV devices addressable from automation, dashboards, and other software rather than only from the sofa.

Key capabilities

  • Send remote control commands and read playback state, for example atvremote -s 10.0.10.254 playing and atvremote -s 10.0.10.254 pause.
  • Retrieve metadata with push updates, so currently playing media and state changes arrive without polling.
  • Discover and pair devices through atvremote wizard, which scans the local network, lists found devices with name, model, and address, and reports pairing success per protocol.
  • Address devices by network name as well as by address, for example atvremote -n FakeATV play.
  • Stream files over AirPlay, and add, remove, or set audio output devices such as HomePods.
  • List and launch installed apps, list and switch user accounts, and accept keyboard input.
  • Persist credentials and settings, and run in a container image published as ghcr.io/postlund/pyatv:0.14.0.

Who uses it and how

  • Home-automation developers who want Apple TV playback and state folded into their own automations, with the home-automation topic marking that audience.
  • Python developers building interactive control surfaces, since the library is asyncio-based and installs as the pyatv package.
  • Teams running headless on a home server: the container image covers x86_64, aarch64, and armv7, and docker run -it --rm --network=host ghcr.io/postlund/pyatv:0.14.0 atvremote scan needs no Python environment.
  • Contributors who want a prepared environment rather than local setup, using the Gitpod button in the README.
  • Script and CLI users who set a device up once with the wizard, then drive it with short atvremote calls.

Getting started

Install with pip install pyatv, then run atvremote wizard to scan the network and pair with a device by entering the PIN shown on screen. A container is available as an alternative: docker run -it --rm --network=host ghcr.io/postlund/pyatv:0.14.0 atvremote scan, where the master tag points to the latest commit on master and latest to the latest release.

How it compares

This registry entry does not list comparable or paid products that pyatv replaces, and the README names no similar tools. It therefore stands alone in this registry, and any comparison would have to come from outside the provided facts.

When to use it — and when not to

Choose pyatv when the goal is programmatic control of Apple TV and AirPlay hardware from Python or from a container, and when operating a device that must be paired once with a PIN entered on screen is acceptable. Anyone who wants a finished graphical application, or who cannot run Python or a Docker container on the network the devices live on, should look elsewhere. The project carries a substantial open issue count of 258, so some behaviours and device combinations are still unsettled, and the credentials and settings it stores persistently are a thing to manage rather than ignore.

project readme (upstream, from github) — read inline

A client library for Apple TV and AirPlay devices

Tests pyatv Actions codecov Code style: black PyPi Package Gitpod Ready-to-Code Downloads PyPI pyversions License: MIT

This is an asyncio python library for interacting with Apple TV and AirPlay devices. It mainly targets Apple TVs (all generations, including tvOS 15 and later), but also supports audio streaming via AirPlay to receivers like the HomePod, AirPort Express and third-party speakers. It can act as remote control to the Music app/iTunes in macOS.

All the documentation you need is available at pyatv.dev.

What can it do?

Some examples include:

  • Remote control commands
  • Metadata retrieval with push updates
  • Stream files via AirPlay
  • List and launch installed apps
  • List and switch user accounts
  • Add, remove or set audio output devices (e.g. HomePods)
  • Keyboard support
  • Persistent storage of credentials and settings

...and lots more! A complete list is available here.

Great, but how do I use it?

All documentation (especially for developers) are available at pyatv.dev. It is however possible to install with pip and set up a new device atvremote:

$ pip install pyatv
$ atvremote wizard
Looking for devices...
Found the following devices:
    Name                      Model                    Address
--  ------------------------  -----------------------  -----------
 1  Receiver+                 airupnp                  10.0.10.200
 2  Receiver                  RX-V773                  10.0.10.82
 3  Pierre's AirPort Express  AirPort Express (gen 2)  10.0.10.168
 4  FakeATV                   Unknown                  10.0.10.254
 5  Vardagsrum                Apple TV 4K              10.0.10.81
 6  Apple TV                  Apple TV 3               10.0.10.83
Enter index of device to set up (q to quit): 4
Starting to set up FakeATV
Starting to pair Protocol.MRP
Enter PIN on screen: 1111
Successfully paired Protocol.MRP, moving on...
Pairing finished, trying to connect and get some metadata...
Currently playing:
  Media type: Music
Device state: Playing
       Title: Never Gonna Give You Up
      Artist: Rick Astley
    Position: 1/213s (0.0%)
      Repeat: Off
     Shuffle: Off
Device is now set up!

After setting up a new device, other commands can be run directly:

$ atvremote -s 10.0.10.254 playing
  Media type: Music
Device state: Playing
       Title: Never Gonna Give You Up
      Artist: Rick Astley
    Position: 1/213s (0.0%)
      Repeat: Off
     Shuffle: Off
$ atvremote -s 10.0.10.254 pause
$ atvremote -n FakeATV play

You can also run it inside a container (x86_64, aarch64, armv7):

docker run -it --rm --network=host ghcr.io/postlund/pyatv:0.14.0 atvremote scan

The master tag points to latest commit on the master branch and latest points to the latest release.

I need to change something?

Want to help out with pyatv? Press the button below to get a fully prepared development environment and get started right away!

Open in Gitpod

Shortcuts to the good stuff

To save you some time, here are some shortcuts:

Frequently asked questions

Is pyatv free to use?

pyatv is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does pyatv do?

A client library for Apple TV and AirPlay devices

What is pyatv written in?

pyatv is primarily written in Python. Its source is publicly available at https://github.com/postlund/pyatv, and it has 1,201 GitHub stars.