maxqual
Build a music library at the highest quality the source serves, with complete tags, cover art and per-release organization.
maxqual is a standalone CLI for people who curate permanent local libraries (e.g. for Jellyfin/Plex/navidrome). It resolves release metadata, matches tracks, downloads audio natively (no re-encode), tags it properly, and organizes it into per-release folders with playlists and artwork.
What makes it different
- Zero-transcode pipeline. Streams are kept in their native container. Audio is never re-encoded, so what you keep is exactly what the source served — no generational loss.
- Quality-tier preference. When a higher audio tier is available to the session you supply, it is preferred automatically; otherwise the best publicly available stream is used.
- Discography-aware. Point it at an artist and it fetches albums, EPs and
singles as separate, properly numbered releases with an
.m3u8each. - Open metadata first. Release/track metadata comes from Deezer's public API (no key, no quota dance) for artist and album URLs; Spotify playlists/albums are supported with client credentials (your own app key, or a shared fallback with retries).
- Cover art maintenance.
maxqual coversre-embeds artwork when a strictly larger image can be found, and writesfolder.jpgper release.
How it works
metadata source (Deezer / Spotify)
│ release, tracklist, durations, artwork URL
▼
track matching (yt-dlp search, duration-scored)
│
▼
audio download (yt-dlp; native formats only)
│ m4a / opus, no conversion
▼
tagging + organization (mutagen)
NN - Artists - Title.ext + Release.m3u8 + folder.jpg
Install
Requires Python 3.10+, ffmpeg on PATH, and (recommended) a
deno binary — YouTube's JS challenges need a JS runtime
that yt-dlp can find.
pipx install maxqual # or: pip install maxqual
From source:
git clone https://github.com/mareekkk/maxqual
pipx install ./maxqual
Usage
# an artist's discography (Deezer metadata; albums + EPs + singles)
maxqual download "Jeff Kaale" -o ~/Music
# a specific album or playlist
maxqual download "https://www.deezer.com/album/123456" -o ~/Music
maxqual download "https://open.spotify.com/playlist/..." -o ~/Music
# use a logged-in browser session (recommended; tokens rotate, so export fresh)
maxqual download "https://open.spotify.com/playlist/..." \
--cookies-from-browser firefox --refresh-cookies -o ~/Music
# upgrade embedded cover art across a library
maxqual covers ~/Music
Resumable by design: existing files are skipped, so re-running a command retries only what is missing.
Optional: PO token provider
Some streams require a proof-of-origin token. If you run the community
bgutil-ytdlp-pot-provider
server locally (loopback only), yt-dlp picks it up automatically and maxqual
benefits with no extra configuration:
docker run -d --init --restart unless-stopped \
-p 127.0.0.1:4416:4416 brainicism/bgutil-ytdlp-pot-provider
Session cookies
Session cookies are credentials. maxqual exports them to a mode-600 file when
you pass --refresh-cookies, never prints them, and you should delete the
file when you are done. Anonymous operation also works and simply resolves to
the best public stream.
Project layout
src/maxqual/
audio.py # yt-dlp wrapper: search, native download, cookie export
sources.py # Deezer + Spotify metadata
tags.py # mutagen tagging, covers, m3u, folder.jpg
covers.py # cover-art upgrade pass
cli.py # command line interface
Legal
maxqual is a tool. It does not host, index or redistribute any content, and it ships without credentials of any kind.
- You are responsible for what you download and for complying with the terms of the platforms you interact with and the copyright of the material involved.
- Intended uses include: content you own or created, content published under permissive licenses (e.g. Creative Commons, public domain), and anything you are licensed to archive.
- The authors do not condone infringement and provide no support for it.
Extraction technology is a moving target; if a source changes its player
response format, this tool inherits whatever yt-dlp handles.
License
MIT — see LICENSE.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file maxqual-1.0.1.tar.gz.
File metadata
- Download URL: maxqual-1.0.1.tar.gz
- Upload date:
- Size: 15.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e88f4f9e4705447c8f07d1e884c6432955ecb27dc4939a397a87ba17cba825ce
|
|
| MD5 |
af79f08e6a61a1eb8e98e5e82278d35d
|
|
| BLAKE2b-256 |
d6bd54a79b4bd61c601f50705094fcc9abd7c34bf7d847dc8db0a870e1936b61
|
Provenance
The following attestation bundles were made for maxqual-1.0.1.tar.gz:
Publisher:
publish.yml on mareekkk/maxqual
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
maxqual-1.0.1.tar.gz -
Subject digest:
e88f4f9e4705447c8f07d1e884c6432955ecb27dc4939a397a87ba17cba825ce - Sigstore transparency entry: 2735785702
- Sigstore integration time:
-
Permalink:
mareekkk/maxqual@7fc964289c4ff8b952dffe953d64973fe70370ec -
Branch / Tag:
refs/tags/v1.0.1 - Owner: https://github.com/mareekkk
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7fc964289c4ff8b952dffe953d64973fe70370ec -
Trigger Event:
push
-
Statement type:
File details
Details for the file maxqual-1.0.1-py3-none-any.whl.
File metadata
- Download URL: maxqual-1.0.1-py3-none-any.whl
- Upload date:
- Size: 15.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fb12ab4e0e4f507ea26ec39f9be80d5d6d1d3af0e3cede0b4a13f6ee220e1e98
|
|
| MD5 |
bf6fda0f98aa2469e3d937f7d5e2f820
|
|
| BLAKE2b-256 |
73c837017755be28ced860505deade114bebc01629e1f869112fa14c3a377140
|
Provenance
The following attestation bundles were made for maxqual-1.0.1-py3-none-any.whl:
Publisher:
publish.yml on mareekkk/maxqual
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
maxqual-1.0.1-py3-none-any.whl -
Subject digest:
fb12ab4e0e4f507ea26ec39f9be80d5d6d1d3af0e3cede0b4a13f6ee220e1e98 - Sigstore transparency entry: 2735785740
- Sigstore integration time:
-
Permalink:
mareekkk/maxqual@7fc964289c4ff8b952dffe953d64973fe70370ec -
Branch / Tag:
refs/tags/v1.0.1 - Owner: https://github.com/mareekkk
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7fc964289c4ff8b952dffe953d64973fe70370ec -
Trigger Event:
push
-
Statement type: