An MPD frontend with delusions of grandeur.
It exists to sate my need for something that's got the bling and the features to back that bling up.
- Responsive GTK4 LibAdwaita UI for most MPD features, from basic things like playback controls, queue reordering and ReplayGain to things like output control, crossfade and MixRamp configuration
- Automatically fetch album arts, artist avatars and (synced) song lyrics from external sources (currently supports Last.fm, MusicBrainz and LRCLIB). All externally-acquired metadata are cached locally & persisted on disk to avoid needless API calls.
- Built-in, customisable spectrum visualiser, reading from MPD FIFO or system PipeWire
- Automatic accent colours based on album art (optional)
- Integrated MPRIS client with background run supported. The background instance can be reopened via your shell's MPRIS applet, the "Background applications" section in GNOME's quick settings shade (if installed via Flatpak) or simply by launching Euphonica again.
- Rate albums (requires MPD 0.24+)
- Audio quality indicators (lossy, lossless, hi-res, DSD) for individual songs as well as albums & detailed format printout
- Browse your library by album, artist and folders with multiselection support
- Browsing by genre and other criteria are planned.
- Playlist browser and editor:
- Save current queue as playlist
- Create playlists from selected songs or append to existing ones
- Rename existing playlists + reorder or remove songs in them
- Sort albums by name, AlbumArtist or release date (provided you have the tags)
- Asynchronous search for large collections
- Configurable multi-artist tag syntax, works with anything you throw at it
- In other words, your artist tags can be pretty messy and Euphonica will still be able to correctly split them into individual artists.
- Performant album art fetching & display (cached with Stretto)
- Super-fast, multithreaded, statically-cached background blur powered by libblur's stack blur implementation.
- Completely independent of blur radius in terms of time complexity.
- Multithreaded, queued update logic never blocks UI and only runs when needed (once after window resizes, once every time album art changes, etc).
- Volume knob with dBFS readout support ('cuz why not?)
- User-friendly configuration UI & GSettings backend
- MPD passwords are securely stored in your user's login keyring
- Commands are bundled into lists for efficient MPD-side processing where possible.
- Written in Rust so my dumb code can still be quick :)
The below were captured with a mix of dark and light modes.
-
Recent View1
-
Album View1
-
UI at different sizes (v0.12+)1
-
Queue View1
-
Playlist Content View1
-
Settings GUI for pretty much everything1
Euphonica is still in very early development, and so far has only been tested on Arch Linux (btw).
An (admittedly experimental) AUR package is now available.
# Use your favourite AUR helper here
paru -S euphonica-git
The Nix package is kindly maintained by @paperdigits here.
# NixOS configuration
environment.systemPackages = [
pkgs.euphonica
];
# For standalone Nix, without flakes:
nix-env -iA nixpkgs.euphonica
# With flakes:
nix profile install nixpkgs#euphonica
I'm gearing up for a Flathub release, but before that happens, Euphonica must be built from source using flatpak-builder
.
This builds and installs Euphonica as a sandboxed Flatpak app on your system, complete with an entry in Flatpak-aware app stores (like GNOME Software, KDE Discover, etc). It should also work on virtually any distribution, and does not require root privileges.
- Add the Flathub repo in case you haven't already:
flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
- Download the latest Flatpak manifest from the releases section to an empty folder somewhere.
- Run
flatpak-builder
as follows:
cd /path/to/flatpak/manifest
flatpak-builder --force-clean --user --install-deps-from=flathub --repo=repo --install build-flatpak io.github.htkhiem.Euphonica.json
- Once the above has completed, you can run Euphonica using:
flatpak run io.github.htkhiem.Euphonica
A desktop icon entry should also have been installed for you, although it might take a reboot to show up.
This builds Euphonica against system library packages, then installs it directly into /usr/local/bin
.
It is the most lightweight option, but has only been tested on Arch Linux.
-
Make sure you have these dependencies installed beforehand: -
gtk4
>= 4.18 -libadwaita
>= 1.7 -meson
>= 1.5 -gettext
>= 0.23 -mpd
>= 0.24 (Euphonica relies on the new filter syntax and expanded tagging) -sqlite
(metadata store dependency) - Anxdg-desktop-portal
provider - The latest stable Rust toolchain. I highly recommend usingrustup
to manage them. Using it, you can install the latest stable toolchain usingrustup default stable
or update your existing one withrustup update
. Ensure thatrustc
andcargo
are of at least version1.88.0
.If you are on Arch Linux,
gettext
should have been installed as part of thebase-devel
metapackage, which also includesgit
(to clone this repo :) ). -
Init build folder
cd /path/to/where/to/clone/euphonica
git clone https://github.com/htkhiem/euphonica.git
cd euphonica
git submodule update --init
meson setup build --buildtype=release
- Compile & install (will require root privileges)
cd build
meson install
Euphonica works just like any other MPD client in this regard. Passwords will be saved to your default (usually login) keyring, so in case you have biometric login set up without also setting up TPM, you might need to manually unlock your login keyring before Euphonica can fetch its password back for reconnection.
Optionally, your MPD instance should be configured with a playlist folder. If not configured, MPD will be unable to create and edit playlists. Euphonica's playlist management features won't be available in this case.
Euphonica tries to make minimal and sensible assumptions about your library's folder structure.
- Tracks from different releases (albums) should not be put in the same folder. Preferably, all tracks of the same release should be put in the same folder.
- In order to make your album art files available to Euphonica (and other MPD clients), name them
cover.png/jpg/webp
and put them in the same folder as the tracks themselves.- From v0.95 onwards we also support embedded cover arts as fallback. The aforementioned cover image files will still take priority, so if you have an album with unique embedded art for each track and also a cover file, the cover file will override all the embedded art. To show the embedded arts instead, please remove the cover image from the folder (and the cached version in Euphonica's cache folder).
- (Optional) Use Beets to tag your tracks, or follow its tag schema, for best results when fetching album arts and artist avatars. Euphonica is developed with Beets tagging in mind and can take advantage of its MusicBrainz ID tags for accurate metadata fetching.
Most libraries, especially those that ran well with other MPD clients like Cantata, should require no reorganisation.
- Support more stickers-based features:
- Recently played
- Per-song ratings
- User-editable album wikis and artist bios
- Metadata sync between Euphonica instances (instead of being stored locally)
- Should follow existing sticker schemas, such as that proposed by myMPD, where possible.
- Local socket-exclusive features:
- Library management operations such as tag editing (will require access to the files themselves)
- Save downloaded album arts and artist avatars directly into the music folders themselves so other instances and clients can use them.
- Browse by genre
- An "All tracks" page with advanced, freeform querying to take full advantage of MPD v0.21+'s new query syntax
Footnotes
-
Actual album arts and artist images have been replaced with random pictures from Pexels. All credits go to the original authors. ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8
-
Artist bios and album wikis are user-contributed and licensed by Last.fm under CC-BY-SA. ↩ ↩2
-
The displayed image has been released into the public domain. More information at Wikimedia Commons. ↩