Skip to content

v0.12.0

Choose a tag to compare

@temidaradev temidaradev released this 24 Jul 21:23
· 43 commits to master since this release
18a41a3

This release is about the library itself: local sources become plural and isolated, scanning stops blocking on artwork, and the settings page gets a top-to-bottom revision with real keyboard-navigable dropdowns.

Highlights

Isolated local libraries. You can now create multiple named local libraries, give each its own set of folders, and switch between them from the source switcher exactly like a media server. Under the hood this is a new Source::LocalLibrary(id) variant whose id carries a local: namespace so it can safely share the DB source column with server ids. The original music_directory stays as the built-in Local source for backwards compatibility, and is now presented alongside the new ones in a single unified Local Libraries settings section with add/switch/delete, name and folder validation (#550).

Scans finish first, artwork catches up. The foreground scan no longer decodes cover art at all (lofty parses with read_cover_art(false)), so a scan is pure metadata. That parsing is now spread across up to four blocking workers (chunked, minimum 100 files per worker, progress reported every 25 files) instead of serialized behind one mutex on the whole library, and merging scanned results into the library is hash-index based rather than a linear search per track, removing the quadratic behavior on large libraries. Covers are then indexed in a background task that opens one representative track per album, so artwork I/O scales with album count instead of track count; resolved covers are written straight to the DB via update_album_cover_if_not_manual, so a cover you picked yourself is never overwritten. Album ids gain the album artist (alb2_<len>_<artist>_<album>), so two same-titled albums by different artists no longer collide, and legacy alb_ albums only carry forward covers that were explicitly chosen (#554).

Artwork is yours as-is. Local artwork is now served as the original file bytes with the correct MIME type per extension (png, gif, webp, bmp, avif, svg, tiff, ico, jpeg) instead of always being resized to a 400 px JPEG. If you'd rather have it downscaled, a new Optimize Local Artwork toggle turns it back on with a chosen maximum size of 128 / 256 / 512 / 1024 px (JPEG quality raised 75 to 85, cache keyed by size). The separate HQ cache path is gone, as are the old "clear cover cache" and "force rescan photos" buttons, which the background indexer makes unnecessary (#554).

Settings, revised. Sections are collapsible with a chevron, rows are tighter with zebra striping and hover states, and subsection labels group related settings. Every native <select> is replaced by a custom AppSelect: arrow-key navigation, typeahead, scroll-into-view for the active option, and full combobox/listbox ARIA (#551).

Fixes

  • kopuz: the update banner no longer sits under the macOS traffic lights, getting left padding on macOS only (#548).

What's Changed

Full Changelog: v0.11.0...v0.12.0