About this project

A full-stack app for organizing, tagging, and managing music metadata. Built with Flask, React, and Tanacity, this app started as a Python CLI tool but evolved into a full-fledged web application. It’s designed for music lovers who want clean, well-organized libraries—no missing album art or messy filenames.

This project was built using

  • Python
  • Flask
  • Jinja
  • HTML
  • CSS
  • Javascript

The project provides the following features

  • Download all songs in a Spotify playlist or album, and YouTube playlist.
  • Download all songs in a signed in user has liked.
  • Download a single track, along with optional recommeded tracks
  • Embed metadata such as cover image, lyrics, song title and more to a downloaded song
  • Remove songs from a user's liked tracks

Technical details

  • The app takes quite a few steps before downloading a song. It first retrieves the metadata for a given track from Spotify
  • Then it searches for the track on YouTube, and performs complex regex filtering on the results, to ensure the correct track is downloaded.
  • The results are then displayed to the user for selection, and then the download begins.
  • All this can take a very long time to complete, for this reason I have implemented a json-file cache system that stores all retrieved metadata for immediate retrieval next time the same track is requested.
  • I have also implemented a downloads history file to avoid duplicate downloads.
  • Internet connections can sometimes be glitchy and cause downloads to fail, for this I have utilized Python's Tenacity library for retrying downloads. And if all downloads eventually fail because of some reason, the app will continue downloading from the last failed track because of the cache and history sysytem ;)
  • The app is designed for personal use only, so it runs on a user's machine and downloads tracks to that machine.