From the collection
Conservatory
Conservatory owns the music, podcast, and audiobook files on disk and renders them through a foobar2000 Columns UI browse surface; playback runs on a libmpv engine that carries all three media types from one queue. The design brief is Calibre for audio.
It absorbed the Belfry podcast client, converging that engine and triage model with a faceted music browser. The database is truth; the on-disk tree is a rendered template; moving an album re-renders the filesystem. The surface is a Calibre-shaped search expression language powered by vir-search, multi-select bulk actions, and embedded-tag write-back so files stay portable. The headless manager imports, resolves, and crash-safely moves files with a full undo journal and roll-forward recovery; the GTK app stands up the deadbeef Columns UI faceted browse (configurable columns and facet panes), a sortable track list, saved Perspectives, the unified play queue with drag-reorder, shuffle and repeat, and a libmpv player carrying ReplayGain, a 10-band graphic EQ, a DSP rack (compressor, limiter, leveler), a real-time spectrum visualiser, a Now-bar transport, and a Preferences window over a real config file. All three media types are in: music, podcasts, and audiobooks browse and play from the one queue, and it holds up as a daily driver, down to gapless album transitions (the next track is prefetched across mpv’s decoder boundary so the seam never reaches the speakers). A CLI health suite audits integrity, duplicates, tags, and cover art, strips stray APE tags, and imports and exports .m3u. Built concurrently with Atrium under hard phasing; Belfry was retired at podcast parity (v0.0.52) and its subsystem now lives here whole. The v0.3.x line took the app tiling-first (libadwaita is gone; the same feature set runs on plain GTK4 under a flat Kanagawa Dragon stylesheet provided by vir-gtk), turned the seek slider into the track’s real loudness-envelope waveform, and grew a full scrobbler: Last.fm and ListenBrainz, now-playing included, through an offline-safe outbox, off by default. The 1.0 gate ran against a working copy of the real library, and the hands-on pass it forced settled the last design arguments: double-click plays, shuffle is engine-authoritative so a stale UI snapshot cannot silently skip a reorder, and cover decodes moved into a budgeted idle queue so a cold facet no longer stalls the browse.