Your home music library, on every screen you own.
A UPnP/DLNA music player built for Android TV, GNU/Linux desktop, and Android Auto. Same player, three surfaces. Browse the server you already have. Cue an album. Listen.
Every other music app expects a streaming subscription, a phone within arm's reach, or a cloud account. Earhorn Music expects a UPnP server on your local network — and a TV remote, a desktop keyboard, or a steering wheel. That's it. Browse, search, queue, and play your own files (flac, alac, mp3, opus, anything the server serves) on the device you already paid for.
The screens you own had music apps. None of them were yours.
You own the files
Music you ripped, bought, downloaded — sitting on a NAS, a Raspberry Pi, an old laptop, an actual UPnP server. Not in someone else's cloud.
One library, three surfaces
Same player on the TV in the living room, the laptop on the desk, and the car on the road. Same browse, same queue, same hi-fi-grade playback. The library is the truth; the screens just show it.
No phone tether
Earhorn Music runs directly on the TV or the desktop. No "open the app on your phone first." No casting handshake. The app and the audio live on the same device.
No subscription, no account
No login screen. No upsell. No telemetry. The app talks to your local server and to nothing else.
A music player that respects your remote, your keyboard, and your steering wheel.
Point Earhorn at your UPnP server
It auto-discovers servers on your local network. MinimServer, JRiver, Plex, Jellyfin, Universal Media Server, Asset UPnP, Twonky — anything that speaks UPnP/DLNA shows up in the picker. Pick yours, and your library is there.
Browse, search, queue
D-pad through albums and artists like you'd expect. Long-press anything to add to the queue, queue next, or play it now. Live search narrows across albums, artists, tracks, and genres as you type. Voice search uses the system keyboard's mic.
Cover art on the big screen, gapless audio out
Lyrics view shows the year, format, sample rate, bit depth, and genre tags pulled directly from your file metadata. Gapless playback for albums that need it. ReplayGain support. Sleep timer. Shuffle. Crossfade. Everything a music player should have, none of it learned from a marketing meeting.
Built for how a music room actually works.
Gapless playback
Albums that bleed track-to-track — Dark Side of the Moon, Endtroducing, anything live — play without a gap. The way the artist intended.
Smart queue
Add to queue, play next, play now, save as playlist. Long-press any track or album from anywhere in the app. Reorder with the D-pad.
Sleep timer
Five minutes, fifteen, thirty, an hour. Pick a duration; playback fades out and stops when you're asleep. The TV doesn't have to.
ReplayGain
Honors track and album ReplayGain tags so a quiet jazz record doesn't follow a loud one at twice the volume. Configurable preamp.
Random shelf
"Pick me twenty-five albums" and "pick me twenty-five tracks" buttons that hit your library at random. Surfaces the records you forgot you owned.
Lyrics & album info
If your tracks have embedded lyrics or sibling .lrc / .txt files, Earhorn finds them. Album info button surfaces the COMMENT tag or sibling .txt — liner notes, reviews, whatever you've stashed.
Multi-bucket search
One query — "miles" — hits five buckets at once: albums by title, albums by artist, tracks by title, tracks by artist, genres. Drill into the bucket you actually meant.
Genre filters
Block genres you don't want surfacing in random shuffle. Tag the kids' soundtracks, the meditation tracks, the holiday playlists. They stay in the library; they stop showing up in the picker.
Android Auto
The same library on your dashboard. Browse albums and artists from the car's display, tap to play, queue with one press. Audio routes through the car's speakers; the head unit owns the controls so the phone stays in your pocket. Works whenever the phone can reach your UPnP server — anywhere from home Wi-Fi to a remote (or onboard) server.
What Earhorn Music does not do.
- No accounts. No sign-up, no login, no password, no email collection. Nothing to register with because there's nothing on the other end.
- No telemetry. No Firebase, no crash reporting, no analytics, no usage tracking. Earhorn Music has no mechanism to phone home.
- No ads. No ad SDKs, no sponsored content, no affiliate links, no monetization of attention. The app costs nothing and shows nothing.
- Local network only. The app's network traffic goes to your UPnP server on your LAN — that's the entire surface. No cloud servers, no telemetry endpoints, no third-party APIs.
- No third-party SDKs that phone home. The dependencies are AndroidX, Jetpack Compose for TV, Media3, jUPnP, Hilt — first-party Google libraries plus a UPnP control stack. Everything runs locally.
- Open source. The full source code is on Codeberg. Read it. Fork it. Build it yourself. No black boxes, no licensing handshakes.
Your library lives on your server. Your remote lives in your hand. Earhorn Music sits between them and gets out of the way.
Two builds. Three surfaces. One library.
Earhorn Music · Android TV & Android Auto
A single APK that adapts to the device. On Android TVs (Sony, Hisense, TCL Google TV, Shield TV, Fire TV, GrapheneOS — with or without Google Play Services) it installs as a Leanback-launcher app: banner art, D-pad-first focus, big-screen browse. On Android phones it installs as a regular app, AND registers with Android Auto so when you connect to your car's head unit Earhorn Music shows up in the media-app picker. One install, every Android surface in your life. Sideload-ready, no app store account required.
Package · dev.stave · Android 5.0+ · ~12 MB
Earhorn Music · GNU/Linux Desktop
The same player, packaged for the desktop. Same UPnP/DLNA discovery, same library browse, same queue, same gapless playback — at a desk, in a study, or wired into a hi-fi rack. Distributed as a .deb for Debian / Ubuntu / Pop!_OS / Mint, or as a portable AppImage for everything else.
.deb · Codeberg → · AppImage · Codeberg →
x86_64 · keyboard & mouse first · ~30 MB AppImage
Source code on Codeberg. Issue tracker, changelogs, and build instructions all live there. GPLv3+ — fork and ship.
In praise of the long-form listen.
Music is the wine which inspires one to new generative processes, and I am Bacchus who presses out this glorious wine for mankind.
Ludwig van Beethoven — Composer
Without music, life would be a mistake.
Friedrich Nietzsche — Philosopher
Music expresses that which cannot be said and on which it is impossible to be silent.
Victor Hugo — Writer
Music is no longer tasted, it is swallowed.
Jules Verne — Novelist
Music is the divine way to tell beautiful, poetic things to the heart.
Pablo Casals — Cellist
I would rather build great records than play them.
Brian Eno — Producer
Music is the strongest form of magic.
Marilyn Manson — Musician
After silence, that which comes nearest to expressing the inexpressible is music.
Aldous Huxley — Writer
The only truth is music.
Jack Kerouac — Writer