Skip to content

Releases: htkhiem/euphonica

Hotfix: neverending DB update screen on onboarding

Choose a tag to compare

@htkhiem htkhiem released this 28 Oct 13:40
2ad4e55

This adds a secondary mechanism to check whether MPD's DB update job has concluded. The first one doesn't fire if pointed at an empty folder (empty DB -> empty DB, nothing changes, no idle message).

It also adds a live(ish) discovered song count to that page, updated every 5s to avoid overloading MPD during DB update, so the page feels less frustrating to look at & can be debugged more easily.

Other changes

  • Experimental new sidebar, following libadwaita's newly standardised widget.
  • TheAudioDB provider (far better artist avatar hit rate!). Disabled by default. Enable with your API key then re-fetch metadata to get them.
  • A few other stuff pending a v1.0 release, to be announced later.

v0.99.8-beta: builtin MPD server orchestration capabilities

Choose a tag to compare

@htkhiem htkhiem released this 11 Oct 13:13
13334be

Standalone Mode

We can finally call ourselves a "music player" now, heh.

  • New: Builtin MPD server orchestration for a normal music player-like experience. This is achieved by running mpd as a subprocess with a managed configuration file and private state, DB and playlist paths. Connection to said subprocess is done via a managed Unix socket so as to avoid taking up any TCP port on your system. As long as you have mpd installed locally and in $PATH, Euphonica can borrow it. This does not hijack your existing systemd service. Euphonica only shares the executable and runs its own instance.
  • New: A (relatively) rich GUI-based MPD configurator for its own instance. Does not support import/export yet as we only implement a subset of the whole config language (many things are unnecessary for our intents and purposes).
  • Change: more pages added to the onboarding guide to help new users pick a mode (Standalone or Client).

You're invited to read the notes & view screenshots in #354 for more information.

Notes to package maintainers: Please add MPD as a dependency from now on, and spin off an MPD-less package with -client or some other suitable prefix (see Arch Linux precedent).

Notes to AUR users: If you've been using the euphonica package by supermario, you should be set. If you're using euphonica-git, the next update will install mpd. Should you want to keep it off your system (for example if you're exclusively connecting to a remote MPD server), please switch to euphonica-client-git.

Euphonica remains GPL3.0-licensed as it and MPD are still separate programmes communicating via a pipe (see the mere aggregation clause).

Visualiser

  • Change: Visualiser now uses asymmetric sliding-window averaging to capture transients better.
  • Fix: incorrect FIFO visualiser behaviour.

Other changes

  • Change: rotating artwork now uses trilinear filtering for a less noisy look.
  • Fix: lyrics deletion now works correctly.
  • Fix: a big memory leak on closing window in background mode. Long-lived Euphonica instances should no longer gobble up RAM now.
  • Fix: various console warnings regarding UI elements, might also fix crashes on Macs running Asahi Linux.

Pull Requests

Full Changelog: v0.99.7-beta-1...v0.99.8-beta

v0.99.7-beta-1

v0.99.7-beta-1 Pre-release
Pre-release

Choose a tag to compare

@htkhiem htkhiem released this 01 Sep 02:37
4353f79
  • Hotfix: force refresh album art in bar & pane on every track when embedded art loading optimisation is disabled for correctness.

Full Changelog: v0.99.7-beta...v0.99.7-beta-1

v0.99.7-beta: playlist cover images in sidebar + bugfixes

Choose a tag to compare

@htkhiem htkhiem released this 31 Aug 16:25
33b285d
  • New: playlist cover images are now shown in the sidebar.
  • Change: per-track embedded art downloading is back and enabled by default but heavily optimised. A new onboarding wizard will help you pick the right mode.
  • Change: editing album art, artist avatars and playlist covers will now propagate to the rest of the app instantly.
  • Fix: restore in-memory image cache codepath.
  • Fix: song-level stickers not loading, interfering with dynamic playlists.
  • Fix: stickers capability degrading to songs-only in presence of albums with insufficient tagging for sticker query.

Pull Requests

  • fix: handle cached image load failures correctly by @aaravrav in #345
  • Show playlist images in sidebar + hotfix song-level stickers not loading by @htkhiem in #348
  • Implement per-file cover downloading option + startup wizard by @htkhiem in #344
  • More proper implementation of embedded art priority by @htkhiem in #349

Full Changelog: v0.99.6-beta-1...v0.99.7-beta

Hotfixes

Hotfixes Pre-release
Pre-release

Choose a tag to compare

@htkhiem htkhiem released this 20 Aug 14:24
fa20ebf
  • Fix: make Linux named sockets platform-specific to restore BSD buildability.
  • Fix: album and artist grids not populating without stickers DB enabled.

v0.99.6-beta: new content views, metadata editing and backup, genre & tags filtering, etc

Choose a tag to compare

@htkhiem htkhiem released this 16 Aug 14:19
976dda0

It's been 2 months so this release is quite big.

Artist Grid

Per comments in #121 we'll now start using album arts in this view to make artists a wee bit easier to spot from a distance. To add a bit of bling, I've decided to arrange covers in a "fan of playing cards" manner:

image

New Album & Artist Content Views

Shows a lot more information + supports editing at last!

album-content-view image

Most significant is the new Discography subview in Artist Content View. Years can be collapsed for quicker browsing. There's also a toggle to initialise this view with all years collapsed by default.

image

Filtering by tags and genres

image

Metadata backups

Metadata is now automatically backed up to your MPD server as special stickers. Refer to #322 for more details.

Reopen-last-view or any view you like

Euphonica can now restore the last (outer) view you were in, or you can pick which view the app should open upon startup. Consult the UI tab in the Preferences dialog for this.

Other new features

  • Player Pane album art now spins :). @aaravrav put in some pretty elaborate logic ensures that the disc comes around to the top at the end of each track.
  • Now supports connecting to MPD via a named Unix socket (prefix with an '@' symbol). Thanks to @programmerlexi!
  • Lyrics re-fetch button in pop-over.
  • Radio stream names are now supported.

Refactors

  • Change: lazy image load and eager unload are now signals-based, way faster and also more correct.
  • Change: album cells now use raw albumartist tags and can fall back to raw artist tags too.
  • Change: desktop-facing window title now displays track - artist (looks better in GNOME Overview).
  • Change: massively sped up content loading thanks to many more operations being batched (using MPD command lists) and moved off the main thread.

Bugfixes

  • Fix: current lyric line centering now works cleanly and no longer yoinks focus from text entries. Also helps type-anywhere-to-search work more consistently.
  • Fix: no longer reconnecting endlessly upon malformed commands crashing connection.
  • Fix: earlier artist bio and album wikis leaking to subsequent albums and artists sometimes.
  • Fix: task count and spinner at top left not going away after tasks have ended.
  • Fix: lyric-less tracks (instrumental, symphonies, etc) no longer fetch lyrics after first try. Manually cleared lyrics won't be fetched again.
  • Fix: various queue-not-updating issues when using the Queue N Next feature.
  • Fix: various spacing issues in the bottom bar in different layouts.
  • Fix: album ratings not being populated.
  • Fix: Clear Queue not updating local queue state when playback mode is Stopped.
  • Fix: sidebar queue length sometimes not updating.
  • Fix: album content view multi-selection not working (regression since v0.99.5).
  • Fix: navigating to an Artist Content View from an Album Content View doesn't load albums.

Pull requests

New Contributors

Full Changelog: v0.99.5-beta...v0.99.6-beta

v0.99.5-beta: the multicore update

Pre-release

Choose a tag to compare

@htkhiem htkhiem released this 13 Jun 04:42
1a59728

Album & Artist Grid init speedup

TL;DR: if you run MPD on a remote server with a big library and have been waiting for >1min for the Album View to stop showing the giant spinner, you're in luck. I've sped it up to the point a 3,000-album test library takes ~3s to show up as the grid.

To display each album in the grid, we need to fetch its first track from MPD (to get things like albumartist, example URI for albumart, audio quality, etc). Previously Euphonica would send, per album, one find command that would resolve to all information about a single track, then one stickers command that would then fetch all of its stickers. For the above example, that meant 6,000 commands having to be sent and responded to.

This PR (and a new commit to my fork of rust-mpd) enabled multiple find commands to be executed in a command list. By batching 256 finds into one call, we massively reduced latency and improved network bandwidth utilisation at the same time.

Stickers, however, can't be batched that way (as not every album has a rating sticker, and querying the sticker for such an album would be an error and would halt the whole command list). I've instead deferred the stickers fetching, such that we'll now fetch the basic info first, display the grid, THEN fetch the stickers to fill in later.

The same optimisation has been applied to the Artist View too with similarly great uplifts.

Multi-core texture handling

Upon downloading an image, Euphonica must transcode it to RGB8 and perform 2 resizes to a hi-res version and a thumbnail version. On later reads from disk, each compressed file must also be decoded before going into VRAM. This is currently queued on a single CPU core. While this doesn't block the main UI thread, it causes other background tasks to backlog, so everything else takes more time to load.

This PR parallelises such operations using glib::ThreadPools. The threadpool size is configurable in the UI and defaults to 4, though if you have more CPU cores/threads it might be worth trying higher values.

This should somewhat speedup cold-start population of textures, as the population speed should now be solely bounded by your download speed and not single-core performance.

Note that external download operations, including from your MPD server, are still sequential to avoid clogging the server and/or getting banned.

Smarter visibility checks & LOD-like resolution progression

Viz check frequency has been reduced to every 50ms (~20fps), and all viz checks are now synchronised to a central clock.

When there is a >=10-task backlog in the background queue and if high-resolution album grid is enabled (by default), we'll fall back to thumbnails. Once said backlog is cleared, album cells currently visible on screen will then attempt to upgrade to high-resolution arts. Those once loaded at thumbnail resolution but no longer on screen (i.e. scrolled past) won't be upgraded. In other words, this reduces the number of high-resolution album arts having to be loaded with zero visual impact.

This enables textures to more quickly fill the album grid for already-downloaded cases.

Fixes

  • Reduced visibility check overhead when scrolling album grid (should be negligible now).
  • Keyring/Secret Service is now optional and won't cause errors when not present & your MPD server does not ask for a password (fix contributed by @catap).

Pull Requests

  • Use keyring only when MPD needs a password by @catap in #297
  • v0.99.5: Multi-core texture handling & time-to-album-grid reduction by @htkhiem in #300

New Contributors

Full Changelog: v0.99.4-beta...v0.99.5-beta

v0.99.4-beta: The RAM crisis update

Pre-release

Choose a tag to compare

@htkhiem htkhiem released this 24 May 02:26
6986eb0

New features

Image cache

  • New controls for maximum downloaded image size and format. Image format only affects size on disk, but image size affects both disk and RAM/VRAM usage.
  • Newly-downloaded images are now saved as lossy WebP instead of PNG. Lossless WebP is also offered for pixel peepers. In both cases we should see a reduction in the cache folder's size on disk as well as load/decode times.
  • Euphonica now downloads album arts only once per folder. If a folder has no cover.png/jpg/... file but the tracks therein have embedded art, the embedded art from the (usually) first track will be used for that whole folder.
  • New button in Preferences -> Library to empty the cached images folder. Useful for redownloading images after changing config, or to clean up the messy folder left by older Euphonica versions.
image

Keyboard shortcuts

This update brings many more keyboard shortcuts. Euphonica should now be somewhat usable with just the keyboard, but scrolling views is still scrollwheel-based for now.

The new shortcuts mostly mirror that of ncmpcpp (the one client that kickstarted my MPD journey), just with added modifier keys like Ctrl and Shift to work around the existing "type-to-search" feature, in which simply typing a letter would enter search mode, in line with other apps in the GNOME ecosystem.

Modifier keys were picked based on their English semantics. For example, actions involving moving things temporally or spatially, such as seeking, switching tracks or adjusting volume, will commonly have Shift as modifier (or one of the modifiers). Actions involving playback control will usually use Ctrl. Destructive actions, such as clearing the queue, will have more than one modifier.

For the full list of available keyboard shortcuts, please open the Keyboard Shortcuts dialog in the hamburger menu or hit Ctrl+? as usual. This dialog has also been updated to use the new libadwaita 1.8's shortcuts dialog. It's now searchable, and the shortcuts therein are grouped with quick filter-to-group toggle buttons.

image

RAM usage improvements

AlbumCells now actively track whether they are on-screen, lazily loads textures only when they're about to be shown on the screen, and eagerly unloads textures once off-screen. This sidesteps a longstanding issue with GTK GridViews keeping way more cells in memory than is necessary (once discussed in #99).

Will Euphonica's RAM usage drop? Most of the time, if you aren't scrolling from one end of the album grid to another repeatedly, the RAM usage should be halved. However, with enough scrolling, RAM usage will look inflated due to the textures being cached by both our LRU mechanism and GTK's inner workings. This is perfectly fine, and doesn't mean Euphonica needs that much RAM to function correctly.

As a nice little experiment, once can use cgroups to artificially limit the amount of memory Euphonica has access to:

# Soft-limits to 256MB and forces a crash at 512MB
systemd-run --user --scope \
  -p MemoryHigh=268435456 \
  -p MemoryMax=536870912 \
  euphonica

Euphonica would then try to only use that much memory. So far it hasn't crashed on my side.

Fixes

  • Fixed #285: broken image streams are now skipped.
  • Type-to-search now works correctly everywhere, as long as the current view has search functionality. Just start typing to search for an album while in Album View, for example. Previously these sometimes didn't work if their view widgets weren't in focus.
  • Volume knobs (in the bar and the pane) aren't synced together (#288)

Pull Requests

  • v0.99.4: the RAM crisis update (+ keyboard shortcuts) by @htkhiem in #286
  • Bump openssl from 0.10.78 to 0.10.80 by @dependabot[bot] in #292

Full Changelog: v0.99.3-beta...v0.99.4-beta

v0.99.3-beta: Drag and drop, queue search, UI redesigns, etc

Choose a tag to compare

@htkhiem htkhiem released this 02 May 13:59
bc8af72

New features

Drag-and-drop

Queue View and the (standard) Playlist Editor now supports drag-and-drop to reorder tracks.

Screencast.From.2026-04-25.23-12-37.mp4

UI

  • The seekbar, bottom bar and Now Playing pane have been redesigned to be more space-efficient, especially vertically, plus a few other optimisations.
  • Play/pause button is now pill-shaped & uses the suggested-action colouring.
  • "Go to pane" button is now the whole general area of the album art + title + artist texts. Clicking on them will lead to the Pane. Hovering on them will also highlight the clickable area just like a normal button. This further cuts down on visual clutter.
euphonica-next-ui-2

The seekbar has a slight Aero-esque glow animation to help make it look a little bit fuller than what the thin gradient would otherwise suggest. The entire area is clickable.

Screencast.From.2026-04-25.09-27-08.mp4
  • The volume knob now supports angular dragging, enabling it to be used on touchscreen devices. The scrolling method still works. It has also been restyled to be less in-your-face than the old one.
Screencast.From.2026-05-02.14-30-35.mp4

For the reasoning behind the above design changes, see #262. The README has been updated with fresh new screenshots too.

Other new features

  • Queue View now automatically jumps to the currently playing track. This behaviour can be disabled in Preferences -> UI -> Auto-scroll to currently playing.
  • Added filtering by title, artist or both in Queue View.
  • Added optional pause/stop/clear-queue action on quitting (defaults to doing nothing, i.e. existing behaviour).
    • "Stop" means to park the player & clear the "currently playing" index. This leaves the queue intact, but the next play will start again at the beginning.
    • "Stop & clear" will also clear the queue.
    • These actions are only triggered upon quitting the app. If background running is enabled, closing the window will not trigger them.

Performance optimisations

  • Significantly optimised the rendering steps for the spectrum visualiser. NVIDIA users should now see much better FPS with the visualiser visible.
  • Added an alternative render path to the visualiser. This path uses Cairo and in spite of being CPU-based it should be a good bit faster than the GSK codepath (which defaults to Vulkan), even after the above optimisations. This is temporarily the default renderer, and all existing installations will automatically switch to it. To force usage of the old GSK renderer, go to Preferences -> UI -> Show spectrum visualiser and untoggle the Use Cairo renderer option.

Bugfixes

  • Properly disconnect all notify signals upon widget disposal. This turned out to have fixed a memleak somewhere & Euphonica now no longer use increasingly more RAM upon every window reopening (from background mode).
  • Fix playing indicator not appearing in queue view until the first song change.
  • Change default multi-artist splitting phrases to avoid splitting artist names with "ft.".

Pull Requests

  • Fixed not being able to connect to mpd whitout a password when no secret service present by @viktor-boskovski in #267
  • Implement drag-and-drop for queue and playlist reordering by @htkhiem in #277
  • v0.99.3: Drag-n-drop, angular drag for volume knob, new player bar design & way better visualiser performance by @htkhiem in #262
  • Bump openssl from 0.10.75 to 0.10.78 by @dependabot[bot] in #273
  • Bump rustls-webpki from 0.103.8 to 0.103.13 by @dependabot[bot] in #283

New Contributors

Full Changelog: v0.99.2-beta...v0.99.3-beta

Trivia: as to why this sizeable update is still v0.99.x, I still have multiple issues to address before declaring a v1.0, namely browsing by genre, further UI changes, more features and info for Album Content View, etc.

v0.99.2-beta

v0.99.2-beta Pre-release
Pre-release

Choose a tag to compare

@htkhiem htkhiem released this 28 Mar 11:14
6252f9c
  • Fix: Queue View sometimes not refreshing.
  • Fix: Album ratings not being retrieved.
  • Fix: DP album rating filter rule not working correctly.
  • Fix: Force-light UI mode not remembered between starts.