2.4 KiB
Jos
Jos is one of my oldest project ideas, and the one that's definitely stuck around the longest.
The idea is pretty straightforward: I like music, and I'd like to download any music I want from YouTube using YoutubeDL (mirror). I've written dozens of scripts that automate some parts of this process, such as looking up the correct video, or searching for metadata using the Spotify API. The goal of this project is to be the final "script", housing everything I need to grow my music collection.
Design of the project
I've decided to create Jos using the classic frontend-backend combo: a backend (written in Python using Flask) serves a RESTful API that does all the hard work. We then put a lovely frontend in front of it (Vue 3) that interacts with this API to make a functional website.
Ever since I had my Web Development course (taught by Ruben Verborgh), I've been very interested in developing high-performing and practical web applications using RESTful API's. I know developing two separate applications requires more work, but it allows for more flexibility, e.g. it allows me to swap out the backend for a completely new implementation, in a different language.
Plans
API
- Search engine for high-quality music videos (using the
"auto-generated"
trick.) - Wrapper layer around the Spotify API for searching for tracks/albums/artists
- Return a JSON dump containing all metadata & urls you need to download a track/album This allows the API to be used by non-authenticated users as well (e.g. we could write a Python client that uses the API, but downloads locally.)
- Download a track/album (should use some sort of authentification probably)
Frontend
- Search for tracks/albums/artists
- Edit metadata & select best video
- Tell server to download track/album
- Live updates per track on how far the download is (or just wether or not it's done)
- file explorer for music collection
- metadata editor for collection
- Analysis of existing collection
- Find incomplete albums & suggest missing tracks to download
- Detect invalid metadata
Some cool ideas for when the above is done:
- Suggestions for new albums to add
- Tracking of select artists & notify/show new releases