{"id":25307512,"url":"https://github.com/htkhiem/euphonica","last_synced_at":"2025-10-28T12:30:30.582Z","repository":{"id":261258476,"uuid":"815783368","full_name":"htkhiem/euphonica","owner":"htkhiem","description":"An MPD client with delusions of grandeur, made with Rust, GTK and Libadwaita.","archived":false,"fork":false,"pushed_at":"2025-02-06T13:38:35.000Z","size":3648,"stargazers_count":5,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-06T14:34:18.192Z","etag":null,"topics":["audio-visualizer","gnome","gtk4","libadwaita","libadwaita-rs","mpd","mpd-client","music","music-player","rust","spectrum-visualizer"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/htkhiem.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-16T06:21:04.000Z","updated_at":"2025-02-06T13:38:34.000Z","dependencies_parsed_at":"2025-01-09T15:31:21.548Z","dependency_job_id":"565fcd11-6d30-495f-b4d8-767b9850b696","html_url":"https://github.com/htkhiem/euphonica","commit_stats":null,"previous_names":["htkhiem/euphonia","htkhiem/euphonica"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/htkhiem%2Feuphonica","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/htkhiem%2Feuphonica/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/htkhiem%2Feuphonica/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/htkhiem%2Feuphonica/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/htkhiem","download_url":"https://codeload.github.com/htkhiem/euphonica/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238648495,"owners_count":19507426,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audio-visualizer","gnome","gtk4","libadwaita","libadwaita-rs","mpd","mpd-client","music","music-player","rust","spectrum-visualizer"],"created_at":"2025-02-13T11:35:16.329Z","updated_at":"2025-10-28T12:30:30.572Z","avatar_url":"https://github.com/htkhiem.png","language":"Rust","funding_links":[],"categories":["Audio","Rust"],"sub_categories":["Audio Players"],"readme":"![Euphonica icon](data/icons/hicolor/scalable/apps/io.github.htkhiem.Euphonica.svg)\n# Euphonica\n\n[![Flathub Downloads](https://img.shields.io/flathub/downloads/io.github.htkhiem.Euphonica?style=flat-square\u0026logo=flathub)](https://flathub.org/en/apps/io.github.htkhiem.Euphonica)\n\nAn MPD frontend with delusions of grandeur. \n\nIt exists to sate my need for something that's got the bling and the features to back that bling up.\n\n## Features\n- 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\n- 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 \u0026 persisted on disk to avoid needless API calls.\n- Built-in, customisable spectrum visualiser, reading from MPD FIFO or system PipeWire\n- Automatic accent colours based on album art (optional)\n- 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.\n- Rate albums (requires MPD 0.24+)\n- Audio quality indicators (lossy, lossless, hi-res, DSD) for individual songs as well as albums \u0026 detailed format printout\n- Browse your library by album, artist and folders with multiselection support\n  - Browsing by genre and other criteria are planned.\n- Playlist browser and editor:\n  - Save current queue as playlist\n  - Create playlists from selected songs or append to existing ones\n  - Rename existing playlists + reorder or remove songs in them\n- Sort albums by name, AlbumArtist or release date (provided you have the tags)\n- Asynchronous search for large collections\n- Configurable multi-artist tag syntax, works with anything you throw at it\n  - In other words, your artist tags can be pretty messy and Euphonica will still be able to correctly split them into individual artists.\n- Performant album art fetching \u0026 display (cached with Stretto)\n- Super-fast, **multithreaded**, **statically-cached** background blur powered by [libblur](https://github.com/awxkee/libblur)'s stack blur implementation.\n  - Completely independent of blur radius in terms of time complexity.\n  - Multithreaded, queued update logic never blocks UI and **only runs when needed** (once _after_ window resizes, once every time album art changes, etc). \n- Volume knob with dBFS readout support ('cuz why not?)\n- User-friendly configuration UI \u0026 GSettings backend\n- MPD passwords are securely stored in your user's login keyring\n- Commands are bundled into lists for efficient MPD-side processing where possible.\n- Written in Rust so my dumb code can still be quick :)\n\n## Screenshots\n\nThe below were captured with a mix of dark and light modes.\n\n- Recent View[^1]\n  \u003cimg width=\"1122\" height=\"822\" alt=\"Screenshot From 2025-07-23 20-36-09\" src=\"https://github.com/user-attachments/assets/026e0fcf-2988-4b26-8407-4d29e03b99e5\" /\u003e\n\n- Album View[^1]\n  \u003cimg width=\"1122\" height=\"822\" alt=\"Screenshot From 2025-07-23 20-49-49\" src=\"https://github.com/user-attachments/assets/df429e18-fba2-421a-b114-3dd40dbb0c0c\" /\u003e\n\n- UI at different sizes (v0.12+)[^1]\n  ![mini-layouts-v2](https://github.com/user-attachments/assets/b41f5b50-013f-4c3e-952c-4e858f4cc1fa)\n\n- Queue View[^1]\n  ![queue-view](https://github.com/user-attachments/assets/b4d213db-13c0-4a33-85b6-cdf227c93d61)\n\n- Visualiser \u0026 synced lyrics in action\n  ![lyrics-animation](https://github.com/user-attachments/assets/1de89a90-90bd-4aa2-9775-5c1845d4dcf4)\n  \n- Artist bio as fetched from Last.fm[^1][^2][^3]\n  ![artist-content-view](https://github.com/user-attachments/assets/54161399-1f16-490f-91b9-89b581b28839)\n\n- Album wiki as fetched from Last.fm[^1][^2]\n  \u003cimg width=\"1122\" height=\"822\" alt=\"Screenshot From 2025-07-23 20-46-02\" src=\"https://github.com/user-attachments/assets/6b030124-7c46-4ac5-8558-d323d3a40d12\" /\u003e\n  \n- Playlist Content View[^1]\n  ![playlist-content-view](https://github.com/user-attachments/assets/be9913e7-2378-4374-9a8a-d08512fc1e09)\n  \n- Settings GUI for pretty much everything[^1]\n  ![visualiser-customisation](https://github.com/user-attachments/assets/baed1ece-be17-4f39-81b3-df17e1460417)\n  ![image](https://github.com/user-attachments/assets/f1277d5c-d0c4-40c0-81e2-201c581d4e44)\n\n\n[^1]: Actual album arts and artist images have been replaced with random pictures from [Pexels](https://www.pexels.com/). All credits go to the original authors.\n[^2]: Artist bios and album wikis are user-contributed and licensed by Last.fm under CC-BY-SA.\n[^3]: The displayed image has been released into the public domain. More information at [Wikimedia Commons](https://commons.wikimedia.org/wiki/File:Johann_Sebastian_Bach.jpg).\n\n## Installation\n\nEuphonica is still in very early development, and so far has only been tested on Arch Linux (btw).\n\nThe preferred way to install Euphonica is as a Flatpak app via Flathub:\n\n\u003ca href='https://flathub.org/apps/io.github.htkhiem.Euphonica'\u003e\n    \u003cimg width='240' alt='Get it on Flathub' src='https://flathub.org/api/badge?locale=en'/\u003e\n\u003c/a\u003e\n\nOther ways to install Euphonica are listed below:\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ch3\u003eArch Linux\u003c/h3\u003e\u003c/summary\u003e\n  \n  An (admittedly experimental) AUR package is [now available](https://aur.archlinux.org/packages/euphonica-git).\n\n  ```bash\n  # Use your favourite AUR helper here\n  paru -S euphonica-git\n  ```\n  \n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ch3\u003eNixpkgs\u003c/h3\u003e\u003c/summary\u003e\n\n  The Nix package is kindly maintained by [@paperdigits](https://github.com/paperdigits) [here](https://search.nixos.org/packages?channel=unstable\u0026show=euphonica\u0026from=0\u0026size=50\u0026sort=relevance\u0026type=packages).\n\n  ```bash\n  # NixOS configuration\n  environment.systemPackages = [\n    pkgs.euphonica\n  ];\n  \n  # For standalone Nix, without flakes:\n  nix-env -iA nixpkgs.euphonica\n  # With flakes:\n  nix profile install nixpkgs#euphonica\n  ```\n\u003c/details\u003e\n\n## Set-up\n\nEuphonica requires some preparation before it can be used, especially if you have never used an MPD client before. Please see the [wiki article](https://github.com/htkhiem/euphonica/wiki/Installation-\u0026-basic-local-configuration) for instructions on setting up a basic local instance.\n\n## Build\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ch3\u003eFlatpak\u003c/h3\u003e\u003c/summary\u003e\n\n  Euphonica can also be built from source using `flatpak-builder`.\n  \n  This builds and installs Euphonica as a sandboxed Flatpak app on your system, complete with an entry in \n  Flatpak-aware app stores (like GNOME Software, KDE Discover, etc). It should also work on virtually any \n  distribution, and does not require root privileges. Unlike installing from Flathub, this always builds\n  the **latest** commit and as such is more suitable for development and testing purposes. Also, it might\n  **overwrite** the existing Flathub-distributed installation in case you have one.\n  \n  1. Add the Flathub repo in case you haven't already:\n     \n  ```bash\n  flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo\n  ```\n  2. Run `flatpak-builder` as follows:\n     \n  ```bash\n  cd /path/to/where/you/cloned/euphonica\n  flatpak-builder --force-clean --user --install-deps-from=flathub --repo=repo --install build-flatpak io.github.htkhiem.Euphonica-dev.json\n  ```\n  3. Once the above has completed, you can run Euphonica using:\n  \n  ```bash\n  flatpak run io.github.htkhiem.Euphonica\n  ```\n  \n  \n  A desktop icon entry should also have been installed for you, although it might take a reboot to show up.\n  \n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ch3\u003eMeson\u003c/h3\u003e\u003c/summary\u003e\n\n  This builds Euphonica against system library packages, then installs it directly into `/usr/local/bin`.\n  It is the most lightweight option, but has only been tested on Arch Linux.\n  \n  1. Make sure you have these dependencies installed beforehand:\n    - `gtk4` \u003e= 4.18\n    - `libadwaita` \u003e= 1.7\n    - `meson` \u003e= 1.5\n    - `gettext` \u003e= 0.23\n    - `mpd` \u003e= 0.24 (Euphonica relies on the new filter syntax and expanded tagging)\n    - `sqlite` (metadata store dependency)\n    - An `xdg-desktop-portal` provider\n    - The latest stable Rust toolchain. I highly recommend using `rustup` to manage them. Using it, you can install the latest stable toolchain using `rustup default stable` or update your existing one with `rustup update`. Ensure that `rustc` and `cargo` are of at least version `1.88.0`.\n    \n      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 :) ).\n  \n  2. Init build folder\n   \n  ```bash\n  cd /path/to/where/to/clone/euphonica\n  git clone https://github.com/htkhiem/euphonica.git\n  cd euphonica\n  git submodule update --init\n  meson setup build --buildtype=release\n  ```\n\n  3. Compile \u0026 install (will require root privileges)\n     \n  ```bash\n  cd build\n  meson install\n  ```\n\u003c/details\u003e\n\n## TODO\n- Support more stickers-based features:\n  - Recently played\n  - Per-song ratings\n  - User-editable album wikis and artist bios\n  - Metadata sync between Euphonica instances (instead of being stored locally)\n  - Should follow existing sticker schemas, such as that proposed by myMPD, where possible.\n- Local socket-exclusive features:\n  - Library management operations such as tag editing (will require access to the files themselves)\n  - Save downloaded album arts and artist avatars directly into the music folders themselves so other instances\n    and clients can use them.\n- Browse by genre\n- An \"All tracks\" page with advanced, freeform querying to take full advantage of MPD v0.21+'s new query syntax\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhtkhiem%2Feuphonica","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhtkhiem%2Feuphonica","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhtkhiem%2Feuphonica/lists"}