An OpenSubsonic implementation in Rust. Contribute to vnghia/nghe development by creating an account on GitHub.
I am selfhosting Navidrome for sometimes but its lacks of support for multiple values really bugs me. Since I am having some free time, I've decided to write an opensubsonic server in rust (why rust? you guess). The notable features are:
In-memory transcoding with ffmpeg c api. Faster transcoding with no ffmpeg binary required and no need for pre-configurated transcoding profile.
Multiple values for artists/album artists/etc.
Permission models music folder per user.
It is still actively developped and lacks some Opensubsonic features (playlist/starr) and some external integrations like lastfm. However I would like to post it get some feedback about it.
IMHO, rust and go are two differents things. The reason I choose Rust is because it is fast and calling C code from rust is supported really well since Rust's goal is to become a system language. Navidrome is just calling the ffmpeg binary. While in my project, I've compiled the neccessary parts of ffmpeg myself (thanks to vcpkg) and call the function directly from Rust. It leads to smaller and fully static final binary (because no ffmpeg bin) as well as faster transcoding time since we don't have to wait for the ffmpeg binary to finish transcoding the whole file before load the result from the filesystem to the memory.
Would it have been impossible to submit your changes to Navidrome as pull requests?
You can see here. This is the biggest reason why I've decided to start my own implementation. Beside, I share my server with several friends so I want a mechanism to prevent mixing musics from different people.
Does this import the Navidrome database?
This could be a feature request in the future. I could add a python script to import users/songs/playlists/playcount/etc from Navidrome.
Thank you for taking the time to answer. I actually am subscribed to that thread and the upcoming new scanner that fixes that problem. Though now with your new server, you wouldn't need to worry about that.
I truly wish you luck though. The more awesome subsonic servers around, the better. I hope your project can be just as much of a household name as Navidrome.
One thing that I find really helpful is when authors put a sample docker-compose.yml in their repository and link to it from the readme.md. Helps with the initial lift of getting started.
In the opensubsonic response there will be two fields for artist, one is artistid with only one artist (this is for compatible with old subsonic) and the other is artists with a list of artist ids. The server only sends back the list of artists ids and only these two clients read that field.