An assignment is now an ordered list of albums (e.g. one vinyl compiling two EPs that are separate releases in the library). Albums move to their own table, with a migration for existing databases. The scan and lookup responses return an albums list instead of the single artist/album/uri fields. The tag page lists its albums with up, down and remove, and search results get an Add button.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Names can match near-duplicate library albums that differ only in capitals (Let the/The Tribe Increase), and Music Assistant picked the unplayable one. Assignments now store the album's library URI, scans return it after checking it's still in the library (re-finding it by name, exact spelling first, if not), and HA plays by it. sync-library (formerly fetch-covers) links existing assignments.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The jail can't reach Music Assistant's port 8095. MA_URL replaces the host of Music Assistant's image URLs when downloading. fetch-covers now stops at the first connection failure instead of stalling on every album, and image connections time out after 3 seconds.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Covers are stored with the assignment and served by the service, since Music Assistant's plain-http image URLs are blocked on an https page. Search results load covers through a signed /covers proxy. Adds a fetch-covers command for imported assignments, a migration for existing databases, and sorting assignments by artist, recently assigned or recently scanned, with both dates shown.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Serve htmx 2.0.4 from the package instead of the jsdelivr CDN. Add a Dockerfile for local testing. Cover images now sit in a styled placeholder box that stays visible when Music Assistant has no cover for an album.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>