No description
  • C++ 68.9%
  • QML 26.5%
  • CMake 2.6%
  • Shell 1%
  • Python 1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-06-25 12:33:14 -07:00
.qtcreator Add PROJECT M: continue 2026-02-06 21:29:46 -08:00
img resize screenshots 2026-02-01 22:45:47 -08:00
presets/visualizerGradients FIX: Artists should be sorted by their sort name. 2026-02-16 16:00:57 -08:00
qml cleanup: remove projectM integration, drop redundant .qrc QML entries, fix formatting 2026-06-25 11:49:49 -07:00
resources cleanup: remove projectM integration, drop redundant .qrc QML entries, fix formatting 2026-06-25 11:49:49 -07:00
src fix: add missing includes after umbrella header cleanup 2026-06-25 12:13:30 -07:00
vendor update gist to latest commit 2026-02-17 19:02:51 -08:00
.clang-format update git files in prep 2026-02-10 02:43:45 -08:00
.clang-tidy code tidying 2026-02-01 20:04:51 -08:00
.gitignore feat: Add macOS compatibility and upgrade to C++23 2026-02-11 13:37:51 -08:00
.gitmodules FIX: Artists should be sorted by their sort name. 2026-02-16 16:00:57 -08:00
CMakeLists.txt bump version to 0.2.0 2026-06-25 12:31:46 -07:00
compile_commands.json feat: add ProjectM visualizer and FFTW audio support to build 2026-02-21 17:23:01 -08:00
generate-xcode-project.sh feat: Add macOS compatibility support with bundle installation and CoreAudio input 2026-02-11 16:12:36 -08:00
install-macos.sh feat: Add macOS compatibility support with bundle installation and CoreAudio input 2026-02-11 16:12:36 -08:00
LICENSE messing with the visualizer and contents 2026-02-01 19:10:14 -08:00
README.md cleanup: remove projectM integration, drop redundant .qrc QML entries, fix formatting 2026-06-25 11:49:49 -07:00
setup_mpd.py refactor: Add statistics module, improve Last.fm auth UI, and fix Apple audio handling 2026-02-11 14:47:12 -08:00
Stable.qmlproject.qtds Add PROJECT M 2026-02-06 21:28:34 -08:00

Quester License

A modern, visually rich MPD and Mopidy client built with Qt 6 and QML

Table of Contents

About

Quester is a desktop client for the Music Player Daemon (MPD) and Mopidy. It provides a fluid user interface focused on album art and visual feedback. Built using C++ and Qt Quick (QML), it aims to offer a lightweight yet visually appealing way to browse and play your music library.

Features

  • Album Browser: Cover-flow style navigation and Grid View for your music library.
  • Dual Visualizers:
    • Spectrum Analyzer: Custom bar visualizer using FFTW with customizable color presets.
  • MPRIS Support: Full D-Bus integration for control via system media keys, desktop widgets, and multimedia keyboards.
  • Multiple Audio Sources: Support for PulseAudio, PipeWire, FIFO (MPD/Mopidy audio output), and macOS CoreAudio.
  • Automatic Artwork: Fetches album art from MPD/Mopidy (embedded/local), TheAudioDB, or Last.fm.
  • Playback Control: Standard controls (Play, Pause, Next, Previous) and seek bar.
  • Queue Management: Manage your play queue and playlists easily.
  • Statistics Tracking: Track your listening habits with weekly, monthly, yearly, and all-time stats.
  • Scrobbling: Submit plays to ListenBrainz and Last.fm.
  • Wrapped Feature: Generate year-in-review style summaries of your listening history.
  • Duplicate Finder: Find and remove duplicate files in your music library.
  • System Tray: Minimize to system tray with playback controls.
  • Touch Ready: UI elements sized and spaced for touch interaction.

Screenshot Screenshot

Prerequisites

To build Quester, you need the following dependencies installed on your system:

  • C++ Compiler (supporting C++23)
  • CMake (3.16 or higher)
  • Qt 6 (6.5 or higher)
  • KDE Frameworks 6 (Kirigami)
  • libmpdclient
  • FFTW3 (optional, Kiss FFT is used as fallback on Linux)
  • PulseAudio (libpulse)
  • PipeWire (libpipewire-0.3, libspa-0.2)

Ubuntu/Debian

sudo apt install build-essential cmake \
    qt6-base-dev qt6-declarative-dev qt6-multimedia-dev qt6-sql-dev qt6-xml-dev \
    libmpdclient-dev libfftw3-dev libpulse-dev \
    libpipewire-0.3-dev libspa-0.2-dev \
    kirigami2-dev libkirigami-dev extra-cmake-modules

Note: projectM is included as a git submodule and does not need to be installed separately.

Installation

  1. Clone the repository and initialize submodules:

    git clone https://codeberg.org/anoraktrend/Quester.git
    cd Quester
    git submodule update --init --recursive
    
  2. Create a build directory and configure with CMake:

    mkdir build
    cd build
    cmake ..
    
  3. Build the application:

    make
    
  4. (Optional) Install system-wide:

    sudo make install
    

Usage

Ensure your MPD server is running. By default, Quester attempts to connect to localhost on port 6600. You can change these settings in the General tab of the Settings window.

Run the application from the build directory:

./quester

Mopidy Support

Quester fully supports Mopidy through its MPD extension. Mopidy allows you to play music from various sources like Spotify, SoundCloud, TuneIn, and your local library.

Setup

To set up Mopidy for use with Quester, you can use the provided setup script:

python3 setup_mopidy.py

This script will:

  1. Install Mopidy and required extensions for your platform.
  2. Create a default configuration at ~/.config/mopidy/mopidy.conf.
  3. Configure the MPD extension on port 6600.
  4. Set up the audio output to use a FIFO pipe (/tmp/mpd.fifo) so the Quester visualizer works correctly.

Configuration

In Quester's Settings > General, ensure the host and port match your Mopidy server (default is 127.0.0.1 and 6600).

Visualizer Configuration

Bar Visualizer Presets

Quester allows you to customize the bar visualizer colors by creating preset files. To add your own presets, create a directory named presets inside your Quester config folder (e.g., ~/.config/Quester/presets/) and add a .json file there.

JSON Structure:

The JSON file should contain a single root object where keys are preset names and values are color definitions.

Simple Color List (Gradient):

{
  "Rainbow": ["#E50000", "#FF8D00", "#FFEE00", "#028121", "#004CFF", "#770088"]
}

Weighted Gradients:

{
   "Uneven": {
      "colors": ["#FF0000", "#00FF00", "#0000FF"],
      "weights": [1, 4, 1]
   }
}

projectM

Quester supports projectM visualizations. You can configure the preset path, texture size, and other rendering settings in the application settings dialog.

Statistics & Scrobbling

Quester includes built-in statistics tracking and supports scrobbling to multiple services.

Statistics Tracking

Quester automatically tracks your listening habits and stores them locally in a SQLite database. View your statistics in the app:

  • Weekly: Most played artists, albums, and songs from the past 7 days
  • Monthly: Listening statistics for the current month
  • Yearly: Year-to-date statistics
  • All Time: Complete listening history since you started using Quester

Wrapped Feature

At the end of each year, Quester can generate a "Wrapped" summary - a visual recap of your listening habits including:

  • Top artists, albums, and songs
  • Total listening time
  • Activity graphs showing when you listen to music
  • Album art collages

ListenBrainz Integration

Quester can submit your plays to ListenBrainz, a free and open-source music tracking service.

  1. Go to Settings → Statistics
  2. Enter your ListenBrainz token (get it from your ListenBrainz profile)
  3. Enable automatic submissions

Last.fm Integration

Quester supports scrobbling to Last.fm:

  1. Go to Settings → Statistics
  2. Click "Connect to Last.fm"
  3. Authorize Quester to access your account
  4. Your plays will be automatically submitted

Contributing

Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

License

Distributed under the MIT License. See LICENSE for more information.