{"kind":"doc","doc":{"title":"Now Playing","section":{"slug":"experiments","name":"Experiments"},"rkey":"1789660555000-now-playing","cid":"bafkreie4y4rgrhg5nxfkuc3ajb3mrv7vh4r3mhxbgkdga7ke6nu3xxvz4e","renderKey":"bafkreie4y4rgrhg5nxfkuc3ajb3mrv7vh4r3mhxbgkdga7ke6nu3xxvz4e@2026-09-20T05:15:33Z@2026-10-20T16:48:42Z@Experiments|Open source projects and experiments","href":"/experiments/1789660555000-now-playing","publishedAt":"2026-09-20T05:15:33Z","updatedAt":"2026-10-20T16:48:42Z","tags":["raspberry-pi","led-matrix","airplay","shairport-sync","album-art"],"description":"A Raspberry Pi Zero 2 W drives a 64×64 LED matrix showing the album art of whatever is playing, decoded from an AirPlay 2 stream via shairport-sync, with an ambient video loop and sun-following brightness when idle.","readingMinutes":1,"markdown":"![](blob://bafkreigrpqjytzr6brpthqtayhls64ex2ge4eewmjbrnjdgum6w3bpmbze)\n\n[REPO](https://github.com/iammatthias/now-playing)\n\nA Raspberry Pi Zero 2 W renders the currently playing album art on a 64×64 LED matrix. The Pi runs shairport-sync as a silent AirPlay 2 receiver, so I AirPlay to the speakers and the panel together and it decodes track metadata and cover art straight from the stream. When nothing is playing an ambient video loop takes over, and brightness follows the sun.\n\n```mermaid\nflowchart TD\naccTitle: Now playing signal path\naccDescr: A phone sends music to the speakers and the Pi at once, and the Pi turns the cover art into a picture on the LED panel, with a video loop when idle and brightness set by the sun.\nphone[\"Phone\"] -->|AirPlay| speakers[\"Speakers\"]\nphone -->|AirPlay| pi[\"Silent receiver\"]\npi -->|album art, dimmed by the sun| panel[\"LED matrix\"]\nidle[\"Ambient loop\"] -.->|when idle| panel\n```\nThe phone plays to the speakers and the Pi together, and the Pi shows whatever cover art arrives with the music.\n\nYou can read more about this project [here](https://iammatthias.com/posts/1784736733544-now-playing).","media":{"bafkreigrpqjytzr6brpthqtayhls64ex2ge4eewmjbrnjdgum6w3bpmbze":{"mime":"image/jpeg","width":5712,"height":4284,"dominantColor":"#2a2592","blurhash":"LY7m@aS4RdxCOAn,nzS2nlbFkDjZ","thumbCid":"bafkreicb2wesyyykj3erlkoff2vzmbbktr2jyprkxfbhazifg7th7lzgvi"}},"series":{},"related":[{"title":"Intern","href":"/experiments/1789407081000-intern","section":"experiments","description":"Bootstrap for the Autonomous Intern, an agentic Raspberry Pi project running Hermes with Caddy, Tailscale, and a HAL-driven LED ring, plus optional Rabbit R1 support and a single idempotent setup script.","publishedAt":"2026-09-20T05:08:59Z"},{"title":"Now Playing","href":"/posts/1784736733544-now-playing","section":"posts","description":"Putting my Apple Music \"Now Playing\" on display with a Raspberry Pi and a 64x64 LED matrix.","publishedAt":"2026-07-25T17:18:48Z"},{"title":"Intern","href":"/posts/1781835006151-intern","section":"posts","description":"The Autonomous Intern ships as a Raspberry Pi 5 in a desk-toy case running a stack I didn't pick. I flashed it to Debian Trixie, swapped the whole thing for the Hermes agent with its own built-in memory, and folded it all into one setup script.","publishedAt":"2026-06-19T02:10:06Z"},{"title":"Adventures in Machine Vision","href":"/posts/1780360240000-adventures-in-machine-vision","section":"posts","description":"A Nat Friedman anecdote about an AI watching him drink water sent me digging for a spare Raspberry Pi. Now a camera and a sensor HAT watch my desk, a self-inflicted panopticon that logs who walks by and what the room is doing.","publishedAt":"2026-06-02T00:30:40Z"},{"title":"Single-origin deployment with bhvr","href":"/posts/1747182886660-single-origin-deployment-with-bhvr","section":"posts","description":"Fried my Pi using a 10V solar panel without a buck converter.","publishedAt":"2025-05-13T17:34:00Z"},{"title":"Pure Internet: office---space","href":"/posts/1736536967495-pure-internet-office-space","section":"posts","description":"A Pi Zero 2 W and Waveshare Environment HAT record my office conditions every 60 seconds.","publishedAt":"2025-01-10T11:22:00Z"}],"prev":{"title":"Buddydex","href":"/experiments/1789660275000-buddydex"},"next":{"title":"Conet","href":"/experiments/1789408263000-conet"}}}