Skip to content
Documentation
Project

Server — App and API

Missing studio albums

Cached discography gaps and reversible owner-private decisions.

GET /api/me/v1/missing reads trusted cached MusicBrainz discographies through the same aede-core::missing policy used by aede missing. Missing entries are attributed release groups, not local release editions: they have no playable tracks or physical folder. Only artists with principal albums are considered. Existing release-group IDs or normalized titles remove owned albums from the derived answer; the default profile includes studio albums only. Reading never fetches external data.

The authenticated owner's response accepts only offset, limit (1–200) and include_set_aside (boolean, default false). Each item has artist (native reference), artist_name, release_group (MusicBrainz UUID), title, nullable year, set_aside, source and url. The envelope retains ordinary items,total,offset,limit,scanned_at fields. include_set_aside=true also returns this owner's hidden missing suggestions so a client can restore them.

PUT /api/me/v1/missing accepts exactly {release_group:"UUID",set_aside:true|false}, with no query. A user or administrator can hide a current missing studio-album suggestion, or restore a decision; auditors are refused. The shared locked personal writer retains the current owner and preserves corrupt stores. Repeated identical writes are idempotent; at most 4096 decisions per owner are accepted. UUID selection cannot hide a different same-name album. No source record, audio file, tag or catalog release is removed. Source discography refresh and ordinary additions recompute missing status without stale stored missing flags.

The route is owner-private on both HTTP and authenticated HTTPS, advertised as missing_studio_albums in status. It never accepts an owner, path or external URL. Busy, corrupt, revoked and unavailable states follow the existing personal-route failures. A client should explain an absent capability before offering writes to an older server.

Cached cover art#

GET /api/me/v1/missing/cover?artist=artist:…&release_group=UUID reads a validated cached Cover Art Archive image only. POST on the same route, with the same two selectors and an empty body, explicitly acquires it when absent. A client may opt into automatic acquisition on entering a missing-album view; ordinary catalog GETs never reach an external service. Selection must still be a derived missing studio album of the named principal artist. Account authorization is checked before and after work. Auditors can read cached covers but cannot POST; owner, path, URL, size, unknown parameters and nonempty bodies are refused.

With the optional server fetch feature, status advertises missing_album_covers. Default CLI builds enable it; builds without fetch retain cache-only GET and refuse POST with 501. Each server shares one archive client with a one-second request interval; concurrent downloads fail explicitly as busy. Index and media bodies retain Aède's 32 MiB limit and 25-second request timeout. Only archive HTTPS image authorities are accepted. Complete JPEG/static PNG validation and 512-pixel rendering reuse the existing image pipeline. Images are stored under missing-coverartarchive/UUID/ in the data directory, never in music folders; existing images are reused and unreadable or symlinked cache targets are refused. This cache is disposable artwork, excluded from catalog and source-audio operations. Archive-negative answers are retained for 24 hours in bounded process memory, not represented as a fabricated picture.

Responses are image/jpeg or image/png with no-store, or 204 when the archive/cache has no front image. Busy/network/unreadable-image conditions return explicit 503 errors. External artwork attribution remains Cover Art Archive / MusicBrainz; no licence to the image is inferred. Image rights remain those of its rightsholder.

Curated CAA /release-group/{id}/front-500 acquisition now precedes JSON-index fallback, reducing the request count and avoiding index-storage failures. A missing/broken thumbnail can use the bounded original front. Legacy HTTP image addresses returned by the archive are upgraded to HTTPS only for the already-allowed archive authorities; foreign addresses remain refused. Images still undergo complete validation before separate cache publication.