Skip to content

v4.16.0

Choose a tag to compare

@github-actions github-actions released this 21 Aug 19:23
· 79 commits to main since this release

New features

  • Dolby Atmos in the quality selector: the UI-side counterpart to flacidal-core's Atmos support; ATMOS was already a valid value for Config.downloadQuality, just missing its <option>.
  • ReplayGain toggle in Settings: wires Config.enableReplayGain through GetConfig/SaveConfig/ResetToDefaults.
  • BPM and musical key in the Audio Quality Analyzer: best-effort via the optional aubiotrack/keyfinder-cli binaries (zero value if either is missing), shown as new columns in the results table and now persisted into the file's tags via EmbedAudioFeatures, not just shown in the UI and lost when the page closes. Detected keys are converted to Camelot notation so they match what auto-tagged Tidal downloads already show, instead of the Analyzer saying "Dm" for the same key Tidal tags as "7A".
  • Scan an existing folder for fake-lossless FLAC files: the Analyzer's "select folder" path used to be a stub that silently fell back to single-file picking. Reuses the same recursive FLAC listing as folder conversion, so a library can be checked retroactively for files an untrusted source delivered as fake lossless before the download-time gate existed.
  • Deezer retag from the Quality Analyzer: Scan Folder and single-file analysis now also fill in album/tracknumber/discnumber/year/genre/cover from Deezer, not just BPM/key, in the same pass.
  • The analyzer accepts non-FLAC files: both the multipart upload and the {"path": ...} JSON variant used to only handle .flac; both now go through flacidal-core's format-agnostic analyzer, which still gives FLAC its full fake-lossless spectral check and gives every other supported format (mp3/m4a/wav/ogg/opus/...) real sample-rate/spectral data without a false lossless verdict.

Fixes

  • Self-hosted Tidal endpoints didn't apply to playlist/album/track browsing: that path runs through a separate TidalHifiService instance than the downloader, which never received the custom/priority endpoints configured in Settings, so browsing stayed on the public pool even with a self-host set up. The instances are now kept in sync.
  • Download history stayed empty: DownloadManager.SetJobCompleteCallback existed to persist a history entry after every job, but nothing ever registered it, making failed tracks impossible to diagnose after the fact. Wired on startup.
  • Single-track downloads and retries lost album metadata: QueueSingleDownload/RetryDownload already fetched the full Tidal track before queueing but only pulled ISRC/title/artist out of it, so the retag step never saw album/tracknumber/discnumber/year/cover. Now passes the whole track through.

Dependencies

  • flacidal-core bumped from v0.16.1 to v0.19.0. v0.17.0: BPM and musical key detection in Camelot notation, BPM, key and year auto-tagged from Tidal metadata, full track metadata carried into the retag step, library backfill of album, track and disc numbers and cover art, DASH-segmented Tidal downloads remuxed to a native FLAC container, Soulseek downloads with the wrong container rejected or remuxed, upscaled FLAC from untrusted sources rejected, the Soulseek-first pre-pass respects the configured source order, and setSourceOrder no longer drops Soulseek.
  • v0.18.0: Dolby Atmos downloads, ReplayGain analysis (off by default), multi-format audio analysis, artist names containing a comma no longer truncated in search, a 429 is a soft failure that honors Retry-After, plaintext http:// custom endpoints rejected except on loopback and private addresses, a fallback to AAC quality no longer keeps the .flac extension, a lone 403 no longer kills an endpoint, and segmented Tidal downloads are staged before reaching the library.
  • v0.19.0: installed extensions can now be used as a download source, song.link scraping when Odesli's API rate-limits, and crash-safety fixes (atomic tag writes, staged downloads, oversized-cover rejection, streaming ISRC scans).

Internal

  • Go bumped to 1.26.5, .golangci.yml migrated to v2 format, GitHub Actions pinned to commit SHA, a stale postcss bumped for an osv-scanner CVE flag.

Full Changelog: v4.15.2...v4.16.0