Skip to content

htkhiem/euphonica

Repository files navigation

Euphonica icon

Euphonica

An MPD frontend with delusions of grandeur.

Features

  • 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
  • Built-in, customisable spectrum visualiser, reading from MPD FIFO or system PipeWire
  • Automatic accent colours based on album art (optional)
  • 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).
  • Automatically fetch album arts & artist avatars from external sources (currently supports Last.fm and MusicBrainz)
  • Album wikis & artist bios are supported too
  • All externally-acquired metadata are cached locally & persisted on disk to avoid needless API calls
  • Volume knob with dBFS readout support ('cuz why not?)
  • MPRIS support (can be disabled if you're running mpdris2 instead)
  • 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 :)

Screenshots

The below were captured with a mix of dark and light modes.

  • Album View1 album-view

  • UI at different sizes (v0.12+)1 mini-layouts-v2

  • Queue View1 queue-view

  • Artist bio as fetched from Last.fm123 artist-content-view

  • Album wiki as fetched from Last.fm12 album-content-view

  • Playlist Content View1 playlist-content-view

  • Some of the available UI customisations1 visualiser-customisation

Installation

Euphonica is still in very early development, and so far has only been tested on Arch Linux (btw).

I'm gearing up for AUR & Flathub releases, 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.

  1. Download the latest Flatpak manifest to an empty folder somewhere.
  2. 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
  1. Once the above has completed, you can run Euphonica using:
flatpak run io.github.htkhiem.Euphonica

A desktop should also have been installed for you, although it might take a reboot to show up.

Using Meson

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.

  1. Make sure you have these dependencies installed beforehand:
  • gtk4 >= 4.16

  • libadwaita >= 1.6

  • rustup >= 1.27

  • meson >= 1.5

  • gettext >= 0.23

  • mpd >= 0.21 (Euphonica relies on the new filter syntax)

    If you are on Arch Linux, gettext should have been installed as part of the base-devel metapackage, which also includes git (to clone this repo :) ).

  1. 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
  1. Compile & install (will require root privileges)
cd build
meson install

Setting up Euphonica with your MPD instance

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.

It currently only supports connecting to MPD via a TCP socket. Local socket support might be added later when the planned features require it.

Using Euphonica with your music library

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.
  • (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.

TODO

  • 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.
  • Special support for local socket connection, or remote filesystem access, to enable the following 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
  • Realtime lyrics fetching
  • An "All tracks" page with advanced, freeform querying to take full advantage of MPD v0.21+'s new query syntax

Footnotes

  1. Actual album arts have been replaced with random pictures from Pexels. All credits go to the original authors. 2 3 4 5 6 7

  2. Artist bios and album wikis are user-contributed and licensed by Last.fm under CC-BY-SA. 2

  3. The displayed image has been released into the public domain. More information at Wikimedia Commons.

About

An MPD client with delusions of grandeur, made with Rust, GTK and Libadwaita.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages