FLACidal is a desktop app that grabs lossless FLAC files with full metadata and embedded cover art attached. It tries Tidal, Qobuz, Amazon Music, Bandcamp, and Soulseek P2P in sequence, automatically moving to the next source until one succeeds.
Note: Tidal, Qobuz, and Amazon have all tightened their APIs against third-party access. The community proxy pools FLACidal relies on to reach them go offline regularly, occasionally for days at a stretch. Soulseek is currently the source you can count on: it needs no proxy pool at all and takes about 5 minutes to set up. Tidal is tried first and Soulseek last by default (see source order below); to give Soulseek priority over the proxy-dependent sources instead, move it to the top under Settings -> General -> Source Mode.
1. Download FLACidal for your platform
2. Optionally set up Soulseek as a last resort that needs no proxy pool
3. Paste a URL or run a search, then hit download
Home tab -> paste a Tidal or Qobuz URL -> Fetch -> Download All FLAC
Search tab -> search by track / album / artist -> Download
Anytime, check Settings -> Status to see which sources are online.
FLACidal works through sources one at a time, in order, until one succeeds:
| Priority | Source | Quality | Notes |
|---|---|---|---|
| 1 | Tidal | FLAC / Hi-Res (24-bit) | Through the community proxy pool |
| 2 | Qobuz | FLAC / Hi-Res (24-bit) | Through the community proxy pool (optional) |
| 3 | Amazon Music | FLAC / UHD | Through the community proxy pool |
| 4 | Bandcamp | FLAC | Direct |
| 5 | Soulseek P2P | FLAC | Built-in client (needs a free account, or leave the fields empty for a throwaway one) |
Sources can be reordered under Settings -> General -> Source Mode, and whatever order is set gets followed top to bottom with no exceptions. Soulseek is last by default; an order you choose is kept as is, Soulseek first included.
Community extensions add more download sources and metadata providers. Manage them under Settings -> General -> Extensions (or /api/extensions/* on the headless server): an extension is installed disabled, you review its permissions before enabling it, and an enabled download extension is tried right before Soulseek unless you drag it elsewhere in the order.
The community proxy pool is relay infrastructure FLACidal maintains for Tidal, Qobuz, and Amazon. It comes built in, needs no setup, and if these servers go down, those sources stop working along with them.
Separately, an outbound proxy (HTTP / SOCKS5) routes FLACidal's own traffic through a network proxy you control: a corporate VPN, a SOCKS5 tunnel, whatever you already run. Most people can skip this entirely; when needed, it's configured under Settings -> General -> HTTP / SOCKS5 Proxy.
Every FLACidal user shares the community proxy pool, and that's exactly why it struggles: rate limits and cooldowns land on everyone at once. Run your own Tidal HiFi API or Qobuz proxy instance and point FLACidal at it, and it gets tried before the community pool, with no shared rate-limit queue and no dependence on pool uptime.
Set this up under Settings -> General:
tidalPriorityEndpoints: one or more self-hosted Tidal HiFi API URLs, tried in order ahead of the public poolqobuzPriorityEndpoints: one or more self-hosted Qobuz proxy URLs, tried in order ahead of the public poolamazonPriorityEndpoints: one or more self-hosted Amazon proxy URLs, tried in order ahead of the public pool
Tidal and Qobuz also keep their old single-URL fields (tidalCustomEndpoint, qobuzCustomEndpoint) for backward compatibility. For new setups, though, the priority-list fields are the better pick, since they allow more than one fallback instance.
Leave these blank to stick with the default community pool.
Major streaming platforms actively push back against unofficial API access, so expect the following:
- Proxy pools may drop offline with no warning
- Downloads can quietly fall through to Soulseek as a last resort
- Soulseek does not depend on the proxy pools, which is why it is the last resort by default
You can check endpoint health live at any time under Settings -> Status.
- Multi-Source Fallback: cascades automatically across Tidal, Qobuz, Amazon, Bandcamp, and Soulseek
- Soulseek P2P stays unaffected by streaming-proxy uptime; it is tried last by default and can be moved up in Source Mode
- Smart Dedup checks every source plus an optional external library path (a Navidrome/Jellyfin library, say) and skips anything already on disk, matched by ISRC
- Jellyfin Integration: triggers a library scan automatically once a download batch finishes
- Streaming sources deliver Hi-Res and Lossless quality: 24-bit up to 192 kHz for Hi-Res, 16-bit / 44.1 kHz for Lossless
- Full Tidal and Qobuz coverage: playlists, albums, tracks, mixes, and artist pages
- Built-in Search across Tidal (Tracks / Albums / Artists) or Deezer via the Universel tab, which keeps working even when Tidal is down
- Up to 10 Concurrent Downloads in parallel, with live queue progress
- Smart Metadata handling: Vorbis comment tags, embedded cover art, and lyrics
- ReplayGain tagging toggle in Settings
- An Audio Tools Suite covering Quality Analyzer, Resampler, FFmpeg-powered Converter, and File Manager
- Custom Filename Templates, so you set your own naming format, e.g.
{artist} - {title} - Artist Artwork pulled in alongside the music
- A Source Status Panel showing live endpoint health under Settings -> Status
- Outbound Proxy Support for every outbound request, HTTP or SOCKS5
- A Multilingual Interface in English, French and German, switchable under Settings -> Language (System follows your OS language)
| Platform | File |
|---|---|
| Windows x64 | flacidal_windows_amd64.exe |
| macOS Universal | flacidal.dmg |
| Linux x64 | flacidal_linux_amd64.AppImage |
| Android | FLACidal.apk |
| iOS | FLACidal.ipa (via AltStore) |
Linux: The AppImage bundles its own WebKit and GTK, so you do not need webkit2gtk installed, and it needs glibc 2.35 or newer (Ubuntu 22.04, Debian 12, Fedora 36 or later). No AUR package exists yet. Grab the AppImage directly, or build from source.
An Android and iOS build exists too: FLACidal Mobile
Find every release on GitHub
Right now, Soulseek is FLACidal's most dependable source, and getting it running takes about 5 minutes.
- Already using Nicotine+? Use your existing username and password; FLACidal shares the same account system.
- New user: Sign up for a free account at slsknet.org (no email needed) or through the Nicotine+ app.
FLACidal downloads without sharing files.
- Open FLACidal -> Settings -> General
- Scroll to Soulseek (Fallback P2P)
- Switch Enable Soulseek on
- Fill in your username and password, or leave both empty to use a throwaway account created automatically
- Click Login; FLACidal checks the connection live and reports success or an error
- Click Save Changes
Head to Settings -> Status. The Soulseek row shows "not tested" until a login or download succeeds, then turns green. If any proxy pool endpoints turn red, Soulseek automatically picks up the slack.
- Paste a URL into the field and hit Fetch
- FLACidal pulls the track list and shows it on screen
- Click Download All FLAC to add the tracks to the Queue
- URLs you've fetched before show up as cards under the input, ready for a quick re-download
Supported URL types:
| Service | Types |
|---|---|
| Tidal | Playlist · Album · Track · Mix · Artist |
| Qobuz | Album · Playlist · Track |
| Spotify | Track · Album · Playlist (metadata only, routed to Tidal/Qobuz/Amazon/Soulseek for the actual FLAC) |
| Deezer | Track · Album · Playlist |
Other services (Apple Music, YouTube Music, Deezer short links, ...): FLACidal can't parse these directly. Instead it resolves them automatically through Odesli/song.link into an equivalent Tidal or Deezer URL before fetching, so pasting the link is all that's needed.
Open the Search tab, where four sub-tabs live:
| Tab | What it searches | Works when Tidal is down? |
|---|---|---|
| Tracks | Tidal track catalog | No |
| Albums | Tidal album catalog | No |
| Artists | Tidal artist pages | No |
| Universel | Deezer public catalog (by ISRC) | Yes |
Universel runs on Deezer's public API, so it keeps working regardless of Tidal proxy health. Reach for it whenever a Tidal search turns up empty.
The Queue tab lists every active and pending download:
- A live progress bar per track
- Pause / Resume for the whole queue at once
- Retry a single failed download, or retry every failure in one go
- An export option for the list of failed downloads
History logs every download and URL fetch. Click any past entry to re-fetch it instantly.
Files shows every FLAC file in your download folder, with a button to open the folder in your system's file manager.
Reach the Tools panel through the grid icon in the sidebar:
| Tool | What it does |
|---|---|
| Quality Analyzer | Examines actual frequency content to confirm true lossless status, reports BPM/musical key, and can retag from Deezer (album/tracknumber/discnumber/year/genre/cover) |
| Resampler | Adjusts sample rate (192 kHz down to 44.1 kHz, for instance) |
| Converter | Transcodes to other formats (MP3, AAC, OGG, Opus, Vorbis, ALAC, WAV, AIFF) through FFmpeg |
| File Manager | Batch-renames files based on metadata templates |
| Lyrics Manager | Batch-fetches and embeds lyrics into FLAC files via LRCLIB |
Converter, Resampler, and the Quality Analyzer's lossless check all need FFmpeg. Get it through your system's package manager, or use the in-app installer under Settings -> Status.
The Quality Analyzer's BPM/key detection needs aubio and keyfinder-cli on PATH, and both are optional (on Arch, for example: pacman -S aubio libkeyfinder, then yay -S keyfinder-cli for the AUR package). Skip them and BPM/key show blank, while the rest of the analysis still runs.
~/Music/
└── Playlist Name/
├── Artist - Track One.flac
├── Artist - Track Two.flac
└── cover.jpg
Both the download folder and the filename template can be fully customized under Settings -> File Management.
Settings live at ~/.flacidal/config.json and can be edited from within the app via the Settings panel. The Open Config Folder button in Settings jumps straight to that directory.
| Setting | Default | Options |
|---|---|---|
| Quality | Lossless |
Hi-Res (24-bit/48kHz+) · Lossless (16-bit/44.1kHz) · High (320kbps, lossy) · Atmos (lossy, .m4a, Tidal only) |
| File naming | {artist} - {title} |
Custom template with metadata variables |
| Embed cover art | true |
true · false |
| Concurrent downloads | 4 |
1 – 10 |
| Outbound proxy | (none) | http://host:port or socks5://host:port |
| Language | System |
System · English · Français · Deutsch |
| Date format | full |
full (YYYY-MM-DD) · year (YYYY), for the DATE tag of FLAC and MP3 files. ORIGINALDATE always keeps the full date |
The config file sits at ~/.flacidal/config.json.
The log file is next to the config, at ~/.flacidal/flacidal.log, and Settings shows its path. It rotates at 5 MB and keeps two backups (flacidal.log.1 and flacidal.log.2). Credentials in URLs, bearer tokens and values written as password=, token=, secret= or api_key= are masked, but a secret separated from its keyword by a plain space is not, so skim it before attaching it to a bug report.
Requirements: Go 1.26+ and Wails v2
go install github.com/wailsapp/wails/v2/cmd/wails@latest
git clone https://github.com/kushiemoon-dev/FLACidal.git
cd FLACidal
wails build
# Binary: build/bin/flacidalFor hot-reload development mode:
wails devFLACidal can also run as a plain HTTP server, with no Wails and no desktop shell, controllable from any browser on the machine or the LAN. That fits a NAS, a home server, or anywhere a desktop UI doesn't make sense.
The image bundles the server, the built frontend, ffmpeg, and aubio (BPM), so nothing extra needs installing. keyfinder-cli (musical key) isn't bundled yet, since there's no Debian package for it and it needs a source build, so key detection stays empty in Docker for now.
curl -O https://raw.githubusercontent.com/kushiemoon-dev/FLACidal/main/docker-compose.yml
export FLACIDAL_AUTH_TOKEN=$(openssl rand -hex 32) # or put it in a .env file next to docker-compose.yml
docker compose up -dThe container listens on all interfaces, so the token is mandatory: docker compose refuses to start without FLACIDAL_AUTH_TOKEN. Keep any .env file out of version control.
Then open http://localhost:8080; the browser asks for the token on first access and keeps it in its localStorage. Downloads go to ./music/FLACidal, while config and the database persist across restarts in the flacidal-config volume. Port and volume layout details are in docker-compose.yml.
git clone https://github.com/kushiemoon-dev/FLACidal.git
cd FLACidal
cd frontend && npm install && npm run build && cd ..
go run ./cmd/server
# or: make serveThen open http://localhost:8080.
The server reads from the same ~/.flacidal/config.json as the desktop app. It's controlled by five optional environment variables:
| Variable | Default | Purpose |
|---|---|---|
PORT |
8080 |
HTTP port the server listens on |
LISTEN_HOST |
127.0.0.1 |
Address the server binds to |
AUTH_TOKEN |
empty | Access token for /api and /ws; required when LISTEN_HOST is not a loopback address |
CORS_ORIGINS |
empty | Comma-separated list of origins allowed to call the API from another site (* is refused) |
FRONTEND_DIST_DIR |
frontend/dist |
Where to find the built SPA on disk |
Access control. By default the server only listens on 127.0.0.1. With no AUTH_TOKEN on a loopback address, authentication is off, a warning is logged, and requests whose Host header is not localhost, 127.0.0.1 or ::1 are refused. Binding any other address without a token makes the server refuse to start (refusing to listen on <host> without authentication: set AUTH_TOKEN ...). When a token is set, send it as Authorization: Bearer <token> (WebSocket clients may use ?token= instead). GET /api/health and the web app itself stay public. The token is never stored in config.json or returned by GET /api/config.
File confinement. In headless mode, file routes (delete, rename, convert, lyrics, analyzer by path) only accept paths under the download folder and the externalLibraryPaths entries. Symlinks that lead outside are refused.
Note that GET /api/config still returns the Qobuz and Soulseek credentials to any authenticated client.
Running go run ./cmd/server before the frontend is built works fine: the server still comes up and the API works on its own, though requests to / return a 503 nudging you to run npm run build first.
Is a Tidal or Qobuz account required? Not for the streaming sources: FLACidal handles authentication itself through the community proxy pools. Soulseek is a different story though: Soulseek P2P needs an account, and given how the proxies have been behaving lately, setting one up for free is well worth it.
Everything fails or times out; nothing downloads. What now? Check Settings -> Status first. Red proxy pool endpoints mean the streaming sources are down right now, which happens and is usually temporary. Make sure Soulseek is set up too (see Setting up Soulseek); it doesn't depend on proxy pool health at all.
What quality can I actually expect? Tidal gives Hi-Res (24-bit, up to 192 kHz) or Lossless (16-bit, 44.1 kHz). Qobuz goes up to 24-bit depending on what's available for a given album. Soulseek is entirely dependent on what other users are sharing, though FLACidal specifically searches for FLAC there.
Why is my antivirus flagging the binary? That's a false positive. Heuristic scanners flag Go binaries for no real reason sometimes. Build from source instead if it bothers you.
What does the outbound proxy setting do, and do I need it? It routes FLACidal's traffic through a personal proxy of your choosing: a corporate VPN, a SOCKS5 tunnel, whatever you already run. Most people can skip it entirely, and it has nothing to do with the community proxy pool that Tidal and Amazon rely on.
Does Arch Linux get an AUR package?
Not yet. A flacidal-bin PKGBUILD exists in the repo (packaging/aur/) but isn't published to aur.archlinux.org. Grab the AppImage directly, or build from source for now.
FLACidal exists strictly for educational and personal use. It has no affiliation with, endorsement from, or connection to Tidal, Qobuz, or any other streaming service. Making sure your use stays within local law and each platform's Terms of Service is entirely on you. The software comes "as is," with no warranty of any kind.
MIT License · Releases · Mobile App · YouFLAC · OpenDrop-VJ
Built with love by KushieMoon





