Web stack using YouTubeDL to automate downloading music.
This repository has been archived on 2021-12-24. You can view files and clone it, but cannot push or open issues/pull-requests.
 
 
 
 
 
 
Go to file
Jef Roosens 8c31129243
continuous-integration/drone the build was successful Details
Merge branch 'develop' into renovate/pytest-6.x
2021-05-18 12:33:05 +02:00
.hooks [#2] Commit hook won't run on master now 2021-04-02 14:48:38 +02:00
app Made linter stop complaining 2021-05-18 12:26:42 +02:00
tests Added auto-deployment for dev image 2021-05-18 12:24:10 +02:00
web Update dependency vue-tsc to ^0.1.0 2021-05-02 22:02:33 +00:00
.dockerignore Wrote non-root Dockerfile 2021-05-18 12:15:21 +02:00
.flake8 Added opinionated project config 2021-05-18 08:57:40 +02:00
.gitignore Initial commit 2021-04-02 13:14:29 +02:00
.woodpecker.yml Added auto-deployment for dev image 2021-05-18 12:24:10 +02:00
Dockerfile Wrote non-root Dockerfile 2021-05-18 12:15:21 +02:00
LICENSE Initial commit 2021-04-02 13:14:29 +02:00
Makefile Added auto-deployment for dev image 2021-05-18 12:24:10 +02:00
README.md Updated README 2021-04-30 01:56:37 +02:00
pyproject.toml Added opinionated project config 2021-05-18 08:57:40 +02:00
renovate.json Add renovate.json 2021-04-30 00:01:22 +00:00
setup.cfg Update dependency pytest to v6.2.4 2021-05-18 10:00:40 +00:00
setup.py Added opinionated project config 2021-05-18 08:57:40 +02:00

README.md

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