Matching:
- Prefer the studio album over singles, EPs and compilations when a song
exists on several releases, including when the master also has the
single at the slave's exact folder.
- Ignore release labels (Single Version, Remastered, Explicit, Deluxe)
inside brackets or a trailing " - ..." part; "Clean" stays a version.
- Treat live/acoustic/remix/... album folders as different recordings;
the strict top-folder fallback now respects this too.
- Add a last-resort library-wide search that only accepts candidates whose
artist tag agrees with the slave file.
Linking:
- Cross-folder matches now mirror the master's path in the slave (e.g. a
single moves into the album folder) and prune the emptied folder; a
"keep in current folder" option preserves the old behaviour. Undo
recreates and prunes folders accordingly.
- Operations record the match kind and reason, so undo (and promotes that
rename the master file) restore the correct pairing instead of leaving
the file unmatched until the next scan.
UI: rewrite the approximate matching description with Avenged Sevenfold
examples and clear safeguards, and show where linking will place a file.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A per-pair "Approximate matching" setting adds a second pass for slave
files the strict rules could not place. It searches the same album with
disc folders (Disc 02, CD2, ...) ignored, then the top-level folder, and
scores titles by edit distance and word containment against a configurable
threshold (default 85%), with a small track-number bonus.
Guards against false matches: version words (live, remix, reprise,
instrumental, ...) must agree, near-tied candidates are left unmatched,
and approximate matches always go to manual review, never auto-link.
Each match records a human-readable reason.
Review now flags matches where the master copy is better as upgrades,
with an Upgrades filter and count and an "Upgrade to master copy" action.
The redundant "master is lossless" warning note is dropped.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The two libraries are now "master" and "slave" everywhere: UI text, API
JSON fields (master_root, rel_master, master_size, ...), Go identifiers,
database columns, quality verdicts, quarantine subfolders and docs.
Existing databases are upgraded by a new migration that renames the
columns in place and rewrites stored "host" values, so pairs, history,
cached verdicts and restorable quarantine entries carry over. Network
"host" usages (SplitHostPort, the Origin/Host check) are unchanged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Go backend (chi, SQLite) with an embedded React/TypeScript UI that finds
songs present in both a host and a slave music library and replaces the
slave copy with a hardlink to the host copy.
- Path-first matching with format/title/album-folder fallbacks
- Auto-linking of byte-identical files, re-verified with cmp before linking
- Manual review with ffprobe quality comparison, downgrade guard and
promote-to-host override
- Build mode to populate an empty slave library from the host
- Dry run by default, atomic stage+rename replacement, quarantine with
retention, undo, path confinement and authenticated UI
- Dockerfile and compose file for Unraid
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>