PlaylistDownloader
Spotify to MP3 Downloader
Built for my family, works for any playlist
- Node.js
- Express
- yt-dlp
What it is
Paste a Spotify playlist link and get the actual songs as files on your computer, with the correct titles, artist, album and cover art already attached.
Who it helped
I built this for my mum and my sister. Neither of them pays for Spotify, and the free version puts ads between songs and will not let you listen offline. In Nepal that matters more than it sounds. Mobile data is not cheap, and a lot of listening happens on a commute or somewhere with weak signal, which is exactly where the free tier stops being usable.
They already knew what they wanted to hear. The playlist existed. The only real problem was getting those songs onto a phone, and the usual answer to that is a dodgy download site covered in fake buttons.
Now they send me a playlist link, or open the page and paste it themselves, and get back a folder of proper files with the song name, artist, album and artwork already set, so it looks right in the phone's music app instead of being sixty files called video.mp3. My mum listens to older Nepali and Hindi songs that most download sites do not have clean copies of, and getting the real recording instead of a random cover version was the whole point.
So the rule I set was that it should never quietly hand you the wrong song. It would rather tell you it could not find a track than give you a sped up remix or a live recording, because a wrong file in a folder of two hundred is something you only find out about when the song comes on and it is not the one you know.
What went well
Refusing beats guessing. When it searches YouTube for a track, a result is thrown out if it is a live version, if its title carries a word like remix or cover that the original does not have, or if its length cannot be checked against the real song. Only what survives gets ranked, and YouTube's auto-generated artist channels are preferred because they are the closest thing to official audio.
The unglamorous parts matter just as much for the person using it. Downloads run in parallel, so a hundred song playlist does not take an evening. If it stops halfway you can start it again and it skips everything it already has. And the matching logic has real tests, because it is the piece most likely to quietly rot.
What's next
Show the user how confident it is. The matcher knows when a match was a close call, and right now the person does not: a song either downloads or it does not. When it is unsure it should show the two or three candidates and let the person choose, because they know the song and it does not.