Building Saaz: My Personal Music System

Sahil is a full-stack software engineer with expertise in both front-end and back-end development. His experience encompasses diverse projects, including SaaS solutions and custom systems.
I've been very fond of music since I was a kid. I loved Bollywood music so much while growing up. Back in the day, you had cassettes and DVDs that you could keep songs on or give to your friends by burning them a new one. But nowadays, it's become very hard to say a particular song is yours. Everything is on streaming apps now. No one keeps raw music files anymore because you don't need to.
I'm the kind of person who is very picky about what I listen to, and if it's in my playlist, I want it preserved.
When Spotify Made My Songs Disappear
One day, while using Spotify, suddenly a few of my favorite songs were gone. I couldn't find them, couldn't search for them. They were just gone! I could still listen to them on YouTube but man, I had paid for it on Spotify. Even on YouTube, who knows, it might not be there tomorrow.
So I decided I needed my own personal music system, and I started building one with open source services. But hosting your own music comes with some issues - managing the computer, storage, infrastructure, backups, and music tagging. Another part is you have to actually buy music! Now, this part is tricky. We've all downloaded songs from sketchy sites at some point and it just turned out fine, but every time I want a song, I don't want to search on Google, download it, and then tag it. I wanted to use something better where I could search, save it in my personal storage, and have it automatically backed up. Maybe have some synced lyrics in it. Have it automatically available on my TV, computer, and mobile phone? How about that? And with the peace of mind that even after years, I can still listen to the song! Call it hoarding or whatever—it is what I feel, and I don't want to lose the lovely songs that are very close to my heart.
The Start
After thinking all this through, I sat down and wrote an app with Express.js and Handlebars in 2020. It was a small app that would search and parse through information and metadata from Spotify, then look for the song on YouTube, download it, and save it. But I had no backups and no ability to stream the music to my other devices. Still, I was kind of flexing it because I had something of my own.
I kept using it until 2023, and then I added support for Firebase. Now all my songs were backed up from Firebase Storage to a bucket in Google Cloud. I was using Cloud Functions to download my songs from YouTube and save them in Firebase Storage. I was pretty happy with it.
One day, a friend of mine asked how I'd built it and wanted the code. I shared it, but it wasn't documented very well, and it took him a lot of time debugging to get the project up and running. With Firebase, everything becomes tedious if not done well, since you have to kind of set up your own server.
The Realization
With Firebase, on each update or push, I was facing a lot of issues. I'd have to fix this here, enable that there, and one day I was like, "I'm done." I just need a simple working system that I can use to listen to songs on any device and that's easy to share with friends and family.
Here's what I also realized—I was trying to reinvent the wheel just to feel like I'd built something of my own. But it wasn't a functional choice. I don't have a lot of time to build everything from scratch! I'm just another developer with some time on hand on weekends!
So I started digging through all the possible open source software I could use to serve my music. I tried a bunch and chose Navidrome because it was the only one that had a good enough list of functions and good enough UI/UX. It's Go-based and runs very fast on a Raspberry Pi. What else do I need?
I set up Navidrome, pointed it to my music directory, and had everything running. I could even stream music to my phone on Symfonium (beautiful app for streaming music, by the way). Loved the whole experience. At work, I could stream it through `Sublime Music`. On TV, again Symfonium, and for iOS lovers, there's `Amperfy`.
It felt like a perfect solution until I realized I didn't have album art, lyrics, or other song metadata like year of release, label, artist, and everything...
The Missing Piece
Navidrome needs all the metadata info to organize my library, and without it, it was just random songs on a shelf.
I started downloading songs, mostly Bollywood and some pop culture songs, and started tagging them MANUALLY! It was tedious, and most of these websites would add their website name and album art on top of it, so I couldn't even get the right metadata even after going through all this mess.

Re-imagining Saaz
Now was the time to reimagine what the Saaz project should evolve into. I decided to update Saaz to be a song metadata updater program while still keeping some basic download functions.
I integrated it with the JioSaavn API, which is a free API you can use to scrape billions of songs. I found it, set it up, and now I had free access to a lot of songs with their metadata information and an MP3 link. It was like heaven for me.
I quickly started working on the web app, and it's now under development. Saaz can now:
Search for songs with proper metadata
Download high-quality audio
Automatically tag files with accurate information
Fetch album artwork and lyrics
Organize everything for Navidrome
Back up to cloud storage with Rclone
Why I Built This
Look, I know it takes more effort than just clicking "Add to Library" on Spotify. But there's something about having your own music library, one that no licensing dispute, platform shutdown, or corporate decision can take away from you.
These are MY songs, in MY library. Even years from now, these songs will still be there. That peace of mind is worth it.
Saaz means "musical instrument" or "music" in Hindi/Urdu. It felt like a fitting name for a tool that helps preserve the music we love.
The project is open source and under development. If you're interested or want to contribute, feel free to reach out! (https://github.com/sahilpatel09/Saaz)
Gallery






