This repository has been archived on 2021-12-24. You can view files and clone it, but cannot push or open issues/pull-requests.
jos/README.md

56 lines
2.3 KiB
Markdown

# 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](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