Surprise
Navidrome Music Server
Our great sponsors
Surprise | Navidrome Music Server | |
---|---|---|
8 | 302 | |
6,169 | 9,842 | |
- | 5.9% | |
0.0 | 9.4 | |
11 months ago | 3 days ago | |
Python | Go | |
GNU General Public License v3.0 or later | GNU General Public License v3.0 only |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
Surprise
-
Dislike button would improve Spotify's recommendations
I spent the latter half of 2019 trying to build this as a startup. Ultimately I pivoted (now I do newsletter recommendations instead), but if I hadn't made some mistakes I think it could've gotten more traction. Mostly I should've simplified the idea to make it easier to build. If anyone's interested in working on this, here's what I would do:
(But first some background: The way I saw it, you can split music recommendation into two tasks: (1) picking a song you already know that should be played right now, and (2) picking a new song you've never heard of before. (Music recommendation is unique in this way since in most other domains there isn't much value in re-recommending items). I think #1 is more important, and if you nail that, you can do a so-so job of #2 and still have a good system.)
Make a website that imports your Last.fm history. Organize the history into sessions (say, groups of listen events with a >= 30 minute gap in between). Feed those sessions into a collaborative filtering library like Surprise[1], as a CSV of `, , 1` (1 being a rating--in this case we only have positive ratings). Then make some UI that lets people create and export playlists. e.g. I pick a couple seed songs from my listening history, then the app uses Surprise to suggest more songs. Present a list of 10 songs at a time. Click a song to add it, and have a "skip all" button that gets a new list of songs. Save these interactions as ratings--e.g. if I skip a song, that's a -1 rating for this playlist. For some percentage of the suggestions (20% by default? Make it configurable), use Last.fm's or Spotify's API to pick a new song not in your history, based on the songs in the current playlist. Also sometimes include songs that were added to the playlist previously--if you skip them, they get removed from the playlist. Then you can spend a couple minutes every week refreshing your playlists. Export the playlists to Spotify/Apple Music/whatever.
As you get more users, you can do "regular" collaborative filtering (i.e. with different users) to recommend new songs instead of relying on external APIs. There are probably lots of other things you could do too--e.g. scrape wikipedia to figure out what artists have done collaborations or something. In general I think the right approach is to build a model for artist similarity rather than individual song similarity. At recommendation time, you pick an artist and then suggest their top songs (and sometimes pick an artist already in the user's history, and suggest songs they haven't heard yet--that's even easier).
This is the simplest thing I can think of that would solve my "I love music but I listen to the same old songs everyday because I'm busy and don't want to futz around with curating my music library" problem. You wouldn't have to waste time building a crappy custom music app, and users won't have to use said crappy custom music app (speaking from personal experience...). You wouldn't have to deal with music rights or integrating with Spotify/Apple Music since you're not actually playing any music.
If you want to go further with it, you could get traction first and then launch your own streaming service or something. (Reminds me a bit of Readwise starting with just highlights and then launching their own reader recently). I think it'd be neat to make an indie streaming service--kind of like Bandcamp but with an algorithm to help you find the good stuff. Let users upload and listen to their own MP3s so it can still work with popular music. Of course it'd be nicer for users in the short term if you just made deals with the big record labels, however this would help you not end up in Spotify's position of pivoting to podcasts so you can get out of paying record labels. And then maybe in a few decades all the good music won't be on the big labels anyway :).
Anyway if anyone is remotely interested in building something like this, I'll be your first user. I really need it. Otherwise I'll probably build it myself at some point in the next year or two as a side project.
Navidrome Music Server
-
.NET 8 Standalone 50% Smaller On Linux
Jellyfin is great for movies & shows. As an anecdote, it's not so good for music if you're a collector. I personally use Navidrome for that[0].
Anyway, Sonarr[1] makes use of .NET, too. Very reliable software, in my experience.
- Navidrome: Open-Source Software to enjoy your music collection from anywhere
-
Building a digital music collection in 2023
Please don't reencode your entire collection to "save space", or use git for version control.
Put your lossless files on a server as a source-of-truth (with a regular cold backup somewhere else) and install a streaming server, like Navidrome[1], which will allow you to transcode on-the-fly to all of your devices. This is how you build a true "digital music collection": so that you won't regret it 5 years from now, when the site you bought your flac's from closed down/erased your files, leaving you solely with the reencoded mp3/opus files you kept, unable to move to better formats as they progress.
-
My simple Music Stack
Navidrome - a music streaming server. This is what servers my phone. I use substreamer to listen on my phone
-
Server-side alternative to SoundCloud?
Could use Navidrome, you can create logins for friends.
-
Unorthodox Things to Self Host?
You should check out Navidrome. I've been using it for music alongside Jellyfin for other media. It supports scrobbling to multiple endpoints (including Last.FM of course), and supports the subsonic API for clients. I use D-Sub on Android.
-
How do you handle multiple identically named albums from the same artist?
Slowdive and Weather Report have two self-titled releases a piece, Slowdive from 1990 and 2017, Weather Report from 1971 and 1982. Given that Navidrome is someone limited in how it indexes releases (if I understand this correctly), this is somewhat of an issue.
There’s a pending PR that treats albums with different release dates as different albums, which would solve this: https://github.com/navidrome/navidrome/pull/2162
-
Any way to stream my nearly 2TB library from my iPhone?
If you want to stream from your Mac, I recommend Navidrome. It has both iOS clients and a web front-end. You'd need to have the Mac running. Unless you explore offline cache via client.
What are some alternatives?
Airsonic - :satellite: :cloud: :notes:Airsonic, a Free and Open Source community driven media server (fork of Subsonic and Libresonic)
Jellyfin - The Free Software Media System
LightFM - A Python implementation of LightFM, a hybrid recommendation algorithm.
airsonic-advanced
Ampache - A web based audio/video streaming application and file manager allowing you to access your music & videos from anywhere, using almost any internet enabled device.
gonic - music streaming server / free-software subsonic server API implementation
koel - 🐦 A personal music streaming server that works.
scikit-learn - scikit-learn: machine learning in Python
Subsonic - Home of the DSub Android client fork
Volumio - Volumio 2 - Audiophile Music Player
reverse-proxy-confs - These confs are pulled into our SWAG image: https://github.com/linuxserver/docker-swag
Mopidy - Mopidy is an extensible music server written in Python