Adventures in Self-hosting HiFi Audio Streaming.

I’ve been through a bunch of self-hosted music setups over the past 10 years or so. There are a long list of good reasons why owning and hosting your own music is better than streaming but I’ll save that for another post. Still, despite years of home streaming my audio collection, I haven’t found the perfect setup. I do though want to try to hone in on where things are and aren’t working on my current setup and maybe share some lessons learned that might help others navigating similar waters.

Navidrome

My most recent iteration uses Navidrome in a Docker container on an older Intel NUC that runs a bunch of other self-hosted/docker services. Navidrome offers a clean web interface and supports the Subsonic API/protocol so there are a handful of iOS (play:sub app is my current iOS app of choice) and MacOS clients (see section below for my MacOS client reviews) that I can use in addition to the web interface. You can access your music collection remotely by setting up Navidrome behind an nginx proxy, and the play:sub app even offers CarPlay integration – a nice bonus for my commute.

That said, Navidrome is not without its quirks. From a HiFi listening perspective, the streaming can be temperamental; I’ve experienced issues where the play:sub app mysteriously repeats songs without being told to do so. Or, inexplicably, the web app will stop playing after each song instead of playing through the entire album. While these hiccups are minor, they can be frustrating when I just want to sit down and listen to some tunes.

The Evolution

Initially, I was content with using AirPlay from Navidrome’s web app or play:sub to an old AirPort Express, which connected optically to a Musical Fidelity V-DAC to my HiFi. This configuration worked, but never really sounded amazing.

The game changed when I upgraded (or, well, crossgraded I suppose since they’re roughly similarly amps from a spec/price point) my NAD amp to a Cambridge Audio amp, which really brought my KEF speakers to life in my small listening room. However, this upgrade revealed some minor but annoying low-frequency issues that I thought might be interesting to try to correct. While play:sub offered basic EQ options, I needed something more sophisticated for proper room correction.

Enter Moode

During an early morning tinkering session, I decided to give Moode a shot on an older Raspberry Pi 3B paired with a HiFi Berry DAC. Unlike my previous attempts with Volumio, Moode immediately clicked. Its built-in support for room-tuning EQ settings was exactly what I needed. (the EQ settings I use were derived by measuring the room using https://housecurve.com)

The difference in sound quality was immediately noticeable. While I was never quite sure about the lossless-ness of my Airplay streams, the direct connection from the Raspberry Pi DAC to my amp, combined with Moode’s room correction/PEQ settings, delivered outstanding results.

Current Challenges

Despite the really fantastic sound quality, the current setup isn’t perfect:

  • So this setup finds me using Moode on my Raspberry Pi when listening locally at my HiFi (which just mounts the same drive over my local network of music that Navidrome accesses). And then, using the Navidrome to stream music everywhere else. SO I’m juggling between Moode for home listening and Navidrome for office/mobile use
  • Moode’s browser interface feels sluggish, especially with volume control having such a lag. It’s definitely usable on an iPad, but frustrating to control playback on my iPhone mini. So it’s the best sounding option but the least satisfying to interact with.
  • Rigelian, an iOS native player for Moode, is functional but lacks polish and has rendering issues on my iPhone mini. Still, it’s “play me a 100 random songs” is great at times.
  • Also, Rigelian seems to not do an especially good job with album art. I’ve got art for every album embedded in the files as well as a cover.jpg in the folder and it just doesn’t pick up the covers in many cases, or at least hasn’t yet.
  • Playlist management across platforms remains a challenge

Both systems scrobble to Last.fm, which opens up possibilities for smart playlist creation based on listening data at some point.

Metadata

One aspect I’ve mostly solved, for now at least, is metadata management, thanks to Lidarr. Running in a Docker container on the NUC, it automatically monitors my music folder and helps maintain a consistent folder structure. This is particularly useful for managing Bandcamp purchases, which often come with varying folder naming conventions. Lidarr effortlessly organizes everything into my preferred artist/album hierarchy.

While I haven’t found the perfect all-in-one solution, the exceptional audio quality from my Moode + room-correction PEQ + HiFi Berry DAC + Cambridge Audio amp combination makes the compromises worthwhile. That said, I’m still hoping for a responsive, well-designed iOS app to control Moode and complete the experience.

For now, I’m enjoying the tinkering and the improved sound quality but would love to hear suggestions.

MacOS Listening

As much as I spend a lot of time in my listening chair enjoying my Moode Audio setup, for better or worse I need to spend a lot of time in front of my desktop computer running MacOS. Finding the perfect desktop client for Navidrome has felt like searching for a rare vinyl in a crowded record store. It supports the open Subsonic streaming protocol so there a quite a few clients of varying degrees of quality, here are the one’s that I’ve found worth some attention:

Submariner

Submariner has a nice native Music app-like interface. However, its aggressive local caching is a deal-breaker. The app automatically downloads every streamed track to ~/Music/Submariner, turning your hard drive into an unwanted music hoarder. While a nightly cleanup script could theoretically solve this, it feels like applying a band-aid to a systemic issue. Playlist management is solid, mimicking Apple Music’s approach, but the constant local downloading overshadows these merits.

Supersonic

Supersonic is my current go-to, albeit with some notable limitations. Unlike Submariner’s MacOS vibe, it’s UI feels less native, more utilitarian. The app shines in library presentation and offers welcome extras like equalizer functions and scrobbling to last.fm (technically handled by Navidrome).

However, Supersonic’s playlist functionality is frustratingly half-baked. You can view existing playlists, but I haven’t figured out how to create new ones. And track addition to existing playlist is temperamental.

Navidrome’s Web Interface

Out of sheer muscle memory, I still regularly hit my Navidrome instance through the browser. The web interface is a reliable backup. It’s functional, allowing playlist creation and management, though not without its own friction. Track addition requires more clicks than keystrokes which is tedious.

Lately I have been immersed in full-album listening, thus allowing me mostly to sidestep the above playlist complexities and Supersonic has become my reluctant daily driver.

So this is my current setup as of December, 2024. I often get emails from folks who stumble across here with streaming questions, so please don’t hesitate to drop me a line, I love discussing this stuff.

Posted

in

, ,

Current Spins

Top Albums

Check out my album Set It All Down on your favorite streaming service.


Posts Worth Reading:


Letterboxd


Reading Notes

  • Who profits from our constant state of dissatisfaction? The answer, of course, is painfully obvious. Every industry that sells a solution to a problem you […]
  • the shifts have been in place for awhile. A certain kind of book—say those reviewed in the NYRB—will become like opera, or theater, or ballet, […]
  • • No more struggle: “Whatever arises, train again and again in seeing it for what it is. The innermost essence of mind is without bias. […]
  • The real problem, in my mind, isn’t in the nature of this particular Venture-Capital operation. Because the whole raison-d’etre of Venture Capital is to make […]
  • . The EU invokes a mechanism called the precautionary principle in cases where an innovation, such as GMOs, has not yet been sufficiently researched for […]

Saved Links