v0.0.3 — Library fuzzy-scan + mark-as-downloaded
Highlights
- Library fuzzy-scan — the Settings Scan Folder action now walks your existing
Artist/Album/collection and matches against the synced Qobuz/Tidal library. Exact matches (normalized artist+album + matching bit-depth) are auto-marked; ambiguous cases land in a three-section review slide-over. - Manual Mark as downloaded / Unmark button on the album detail panel — for when you know you have something but the scan can't make a clean match.
- Tidal quality selector now exposed in Settings. Backend already honored
tidal_quality; only the UI input was missing.
Schema
Schema v2 adds bit_depth, sample_rate, local_folder_path to albums. Existing v1 DBs migrate on first open with best-effort backfill from the legacy quality string.
Configuration
scan_sentinel_write_enabledtoggle in Settings — disable when pointing the scan at a read-only NFS/SMB mount.
Security
POST /api/library/albums/{id}/mark-downloadedvalidateslocal_folder_pathis inside the configureddownloads_path(400 otherwise)._find_album_foldersskips symlinked children so a symlink inside the downloads root can't escape it.
Quality
All 26 pre-existing ruff check errors cleaned up; ruff format applied across the repo. Both ruff CI steps green for the first time.
API additions
| Endpoint | Method | Description |
|---|---|---|
/api/library/scan-fuzzy |
POST | Start a background fuzzy-scan job. 409 if another scan is running. |
/api/library/scan-fuzzy/{job_id} |
GET | Poll job status. |
/api/library/albums/{id}/mark-downloaded |
POST | {local_folder_path?} — flip status, populate dedup DB, optional sentinel write. |
/api/library/albums/{id}/unmark-downloaded |
POST | Reverse the above. |
New WebSocket events: scan_progress, scan_complete, album_status_changed.
Docker
Images published to ghcr.io/arthursoares/libsync:v0.0.3 (and :latest, :0.0, :0). Upgrade path: bump the image tag, restart the container — the schema migration runs automatically on first start.