Skip to main content

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 .m3u8 each.
  • 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 covers re-embeds artwork when a strictly larger image can be found, and writes folder.jpg per 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

maxqual-1.0.1.tar.gz (15.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

maxqual-1.0.1-py3-none-any.whl (15.1 kB view details)

Uploaded Python 3

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

Hashes for maxqual-1.0.1.tar.gz
Algorithm Hash digest
SHA256 e88f4f9e4705447c8f07d1e884c6432955ecb27dc4939a397a87ba17cba825ce
MD5 af79f08e6a61a1eb8e98e5e82278d35d
BLAKE2b-256 d6bd54a79b4bd61c601f50705094fcc9abd7c34bf7d847dc8db0a870e1936b61

See more details on using hashes here.

Provenance

The following attestation bundles were made for maxqual-1.0.1.tar.gz:

Publisher: publish.yml on mareekkk/maxqual

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for maxqual-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 fb12ab4e0e4f507ea26ec39f9be80d5d6d1d3af0e3cede0b4a13f6ee220e1e98
MD5 bf6fda0f98aa2469e3d937f7d5e2f820
BLAKE2b-256 73c837017755be28ced860505deade114bebc01629e1f869112fa14c3a377140

See more details on using hashes here.

Provenance

The following attestation bundles were made for maxqual-1.0.1-py3-none-any.whl:

Publisher: publish.yml on mareekkk/maxqual

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 files

1.0.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page