An empty core.
You supply the modules.
SpotiFLAC resolves Spotify track, album and playlist metadata. It ships with no bundled provider and no default extension source — every audio backend is a module you find, review, and plug in yourself.
pip install SpotiFLAC
Three sockets, in order
Nothing about the audio backend is decided for you. The core resolves what a URL means; getting the actual audio is a separate, opt-in step.
Resolve the URL
Paste a Spotify track, album, playlist or artist link. The core resolves title, artist, album, and other metadata. No audio yet.
Point at a registry
Set SPOTIFLAC_REGISTRIES, or add one from Settings if you're using the GUI/web interface, to a source of extensions you've chosen. Nothing is fetched until you do.
Retrieve audio
An installed extension (JavaScript or Python) handles the actual provider. The core never talks to a provider directly.
What the core actually does
Sync & async Python
A blocking SpotiFLAC() call for scripts, or AsyncSpotiFLAC for bots and web backends.
JS or Python extensions
Bring your own registry. Nothing bundled, nothing installed automatically, ever.
CLI, GUI, web, wizard
--gui for a native window, --web for the same interface in a browser, --interactive for a guided wizard.
MusicBrainz enrichment
Genre, label, BPM, UPC and ISRC tags added automatically when a match is found.
Synced lyrics embedding
Optional, multi-provider, embedded directly into the file's tags.
Local retagger
The GUI rescans and fixes tags on files you already have, with automatic backup before writing.
Watch mode
--watch re-syncs a playlist, album, or artist on an interval, indefinitely — only what's new gets fetched.
Duplicate detection
Finds the same recording across your library by acoustic fingerprint, independent of tags or ISRC.
Discovery & signed registries
Browse community registries before adding one, and verify Ed25519-signed extension entries on top of the usual checksum.
Pick an interface
All talk to the same core. None can retrieve audio until you've installed at least one extension — see below.
# install pip install SpotiFLAC # point at a registry you've chosen, then install an extension export SPOTIFLAC_REGISTRIES="https://example.com/my-registry.json" # resolve + download using an installed extension spotiflac https://open.spotify.com/track/TRACK_ID ./downloads --service ext:tidal-web
# native window
spotiflac --gui# same interface, served locally — open http://127.0.0.1:8000
spotiflac --webfrom SpotiFLAC import SpotiFLAC SpotiFLAC( url="https://open.spotify.com/track/TRACK_ID", output_dir="./downloads", services=["ext:tidal-web"], # requires the extension to be installed )
About that ext:tidal-web
It only resolves to something if you've installed an extension by that name, from a registry you configured. The maintainer doesn't ship, curate, or default to one — see Extensions in the README for the full mechanism.
Common questions
Why doesn't anything download right after I install it?
SPOTIFLAC_REGISTRIES at a registry of your choosing and install at least one extension before it can retrieve audio.Can I write my own extension?
spotiflac --ext-scaffold NAME generates a working starting point for either, and spotiflac --ext-dry-run PATH validates it (manifest, entry point, exposes the right shape) without installing it or contacting any registry. For Python there's a full walkthrough — the BaseProvider contract, the core toolbox, a complete example provider, packaging and publishing: see Writing a Python Extension.GUI or web mode — which should I use?
--gui opens a native window. --web serves the identical interface as a local web server instead, useful on headless machines or inside Docker. Web mode binds to 127.0.0.1 by default — changing that exposes it to anything that can reach the port, unless you also set --web-token (a shared secret) or --web-multiuser (per-account login).Does the maintainer review third-party extensions or registries?
Is this legal to use?
Disclaimer
This project is intended for educational and personal use only. SpotiFLAC Module Version is an independent, third-party tool and is not affiliated with, endorsed by, or connected to Spotify, Tidal, Qobuz, Amazon Music, Deezer, or any other streaming service.
- No copyrighted content is hosted, stored, mirrored, or distributed by this project. The core does not bundle, ship, or default to any third-party extension, registry, or provider.
- You are responsible for ensuring your use of this software, and any extension or registry you choose to install, complies with your local laws and the terms of service of any platform you access.
- The maintainer does not review, endorse, or take responsibility for the content or behavior of third-party extensions or registries a user may choose to install.