2021-04-30 01:54:24 +02:00
|
|
|
# Jos
|
2021-04-02 13:14:29 +02:00
|
|
|
|
2021-04-30 01:54:24 +02:00
|
|
|
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](https://github.com/ytdl-org/youtube-dl)
|
|
|
|
([mirror](https://git.roosens.me/mirrors/youtube-dl)). 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](https://developer.spotify.com/documentation/web-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](https://ruben.verborgh.org/)), 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](https://git.roosens.me/Chewing_Bever/fej).
|
|
|
|
|
|
|
|
## 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
|
2021-04-30 01:56:37 +02:00
|
|
|
|
|
|
|
Some cool ideas for when the above is done:
|
|
|
|
|
|
|
|
* Suggestions for new albums to add
|
|
|
|
* Tracking of select artists & notify/show new releases
|