Control and view your music from any device on your network. Now Playing Remote is a lightweight macOS menu-bar app with a beautiful web player, real-time synced lyrics, and 10 gorgeous built-in themes.
- π΅ Real-time Media Control β play/pause, skip, seek, shuffle, repeat from any device
- π Instant Updates β Server-Sent Events push changes immediately (no polling)
- π± Mobile-Optimized Web Player β responsive design works on phones, tablets, and desktops
- π¨ 10 Beautiful Built-in Themes β Clean, Immersive, Vinyl, Cassette, VHS, iPod, Bento, Starry Sky, Minimal, Poster
- π€ Synced Lyrics β fetched from Music app (embedded) or LRCLIB online database
- π¨ Smart Artwork Display β album art with color-extracted gradient backgrounds
- π² PWA Support β add to iPhone home screen for a native app experience
- π QR Code Quick Connect β instant access from the menu bar
- π― Custom Themes β create and import
.themearchives with CSS, JavaScript, and custom assets - β¨οΈ Full Keyboard Support β media keys control playback
Note: Lyrics from LRCLIB require an internet connection. Embedded Music app lyrics work offline.
Note: Custom
.themearchives can execute JavaScript β only install themes from trusted sources.
- Apple Music (Music app)
- Spotify
- Apple TV
Works with any app using macOS MediaRemote framework:
- YouTube (Safari/Chrome/Firefox)
- VLC Media Player
- QuickTime Player
- Podcasts
- And many more!
System Requirements:
- macOS 13 (Ventura) or later
- Xcode 15+ (to build from source)
- Devices must be on the same local network
Download the "NowPlayingRemote.dmg" file from the latest release. Open it and move the app into your Applications folder.
Important
Apple will flag this app as it is not signed by an registered developer, this doesn't mean the app is not safe. To use the app follow the steps below
- Click OK to close the popup.
- Open System Settings > Privacy & Security.
- Scroll down and click Open Anyway.
- Confirm your choice when prompted.
You only need to do this once.
- Clone the repository
- Open
NowPlayingRemote.xcodeprojin Xcode - Select your development team in Signing & Capabilities
- Build and run (
βR)
The app appears in your menu bar as a note icon. Click it to open settings, show the QR code, or start the server.
Important
On first launch, macOS will request permissions:
- Accessibility β required for media key control
- Automation (Music) β to control the Music app
- Automation (Spotify) β to control Spotify
Grant all permissions for full functionality. The app will work immediately after.
- The server starts automatically on app launch (configurable in Settings)
- Default port is
8080 - Find your Mac's IP: System Preferences β Network (or run
ifconfigin Terminal)
- Click the Now Playing Remote icon in the menu bar
- Select Show QR Code and scan with your phone's camera
- Or manually navigate to
http://<your-mac-ip>:8080 - (iOS/iPadOS) Share β Add to Home Screen for a full-screen experience
If your firewall is enabled and you can't connect:
- System Preferences β Security & Privacy β Firewall β Firewall Options
- Add Now Playing Remote to the allowed apps list
- Port β HTTP listen port (default:
8080) - Auto-start server β launch on app startup (default: enabled)
- Launch at login β start app on Mac login (default: disabled)
- Show volume control β display volume slider in web player
- Show like button β show like/favorite button (app-dependent)
- Skip interval β how far forward/back jumps (default: 15 seconds)
- Show lyrics β fetch and display synced lyrics
- Auto-hide lyrics β hide panel when no lyrics found (default: enabled)
- Theme Selection β choose from 10 built-in themes
- Custom Theme Import β import
.themearchives - Custom HTML/JavaScript β serve your own web player
| Theme | Style | Features |
|---|---|---|
| Clean (default) | Modern | Blurred background, full controls |
| Immersive | Cinematic | Full-screen art fill |
| Vinyl | Retro | Spinning record animation |
| Cassette | Nostalgic | Skeuomorphic cassette design |
| VHS | 80s/90s | Scanlines, glitch effects, phosphor green |
| iPod Classic | Retro | Click-wheel interface |
| Bento | Modern | Grid card layout |
| Starry Sky | Ambient | Shooting stars animation |
| Minimal | Minimalist | Text-only, ultra-clean |
| Poster | Print-style | Monochrome design |
View screenshots of all themes β Themes Gallery
Create a .theme archive (renamed ZIP) with:
theme.jsonβ metadata (name, author, version)styles.cssβ custom CSSscript.js(optional) β custom JavaScriptassets/(optional) β images, fonts, SVGs
See THEME_DEVELOPMENT.md for a complete guide.
- Getting Started β Installation, setup, basic usage
- Theme Development β Create custom themes with code examples
- HTML API Reference β Complete API documentation for custom players
- Developer Setup β Build, architecture, debugging
- Troubleshooting β Common issues and solutions
- CLAUDE.md β Architecture deep-dive for developers
Replace the built-in player with your own HTML/JavaScript:
Settings β Custom Player β Import HTML/JS Fileβ¦
Your custom player has access to:
- Real-time state via SSE β automatic updates on playback changes
- Full command API β send playback commands (play, pause, seek, etc.)
- Artwork and lyrics β fetch album art and synced lyrics
- Helper functions β
cmd(),elapsed(),fmt(),loadArt(),getState()
See HTML-REFERENCE.md for the complete API and DEVELOPER_SETUP.md for architecture details.
Now Playing Remote is available under the GPL-3.0 license. See LICENSE for details.
Built with assistance from:
- Claude Haiku 4.5
- Claude Sonnet 4.6
- Gemini 3.1 Pro
Architecture and real-time features powered by:
- mediaremote-adapter by ejbills
- POSIX sockets and Server-Sent Events
This project is actively developed but provided as-is. While thoroughly tested, it may not receive immediate maintenance for every edge case. Issues and pull requests are welcome β please include your macOS version, app version, and steps to reproduce.
Made with β€οΈ for music lovers
If you enjoy this app, consider starring the repo! β