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 d5931d37b5
continuous-integration/drone the build was successful Details
Merge pull request 'Update dependency pytest-cov to v2.12.1' (#25) from renovate/pytest-cov-2.x into develop
Reviewed-on: https://git.roosens.me/Chewing_Bever/jos/pulls/25
2021-06-03 15:56:01 +02:00
.hooks [#2] Commit hook won't run on master now 2021-04-02 14:48:38 +02:00
app Fixed linting errors in backend 2021-05-18 22:09:16 +02:00
tests Added auto-deployment for dev image 2021-05-18 12:24:10 +02:00
web Update dependency ts-node to v10 2021-05-23 20:03:30 +00:00
.dockerignore Added frontend build to Docker image 2021-05-18 21:46:17 +02:00
.editorconfig Switched to Make commands for frontend ci 2021-05-18 15:55:36 +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
.mocharc.yml Added initial Mocha testing setup 2021-05-18 18:33:25 +02:00
.woodpecker.yml Added initial Mocha testing setup 2021-05-18 18:33:25 +02:00
CHANGELOG.md Began a roadmap [CI SKIP] 2021-05-18 14:21:58 +02:00
Dockerfile Flask now serves the frontend 2021-05-18 22:06:37 +02:00
LICENSE.md Switched to AGPLv3 license 2021-05-18 14:14:56 +02:00
Makefile Flask now serves the frontend 2021-05-18 22:06:37 +02:00
README.md Updated README 2021-04-30 01:56:37 +02:00
ROADMAP.md Began a roadmap [CI SKIP] 2021-05-18 14:21:58 +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-cov to v2.12.1 2021-06-01 18:02:25 +00:00
setup.py Added opinionated project config 2021-05-18 08:57:40 +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 (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.



  • 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)


  • 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