EARHORNMUSIC UPnP · Android TV · Phones · Android Auto · GNU/Linux
Earhorn Music — steampunk gramophone wordmark
Free · Open · No tracking A Faveat Software project

Your home music library, on every screen you own.

A UPnP/DLNA music player for Android TV, Android phones, Android Auto, and GNU/Linux desktop. One APK across every Android surface. From an Android phone or the GNU/Linux desktop, cast to a Chromecast, Nest Audio, or a multiroom speaker group; on TV and desktop, audio can also play through the device's own outputs.

Every other music app expects a streaming subscription, a tracked account, or a phone within arm's reach. Earhorn Music expects a UPnP server on your local network — and any device you already own: the TV in the living room, the phone in your pocket, the head unit in your car, the desktop in your study. Browse, search, queue, and play your own files (FLAC, ALAC, MP3, AAC, Opus, WAV — and DSD on the GNU/Linux desktop via libvlc; anything else your UPnP server transcodes on the fly will Just Work). From the phone or the desktop, send a queue to a Chromecast or a whole-house speaker group; from the TV or the desktop, play locally on the device's own outputs.

Android TV 8.0+ · Android phones 8.0+ · Android Auto · GNU/Linux x86_64 · Chromecast / Nest Audio / speaker groups · open source · no telemetry
Downloads, checksums and the source are all here on this page. No app store, no account, no tracking.

Why this exists

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.

How it works

A music player that respects your remote, your keyboard, and your steering wheel.

1

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.

2

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.

3

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. Everything a music player should have, none of it learned from a marketing meeting.

Features

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. Off, track and album modes with a configurable preamp in dB, on Android and on the GNU/Linux desktop. On the desktop, the gain scales your volume setting instead of replacing it, so a track change never jumps past where you left the slider.

★

Random shelf

Pick a count — ten, twenty-five, fifty, or a hundred — and Earhorn pulls a random shelf of albums or tracks from your library. Surfaces the records you forgot you owned.

✎

Lyrics & album info

Time-synced lyrics fetched from lrclib.net, with sibling .lrc files in the same directory as a fallback. The Album info button surfaces the COMMENT tag or a sibling .txt — liner notes, reviews, whatever you've stashed. Lyrics lookups can be switched off in Settings. Both Android and desktop.

⌕

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. Your last ten searches are a click away. Both Android and desktop.

#

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.

▦

MinimServer indexTags, first class

If your library runs on MinimServer, Earhorn Music renders its indexTags the way MinimServer means them — including the synthetic browse entries the server generates, like >> Show All, [folder view], and [untagged], set off in sage italics so you can see at a glance what the server is offering versus what's a real folder on disk. Both Android and desktop.

↻

Rescan your library from the app

Added new records or fixed some tags? On a MinimServer library, ask the server to re-index without leaving Earhorn Music. It shows the rescan while the server restarts and tells you when your library is back. Both Android and desktop.

❑

M3U playlists & a queue that remembers

Read M3U playlists from anywhere on your UPnP server, and write them back when you save a queue you like. The current queue itself persists across app restarts — close Earhorn Music in the middle of an album, reopen it the next morning, hit play. Both Android and desktop.

◐

Animated album art

Animated GIF and WebP cover art renders the way the artist made it — the looping inner sleeve, the throbbing record label, the visual gimmick the digital-only release shipped with. Powered by Coil 3 with a generous 256 MB on-disk cache so the art is there the second the track loads. Android only.

Privacy

What Earhorn Music does not do.

Your library lives on your server. Your remote lives in your hand. Earhorn Music sits between them and gets out of the way.

Download

Two builds. Three surfaces. One library.

▶

Earhorn Music · Android TV, phones & Android Auto

A single APK that adapts to the device. On Android TVs (any Android TV 8.0+ — Sony, Hisense, TCL, Shield TV, Fire TV, and the rest of the field) it installs as a Leanback-launcher app: banner art, D-pad-first focus, big-screen browse. On Android phones (stock, GrapheneOS, /e/OS, CalyxOS — with or without Google Play Services) it installs as a regular app with a compact touch layout — and from a phone you can cast a queue to a Chromecast, Nest Audio, or a whole-house speaker group, so the room you're not in plays the album you picked. It also 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.

Got a Chromebook on the home network? The same APK installs on ChromeOS via the Android Runtime for Chrome (ARC), and behaves like any other Android app on the machine.

Download the APK ↓

Package · dev.stave · Android 8.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.

Desktop extras worth knowing about: DSD playback through libvlc, for audiophiles; party mode — 42 random tracks loaded and playing the instant you ask (the answer to life, the universe, and "what do I put on?"), one click on the Party button at the top of the library; a drag-to-reorder queue; Cast — play to a Chromecast, Chromecast Audio or speaker group, or follow one that another app is already driving, with its song, art and controls on your desktop; album notes, and a choice of which details Now Playing shows; and keyboard shortcuts that read like a music player should — Space for play/pause, Ctrl+←/Ctrl+→ for prev/next track, Ctrl+K to search, Ctrl+L for lyrics, Esc or Alt+← to close a menu or go back. Media keys and the desktop's media controls work through MPRIS.

Download the .deb or AppImage ↓

x86_64 · keyboard & mouse first · ~114 MB AppImage

Both builds, the source of both apps, and the checksums are in the Download section below. GPLv3+ — fork and ship.

Download

Earhorn Music 0.5.0

The first release hosted here. Adds library rescan from the desktop app, keeps the Party button off the library navigation, and fixes what a full review found.

Android (with Cast): earhorn-0.5.0-play-release.apk 14.0 MB

SHA-256 8776b9b5f1fed9babc10e1b689b2bda9a84b9192de9c9f7833d8d2ac1c9a14e3

Android (without Google Play): earhorn-0.5.0-libre-release.apk 12.6 MB

SHA-256 086f92b3ea417b0ca3b926f2567522125186701e00144fa110f482d9ee485a1a

Linux (AppImage): earhorn-0.5.0-x86_64.AppImage 120.4 MB

SHA-256 d706e999fbe242f68bd1087ac5db38165e6e930a462389266e6a142866418d55

Debian and Ubuntu: earhorn_0.5.0_amd64.deb 111.0 MB

SHA-256 68b72e4f9f4b678893dd5865194f3393c9e73eeed1861f8ede1211b45b00039a

Source code: earhorn-0.5.0.zip 14.2 MB

The source of both apps (android/ and desktop/, each a complete Gradle project), the README and the GPL license. The packages above are separate downloads.

SHA-256 921748853c314016e7978898777fa5c855a0534e0c7f127c63d7f4c4b8aa1233

SHA256SUMS
The SHA-256 checksum of every file here.

Check your download

Save SHA256SUMS in the same folder as the download, then:

sha256sum -c SHA256SUMS --ignore-missing

Each file you have should say OK. On a Mac, run shasum -a 256 earhorn-0.5.0.zip; on Windows, certutil -hashfile earhorn-0.5.0.zip SHA256. The result must match the SHA-256 above.

Earhorns on listening

In praise of the long-form listen.