• v0.6.15 Stable

    claude released this 2026-07-23 15:40:04 -06:00 | 0 commits to master since this release

    Fixed a bug where a manual import of MP3 files could fail entirely with no tagged audio files left to import after quarantine, even though the files were completely and correctly tagged. The tag check used an old tool that cannot read the modern ID3v2.4 tag format, so it reported fully-tagged files as untagged and sent them to quarantine.

    While testing this, found something worse: the same old tool, when used elsewhere to write a single tag (like an artist fallback), would silently wipe out every other tag on an ID3v2.4 file, including title, album, genre, date, and cover art. Fixed the specific write path this touches. A few other spots in the pipeline still write tags the old way and carry the same risk against modern-tagged files; those are noted for a future release.

    Downloads
  • v0.6.14 Stable

    claude released this 2026-07-23 10:09:22 -06:00 | 1 commits to master since this release

    The Bandcamp sync could silently fail to import new purchases. It set a hardcoded PATH at startup that left out /opt/venv/bin, which is where beet lives in this image. Whenever the sync had a new purchase to bring in, the beet import step would fail with command not found, and the surrounding script logged the failure but still reported success. The purchase would sit on disk without ever entering your library or showing up in Navidrome. This was easy to miss because most daily syncs have nothing new to import, so the broken step rarely ran.

    Fixed the same PATH mistake in the monthly MP3-to-FLAC upgrade job, which also calls beet directly, and in the Telegram notifier for consistency (harmless there, but same mistake).

    Also moved the duplicate cleanup that runs after an import into the shared import script itself, so it now applies to every import, not just Bandcamp purchases. A manual import or a file dropped in over SMB that happens to match something already in your library no longer leaves a duplicate sitting there until you run the dedup review by hand.

    Downloads
  • 0.6.13 Stable

    andrew released this 2026-07-22 13:09:34 -06:00 | 2 commits to master since this release

    Fixed two weekly watermark-cleanup jobs that had been silently failing for a while: scrub-watermark-text crashed on every single run from a missing import, and strip-watermark-art kept losing its turn for the shared maintenance lock because it ran too soon after strip-mb-tags, whose runtime has been growing. strip-mb-tags now runs at 1am instead of 8:30am so the rest of the Sunday cleanup chain has room to actually finish.

    Also fixed the buy-link enrichment job silently reporting success even when writing the tag to disk failed (this was happening on a batch of files with the wrong file ownership); it now reports write failures honestly instead of claiming everything was tagged. The Qobuz token health check now tells a real CDN block apart from an actually expired token, since re-exporting the token does nothing for the former. And the dedup review table's "Caught by" badge no longer overflows into the next column on longer labels.

    Downloads
  • 0.6.12 Stable

    andrew released this 2026-07-22 10:15:27 -06:00 | 3 commits to master since this release

    Redesigned the dedup review page for faster, more accurate scanning. Each pending candidate now shows the song title up front so you can scan straight down the list, plus a color-coded FLAC/MP3 pill. The full file path for each side is now always visible as plain text underneath, not hidden behind a mouseover, so you can actually verify two files are the same recording before confirming a deletion rather than relying on the tags alone.

    Downloads
  • 0.6.11 Stable

    andrew released this 2026-07-22 09:50:55 -06:00 | 4 commits to master since this release

    Two more classes of dedup queue entry are resolved automatically now.

    A format-upgrade pair (a flac and an mp3 of the same song, confirmed by an exact tag match) no longer needs manual confirmation just because the two copies happen to sit in differently-cased folders. The case-insensitive and normalized tag passes already prove these are the same song, and flac always wins the ranking regardless of file size, so there is nothing left to decide. Cross-album fuzzy matches, where a different master or DJ-mix edit could share tags without being an interchangeable copy, still require confirmation as always.

    Separately, a pending queue entry could go stale without ever being confirmed, if something else (a later scan, an upgrade run, a manual fix) had already resolved one side of the pair. Nothing used to notice, so an already-fixed duplicate could sit in the queue indefinitely. Every scan now checks whether the files a pending entry references still exist, and clears it automatically if they do not.

    Downloads
  • 0.6.10 Stable

    andrew released this 2026-07-22 09:34:16 -06:00 | 5 commits to master since this release

    Identical numbered-sibling duplicates (the same file downloaded twice, sitting side by side as Title.mp3 and Title.1.mp3 in the same folder) no longer need manual confirmation in the dedup review queue. They are deleted automatically during every scan, both the manual Scan now button and the nightly scheduled job. Tag-based matches and cross-album fuzzy matches, where a wrong guess could remove a genuinely different version, still require confirmation as before.

    Downloads
  • v0.6.9 62251d764e

    0.6.9 Stable

    andrew released this 2026-07-16 11:51:55 -06:00 | 6 commits to master since this release

    Completes the July 8 path rewrite cleanup that 0.6.8 started. Three more scripts still assumed the old /music path prefix that beets stopped displaying after the rewrite, and each failed silently.

    replace-with-better.sh could not find any library file it matched, so the mp3 to flac upgrade flow stopped replacing MP3s in place. Instead it imported each fetched FLAC as a brand new track, leaving flac and mp3 twins side by side in the library for the dedup queue to catch. fix-track-metadata.py stopped finding beets entries after a retag, so it silently skipped the beet update and move steps. export-laptop-playlists.py filtered out every track and produced empty exports.

    All three now use the real paths beets displays, keeping the old /music form only as a fallback for stale entries.

    Downloads
  • v0.6.8 d756aab7fc

    0.6.8 Stable

    andrew released this 2026-07-16 09:23:53 -06:00 | 7 commits to master since this release

    Fixes the duplicate download flood from the night of July 15 to 16.

    sldl keeps a per-playlist index of what it already downloaded, and it places that index in a folder named after the input. Switching the input from a Spotify URL to a CSV file in 0.6.2 changed that folder name, so sldl started over with an empty index and re-downloaded every playlist in full. The index path is now pinned in the rendered config, and run-playlist.sh seeds the pinned index from any stranded ones (new helper: merge-sldl-indexes.py), so download history survives future input changes.

    Separately, the nightly dedup scan had been reporting zero duplicates since the July 8 path rewrite because it still translated beets paths using the old /music prefix. It now passes modern paths through unchanged, so the scan actually sees the library again. Run a dedup scan after upgrading to surface any duplicates that slipped in.

    Downloads
  • v0.6.7 24738d815f

    0.6.7 Stable

    andrew released this 2026-07-15 13:50:20 -06:00 | 8 commits to master since this release

    Removes the slskd line from the daily Telegram digest's Services section. slskd is not part of the alembic pipeline (sldl connects to Soulseek directly), so its reachability is not alembic's to report on. If you run slskd for your own file sharing it is unaffected; alembic simply no longer checks it.

    Upgrade: change the version in your docker-compose.yml, then docker compose pull alembic && docker compose up -d alembic.

    Downloads
  • v0.6.6 900bbff8aa

    0.6.6 Stable

    andrew released this 2026-07-15 13:44:26 -06:00 | 9 commits to master since this release

    Redesigns the daily Telegram digest (covers 0.6.5, which was never published as a release, plus the final formatting pass).

    The digest is now formatted for Telegram instead of raw monospace text: a branded header with hostname and date, a green/orange tally line, a callout up top saying either all clear or how many items need attention, bold section headers, and one line per check with a colored status dot. Rows are plain text that reflows on a phone screen, no more fixed-width columns wrapping mid-word. Long content is truncated safely so a very long report can never break the send.

    Also included:

    • Two digest sections ("added today" and "Library by format") had been silently empty since the in-app scheduler took over from cron, because the status script could not find the beet command. They show real numbers again.
    • The weekly cover-art watermark job no longer fails its entire run when reading one file stalls; it skips that file with a warning and carries on.
    • notify-telegram.sh keeps sending plain text for any other use; the digest opts into the new formatting explicitly.

    Upgrade: change the version in your docker-compose.yml, then docker compose pull alembic && docker compose up -d alembic.

    (Note: the v0.6.5 tag exists in the repo but had no release; everything it contained is described above and included here.)

    Downloads