{"id":14069391,"url":"https://github.com/doctorfree/MusicPlayerPlus","last_synced_at":"2025-07-30T05:32:20.715Z","repository":{"id":41358558,"uuid":"473733478","full_name":"doctorfree/MusicPlayerPlus","owner":"doctorfree","description":"Featureful ncurses based MPD client inspired by ncmpc with integration for Beets, spectrum visualization,Bandcamp/Soundcloud, asciimatics, cantata, and more","archived":false,"fork":false,"pushed_at":"2024-07-15T15:21:32.000Z","size":177079,"stargazers_count":80,"open_issues_count":0,"forks_count":1,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-12-04T10:39:46.425Z","etag":null,"topics":["ascii-art","audio","audio-player","audio-visualizer","beets","console","cool-retro-term","retro","tui"],"latest_commit_sha":null,"homepage":"https://musicplayerplus.dev","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"ncmpcpp/ncmpcpp","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/doctorfree.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"docs/contributing.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"doctorfree"}},"created_at":"2022-03-24T18:47:13.000Z","updated_at":"2024-11-24T22:56:13.000Z","dependencies_parsed_at":"2024-06-11T02:39:30.050Z","dependency_job_id":"cd7c0b54-7f26-4d63-bc82-42086883f4df","html_url":"https://github.com/doctorfree/MusicPlayerPlus","commit_stats":null,"previous_names":[],"tags_count":73,"template":false,"template_full_name":null,"purl":"pkg:github/doctorfree/MusicPlayerPlus","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doctorfree%2FMusicPlayerPlus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doctorfree%2FMusicPlayerPlus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doctorfree%2FMusicPlayerPlus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doctorfree%2FMusicPlayerPlus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/doctorfree","download_url":"https://codeload.github.com/doctorfree/MusicPlayerPlus/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doctorfree%2FMusicPlayerPlus/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267815187,"owners_count":24148356,"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","status":"online","status_checked_at":"2025-07-30T02:00:09.044Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["ascii-art","audio","audio-player","audio-visualizer","beets","console","cool-retro-term","retro","tui"],"created_at":"2024-08-13T07:06:55.289Z","updated_at":"2025-07-30T05:32:15.699Z","avatar_url":"https://github.com/doctorfree.png","language":"Shell","funding_links":["https://github.com/sponsors/doctorfree"],"categories":["Shell","\u003ca name=\"music\"\u003e\u003c/a\u003eSound and music"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/wiki/doctorfree/MusicPlayerPlus/img/musicplayerplus.png\" style=\"width:800px;height:140px;\"\u003e\n\u003c/div\u003e\n\nMusicPlayerPlus is a character-based console and terminal window music player\n- ***plus*** Beets media library management with preconfigured plugins\n- ***plus*** Character-based spectrum visualizer `mppcava`\n- ***plus*** Music Player Daemon and ALSA configuration management\n- ***plus*** Mopidy Music Server with preconfigured extensions\n- ***plus*** Navidrome Music Server/Streamer automated install/config/service\n- ***plus*** Spotify and YouTube Music players\n- ***plus*** Bliss acoustic analysis and song similarity database\n- ***plus*** Essentia acoustic analysis and metadata extraction\n- ***plus*** YAMS MPD Last.fm scrobbler running as a service\n- ***plus*** Media fuzzy finder using `fzf`\n- ***plus*** Album cover art download\n- ***plus*** Bandcamp collections download\n- ***plus*** Soundcloud favorites download\n- ***plus*** Discogs user collection to markdown generator\n- ***plus*** Automated setup, import and organization, metadata, playlists, ...\n\n## Table of contents\n\n1. [Overview](#overview)\n    1. [Requirements](#requirements)\n    1. [MusicPlayerPlus Commands](#musicplayerplus-commands)\n1. [Quickstart](#quickstart)\n    1. [Quickstart summary](#quickstart-summary)\n    1. [Full Tilt Boogie](#full-tilt-boogie)\n1. [Installation](#installation)\n    1. [Supported platforms](#supported-platforms)\n    1. [Debian package installation](#debian-package-installation)\n    1. [RPM Package installation](#rpm-package-installation)\n    1. [Arch Package installation](#arch-package-installation)\n1. [Post Installation Configuration](#post-installation-configuration)\n    1. [Client Configuration (required)](#client-configuration-required)\n    1. [MusicPlayerPlus Configuration File](#musicplayerplus-configuration-file)\n    1. [MPD Music Directory Configuration](#mpd-music-directory-configuration)\n    1. [Initializing the Beets media library management system](#initializing-the-beets-media-library-management-system)\n    1. [Additional metadata analysis and retrieval](#additional-metadata-analysis-and-retrieval)\n        1. [Acoustic analysis with Blissify](#acoustic-analysis-with-blissify)\n        1. [Acoustic analysis with Essentia](#acoustic-analysis-with-essentia)\n        1. [Acoustic retrieval with AcousticBrainz](#acoustic-retrieval-with-acousticbrainz)\n    1. [Activating the YAMS scrobbler for Last.fm](#activating-the-yams-scrobbler-for-lastfm)\n    1. [MPD Audio Output Configuration](#mpd-audio-output-configuration)\n    1. [Fuzzy Finder Configuration](#fuzzy-finder-configuration)\n    1. [Start MPD](#start-mpd)\n    1. [System verification checks](#system-verification-checks)\n    1. [Initialize Music Database](#initialize-music-database)\n    1. [Installing Mopidy](#installing-mopidy)\n    1. [Installing Navidrome](#installing-navidrome)\n        1. [Navidrome clients](#navidrome-clients)\n    1. [Spotify and YouTube Music players](#spotify-and-youtube-music-players)\n    1. [Terminal Emulator Support](#terminal-emulator-support)\n    1. [Discogs User Collection](#discogs-user-collection)\n1. [MusicPlayerPlus Services and Clients](#musicplayerplus-services-and-clients)\n    1. [Services](#services)\n    1. [Which services should be installed and activated](#which-services-should-be-installed-and-activated)\n    1. [Clients](#clients)\n1. [Documentation](#documentation)\n    1. [README for MusicPlayerPlus configuration](#readme-for-musicplayerplus-configuration)\n    1. [README for mpcplus MPD client](#readme-for-mpcplus-mpd-client)\n    1. [README for tmuxp configs](#readme-for-tmuxp-configs)\n    1. [Man Pages](#man-pages)\n    1. [Usage](#usage)\n    1. [Example client invocations](#example-client-invocations)\n    1. [Adding Album Cover Art](#adding-album-cover-art)\n    1. [Custom key bindings](#custom-key-bindings)\n    1. [Tmux session exit issues](#tmux-session-exit-issues)\n1. [Removal](#removal)\n1. [Troubleshooting](#troubleshooting)\n    1. [Known issues](#known-issues)\n1. [Infrared remote control of MPD](#infrared-remote-control-of-mpd)\n1. [Screenshots](#screenshots)\n1. [Videos](#videos)\n1. [Building MusicPlayerPlus from source](#building-musicplayerplus-from-source)\n1. [Contributing](#contributing)\n    1. [Testing and Issue Reporting](#testing-and-Issue-Reporting)\n    1. [Sponsor MusicPlayerPlus](#sponsor-musicplayerplus)\n    1. [Contribute to Development](#contribute-to-development)\n\n## Overview\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nThe MusicPlayerPlus project provides integration and extension of several audio\npackages designed to stream and play music. MusicPlayerPlus interacts with the\nMusic Player Daemon (MPD). Outputs from the MPD streaming audio server are used\nas MusicPlayerPlus inputs for playback and visualization. MusicPlayerPlus\ncomponents are used to manage and control MPD and ALSA configuration.\n\nMusicPlayerPlus integrations and extensions are primarily aimed at the\ncharacter-based terminal user. They enable an easy to use seamlessly\nintegrated control of audio streaming, playing, music library management,\nand visualization in a lightweight character-based environment.\n\nAudio streaming is provided by the Music Player Daemon (MPD).\nAt the core of MusicPlayerPlus is the `mpplus` command which acts as\na front-end for a variety of terminal and/or `tmux` sessions.\n\nThe `mpplus` command can be used to invoke:\n\n* The lightweight character-based MPD client, `mpcplus`\n* One or more terminal emulators running an MPD client and visualizer\n* A tmux session using the tmux session manager `tmuxp`\n* A spectrum visualizer\n* A download of album cover art for every album in a music library\n* Conversion of all WAV/M4A format media in a music library to MP3 format media\n* An import of a music library to the Beets media library manager\n* A download of lyrics for all songs in the music library without lyrics\n* Analysis and retrieval of audio-based information for media matching a query\n* YAMS MPD Last.fm scrobbler activation\n* Any MPD client the user wishes to run\n* One of several asciimatics animations optionally accompanied by audio\n* A fuzzy listing and searching of the audio library using `fzf`\n\n**[Note:]** Typical use of `mpplus` as a music player and spectrum visualizer\nwill invoke a `tmux` session to display the MPD client, spectrum visualizer, and\nalbum cover art all in a single terminal window. MusicPlayerPlus configures\n`tmux` with a custom key binding to exit tmux sessions. To exit an `mpplus`\ntmux session, the `Alt-x` key binding can be used.\n\nIntegration is provided for:\n\n* [mpd](https://www.musicpd.org/), the Music Player Daemon\n* [mpcplus](https://github.com/doctorfree/mpcplus/README.md), character-based MPD client\n* [beets](https://beets.io/), media library management system\n* [essentia](https://github.com/doctorfree/mpplus-essentia/README.md), acoustic metadata analysis and extraction\n* [mopidy](https://mopidy.com/), music server with cool extensions\n* [navidrome](https://www.navidrome.org/), self-hosted music server and streamer\n* [yams](https://github.com/Berulacks/yams/), MPD scrobbler for Last.fm\n* [cava](https://github.com/karlstav/cava), an audio spectrum visualizer\n* [mplayer](http://mplayerhq.hu/design7/info.html), a media player\n* [fzf](https://github.com/junegunn/fzf), interactive fuzzy finder\n* [asciimatics](https://github.com/peterbrittain/asciimatics) - automatically display a variety of character-based animation effects\n* [asciinema](https://asciinema.org/) - automatically create ascii character-based video clips\n* [tmux](https://github.com/tmux/tmux/wiki), a terminal multiplexer\n* [tmuxp](https://github.com/tmux-python/tmuxp), a tmux session manager\n* Enhanced key bindings for extended control of terminal windows and tmux sessions\n* Several terminal emulators\n    * kitty (the default MusicPlayerPlus terminal emulator)\n    * cool-retro-term\n    * gnome-terminal\n    * tilix\n\nThe goal of MusicPlayerPlus is to provide the user with a sophisticated set\nof complex music library tools that can be integrated and managed in a fairly\nsimple to understand fashion. Also, to make some cool looking powerful stuff\nhappen from the command-line in a character-based environment.\n\n### Requirements\n\nMusicPlayerPlus is compiled and packaged for installation on Linux platforms.\nIt has been tested on the following platforms:\n\n- Arch Linux\n- CentOS Linux\n- Fedora Linux\n- Raspberry Pi OS\n- Ubuntu Linux\n\nInstallation and initialization require admistrative privilege. The `mppinit`\ncommand, executed after installing MusicPlayerPlus, installs several packages\nand therefore requires access to the Internet along with administrative\nprivilege (e.g. `sudo` privilege).\n\nMemory and storage requirements depend upon the size of the music library.\n\nWith a moderate sized music library, the Music Player Daemon can exceed a\n2GB memory capacity. Therefore, 4GB or more of memory is recommended.\n\nStorage should be sized to adequately host what will likely be a growing\nmusic library. Plan ahead and leave your library room to grow. A few hundred\nGigabytes of storage might suffice for some music libraries but a Terabyte\nor more will provide room to grow. Testing is performed on systems with\n4GB RAM and 2TB storage using a 600GB music library.\n\nEssentia metadata extraction, Blissify similarity analysis, and transcoding\nall consume significant CPU resources. Testing has been performed on systems\nwith the following CPU resources:\n\n- 8 x Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz\n- 2 x Intel(R) Celeron(R) CPU G1840 @ 2.80GHz\n- 4 x ARMv7 Processor rev 3 (v7l)\n\nAll of these processors were able to handle significant loads. However,\nimport, metadata extraction, and transcoding are all much quicker on the\n8 x Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz system. Although not necessary,\nthese infrequent operations consume much less time on a more powerful CPU.\n\n### MusicPlayerPlus Commands\n\nMusicPlayerPlus adds the following commands to your system:\n\n* **mpplus** : Primary user interface, invokes an MPD client, spectrum visualizer, and more\n* **mpcplus** : Featureful NCurses MPD client, compiled with spectrum visualizer\n* **mppinit** : One-time initializaton of a user's mpcplus configuration\n* **mppcover** : Display album cover art for currently playing song\n* **mppdl** : Downloads audio tracks from Bandcamp, Soundcloud, or a URL\n* **mpcplus-tmux** : Runs mpcplus, a visualizer, and displays album art in a tmux session\n* **mppsplash-tmux** : Runs mppsplash, a visualizer, in a tmux session\n* **mppsplash** : Fun ascii art screens using ASCIImatics animations. Ascii art commands:\n    * **mppjulia** : ASCIImatics animated zoom on a Julia Set\n    * **mppplasma** : ASCIImatics animated plasma graphic\n    * **mpprocks** : ASCIImatics animated MusicPlayerPlus splash screen\n* **raise_cava** : Raises the mppcava spectrum visualizer window\n* **set_term_trans** : Sets an xfce4-terminal window's transparency level\n* **fzmp** : Browse, search, and manage MPD library using `fzf` fuzzy finder and `mpc` MPD client\n* **artist_to_albumartist** : Copies the Artist tag to the AlbumArtist tag\n* **create_playlist** : Create a new playlist using a Beets query\n* **listyt** : List YouTube video titles and urls\n* **bliss-analyze** : Acoustic analysis of audio files\n* **blissify** : Create MPD playlists using song similarity\n* **essentia_streaming_extractor_music** : Analyze and extract acoustic characteristics\n* **mpd-configure** : Create an MPD configuration file optimized for bit perfect playback\n* **mpd-monitor** : Display info on currently playing MPD song\n\nThe `bliss-analyze` and `blissify` commands are currently not available on\nRaspberry Pi installations due to lack of support for that architecture in\nthe `ffmpeg` library.\n\n**[Note:]** MusicPlayerPlus functions as a front-end and management system for\nany MPD/Mopidy/Navidrome client. The default MPD client is `mpcplus` but any\nMPD client can be configured by setting `MPD_CLIENT` in `~/.config/mpprc`.\nWhile `mpcplus` is the recommended MPD client, `ncmpcpp` is also supported\nwith some integration for visualizer data source management. Other MPD clients\navailable for use with MusicPlayerPlus include ncmpc, pms, vimpc, pimpd2,\nnncmpp, mmtc, and mpq.\n\nAdditional detail and info can be found in the\n[MusicPlayerPlus Wiki](https://github.com/doctorfree/MusicPlayerPlus/wiki).\n\n## Quickstart\n\n### Required setup\n\n* Create a music library if you do not already have one\n    * Default MusicPlayerPlus location for the music library is `$HOME/Music`\n    * Recommended structure of the music library is `artist/album/songs`\n* Install the latest Arch, Debian, or RPM format installation package from the [MusicPlayerPlus Releases](https://github.com/doctorfree/MusicPlayerPlus/releases) page\n* Run the `mppinit` command as your normal user\n    * Searches `$HOME/Music` and `$HOME/music` for music library location\n    * The music library location can be specified with `mppinit -l /path/to/library`\n\n### Optional additional setup steps\n\nFor many installations, installing the MusicPlayerPlus package and initializing\nthe user configuration with the `mppinit` command is all that need be done.\n\nSome common additional setup steps that can be performed include:\n\n- Configuring the music library location\n- Download albums in your Bandcamp collections\n- Download favorites in your Soundcloud account\n- Converting WAV/M4A format media files to MP3 format\n- Importing a music library into the Beets library management system\n- Downloading album cover art\n- Downloading additional lyrics\n- Activation of YAMS scrobbler for Last.fm\n- Analysis and retrieval of audio-based information for media matching a query\n\nConfigure the music library location by editing `~/.config/mpprc` and setting\n`MUSIC_DIR` to your music library location (default setting is `~/Music`).\nOptionally configure any additional settings in `~/.config/mpprc` such as\nyour preferred terminal emulator, Bandcamp username, Soundcloud slug, or\nmore. Any changes to `~/.config/mpprc` must be followed by running the command\n`mppinit sync`.\n\n**[Important Note:]** MusicPlayerPlus integrates several services, each of\nwhich has its own configuration for the location of the music library. Because\nof this, MusicPlayerPlus provides its own configuration file\n`~/.config/mpprc`. The `MUSIC_DIR` setting in that config file is used as the\nsource of truth for the location of the music library. In order to keep all\nof the services in sync with respect to the music library location, set the\nlocation in `~/.config/mpprc` and run the command `mppinit sync`.\nIf the music library is moved to a new location, repeat this procedure.\n\nDownload albums in your Bandcamp collections with `mppinit bandcamp`.\n\nDownload favorites in your Soundcloud account with `mppinit soundcloud`.\n\n#### Two step post-initialization setup\n\nThe following optional post-initialization steps can be performed individually\nas described below or they can be performed in two steps using `mppinit`.\n\n**Step 1**, import the music library into Beets:\n\n```shell\nmppinit import\n```\n\nThe `mppinit import` command converts any WAV format media to MP3 format\nand imports the music library into the Beets media library management system.\n\n**[Note:]** A Beets import can take hours for a large music library.\nA test import using a music library over 500GB in size, with nearly\n4000 artists, 3000 albums, and over 30,000 tracks consumed nearly 12 hours.\nImport times will vary from system to system and library to library\ndepending on several factors. The above test may provide a ballpark idea\nof the length of time a Beets library import might take.\n\nWhen the import is complete\n\n**Step 2**, retrieve additional metadata:\n\n```shell\nmppinit metadata\n```\n\nThe `mppinit metadata` command identifies and deletes duplicate tracks,\nretrieves album genres from Last.fm, downloads album cover art, and\n(optionally) analyzes and retrieves metadata for all songs in the music library.\n\n**[Note:]** A Beets metadata retrieval can take hours for a large music library.\nThe MusicPlayerPlus default Beets configuration uses `ffmpeg` to compute\nchecksums for every track in the library to find duplicates.\n\nAn optional audio analysis can be performed during metadata retrieval.\nMusicPlayerPlus provides several optional methods for acoustic analysis.\nThe method used for acoustic analysis and retrieval can be specified\non the command line:\n\n- AcousticBrainz metadata retrieval (deprecated)\n    - `mppinit -a metadata`\n- Blissify acoustic analysis of the MPD music library (the default)\n    - `mppinit -b metadata`\n- Essentia acoustic analysis and Beets metadata retrieval (long)\n    - `mppinit -e metadata`\n\nIf none of the `-a, -b, or -e` options are specified then acoustic\nanalysis, extraction, and retrieval is performed by Essentia.\n\nThe AcousticBrainz service is the fastest method but is being retired in\n2023, the service is no longer being updated, and it is often inaccurate.\n\nThe Essentia acoustic analysis is the most thorough, adds acoustic\nmetadata to the Beets library management system, and provides the greatest\nflexibility but at a cost of possibly days of analysis and extraction time.\nMetadata analysis and extraction with Essentia is the default behavior.\n\nThe Blissify analysis creates a similarity database of all songs in the music\nlibrary. This can be used to automate the creation of playlists and other\nactions. The drawback of using Blissify is it does not add acoustic metadata\nto the Beets library so the results of a Blissify analysis are only available\nto Blissify and not Beets.\n\n**[Note:]** Acoustic analysis with `blissify` is currently not available on\nRaspberry Pi installations due to lack of support for that architecture in\nthe `ffmpeg` library.\n\nIt is sometimes desirable to augment one acoustic analysis with another.\nFor example, the AcousticBrainz service seems to think a lot of songs\nhave 0 beets per minute and tags them erroneously. After retrieving\nmetadata using AcousticBrainz, list the songs that have a bpm value of 0:\n\n```shell\nbeet list bpm:0\n```\n\nThese songs can get an accurate setting for bpm and other audio parameters\nby following the `mppinit -a metadata` command with `mpplus -X bpm:0`.\n\n#### Individual commands post-initialization setup\n\nDownload albums in your Bandcamp collections with `mppinit bandcamp`.\n\nDownload favorites in your Soundcloud account with `mppinit soundcloud`.\n\nConvert WAV or M4A format media files in your library to MP3 format files with\nthe command `mpplus -F` or `mpplus -G`. Conversion from WAV to MP3 allows these\nfiles to be imported into the Beets media library management system. Conversion\nfrom M4A (Apple ALAC) to MP3 allows these files to be streamed and played in all\nbrowsers supporting HTML5 audio (not necessary with Navidrome streaming).\n\nIf you wish to manage your music library with Beets, import the music library\nwith the command `mpplus -I`.\n\nAlbum cover art can be downloaded with the command `mpplus -D art`.\n\nBandcamp collections can be downloaded with the command `mpplus -D bandcamp`.\n\nSoundcloud favorites can be downloaded with the command `mpplus -D soundcloud`.\n\nDownload additional lyrics with the command `mpplus -L`.\n\nActivate the YAMS scrobbler for Last.fm with the command `mpplus -Y`.\n\nAnalysis and retrieval of audio-based information can be performed with\nthe command `mpplus -X 'query'` where 'query' is a Beets library query.\nThe special query term 'all' indicates the entire music library, i.e.\n`mpplus -X all`. Alternatively, query the AcousticBrainz service with\n`mpplus -x all` or create a \"song similarity\" database using Blissify\nwith `mpplus -B`.\n\nThese common additional setup steps and more are covered in greater\ndetail in the [MusicPlayerPlus Beets README](beets/README.md) and the\n[Post Installation Configuration](#post-installation-configuration)\nsection below.\n\n### Quickstart summary\n\nTo summarize, a MusicPlayer quickstart can be accomplished by:\n\n* Install the latest Arch, Debian, or RPM format installation package\n* Run `mppinit` or `mppinit -l /path/to/library` as your normal user\n* If the music library location was not properly detected:\n    * Configure `MUSIC_DIR` by editing `~/.config/mpprc`\n    * Run the command `mppinit sync`\n* Optionally:\n    * Modify user-specific settings in `~/.config/mpprc` and run `mppinit sync`\n    * Download albums in your Bandcamp collections with `mppinit bandcamp`\n    * Download favorites in your Soundcloud account with `mppinit soundcloud`\n    * Perform these steps with the command `mppinit import`\n        * Convert WAV format files to MP3 format with the command `mpplus -F`\n        * Import your music library into Beets with the command `mpplus -I`\n    * Perform these steps with the command `mppinit metadata`\n        * Remove duplicate tracks with the command `beet duplicates -d`\n        * Rename tracks left after duplicate removal with `beet move`\n        * Download album cover art with the command `mpplus -D art`\n        * Analyze and retrieve audio-based information with a command like:\n        * `mpplus -B` creates a \"song similarity\" database with Blissify\n            * `mpplus -X all` analyze the entire Beets library with Essentia\n            * `mpplus -X 'query'` where 'query' is a Beets library query\n            * `mpplus -x all` query AcousticBrainz for the entire Beets library\n    * Activate the YAMS scrobbler for Last.fm with the command `mpplus -Y`\n    * Download additional lyrics with the command `mpplus -L`\n\n### Full Tilt Boogie\n\nThe entire full tilt boogie initialization, for those with both Bandcamp\nand Soundcloud accounts with songs and albums in a collection or liked,\nand who wish to apply thorough, reliable, complete, and accurate metadata:\n\n```shell\n# Initialize MusicPlayerPlus, activate Music Player Daemon\n# This is the only required setup step\nmppinit\n\n# For Bandcamp and Soundcloud users, a convenient way to download\nmppinit bandcamp\nmppinit soundcloud\n\n# Beets library import (can take hours)\nmppinit import\n\n# Install, configure, and activate Mopidy music server\nmppinit mopidy\n\n# Install, configure, and activate Navidrome streaming music server\nmppinit navidrome\n\n# Perform analysis and extraction of acoustic metadata with Essentia\n# This background process can take hours or even days for a large library\nmppinit metadata\n```\n\n## Installation\n\nMusicPlayerPlus v2.0.1 and later can be installed on Linux systems using\nthe Arch packaging format, the Debian packaging format, or the Red Hat\nPackage Manager (RPM).\n\n### Supported platforms\n\nMusicPlayerPlus has been tested successfully on the following platforms:\n\n- **Arch Linux 2022.07.01**\n    - `MusicPlayerPlus_\u003cversion\u003e-\u003crelease\u003e-any.pkg.tar.zst`\n- **Ubuntu Linux 20.04**\n    - `MusicPlayerPlus_\u003cversion\u003e-\u003crelease\u003e.deb`\n- **Fedora Linux 36**\n    - `MusicPlayerPlus_\u003cversion\u003e-\u003crelease\u003e.rpm`\n- **CentOS Linux 8**\n    - `MusicPlayerPlus_\u003cversion\u003e-\u003crelease\u003e.rpm`\n- **Raspbian Linux 11**\n    - `MusicPlayerPlus_\u003cversion\u003e-\u003crelease\u003e.deb`\n\n### Debian package installation\n\nMany Linux distributions, most notably Ubuntu and its derivatives, use the\nDebian packaging system.\n\nTo tell if a Linux system is Debian based it is usually sufficient to\ncheck for the existence of the file `/etc/debian_version` and/or examine the\ncontents of the file `/etc/os-release`.\n\nTo install on a Debian based Linux system, download the latest Debian format\npackage from the\n[MusicPlayerPlus Releases](https://github.com/doctorfree/MusicPlayerPlus/releases).\n\nInstall the MusicPlayerPlus package by executing the command\n\n```console\nsudo apt install ./MusicPlayerPlus_\u003cversion\u003e-\u003crelease\u003e.deb\n```\nor\n```console\nsudo dpkg -i ./MusicPlayerPlus_\u003cversion\u003e-\u003crelease\u003e.deb\n```\n\nor, on a Raspberry Pi:\n\n```console\nsudo apt install ./MusicPlayerPlus_\u003cversion\u003e-\u003crelease\u003e.deb\n```\nor\n```console\nsudo dpkg -i ./MusicPlayerPlus_\u003cversion\u003e-\u003crelease\u003e.deb\n```\n\n### RPM Package installation\n\nRed Hat Linux, SUSE Linux, and their derivatives use the RPM packaging\nformat. RPM based Linux distributions include Fedora, AlmaLinux, CentOS,\nopenSUSE, OpenMandriva, Mandrake Linux, Red Hat Linux, and Oracle Linux.\n\nTo install on an RPM based Linux system, download the latest RPM format\npackage from the\n[MusicPlayerPlus Releases](https://github.com/doctorfree/MusicPlayerPlus/releases).\n\nInstall the MusicPlayerPlus package by executing the command\n\n```console\nsudo dnf localinstall ./MusicPlayerPlus_\u003cversion\u003e-\u003crelease\u003e.rpm\n```\nor\n```console\nsudo rpm -i ./MusicPlayerPlus_\u003cversion\u003e-\u003crelease\u003e.rpm\n```\n\n### Arch Package installation\n\nArch Linux, Manjaro, and other Arch Linux derivatives use the Pacman packaging\nformat. In addition to Arch Linux, Arch based Linux distributions include\nArchBang, Arch Linux, Artix Linux, ArchLabs, Asahi Linux, BlackArch,\nChakra Linux, EndeavourOS, Frugalware Linux, Garuda Linux,\nHyperbola GNU/Linux-libre, LinHES, Manjaro, Parabola GNU/Linux-libre,\nSteamOS, and SystemRescue.\n\nTo install on an Arch based Linux system, download the latest Pacman format\npackage from the\n[MusicPlayerPlus Releases](https://github.com/doctorfree/MusicPlayerPlus/releases).\n\nInstall the MusicPlayerPlus package by executing the command\n\n```console\nsudo pacman -U ./MusicPlayerPlus_\u003cversion\u003e-\u003crelease\u003e-any.pkg.tar.zst\n```\n\n## Post Installation Configuration\n\n**[Note:]** Extensive post-installation steps are covered here.\nMinimal post-installation configuration required is the execution\nof the command `mppinit`. If the MPD music library is located in\nthe default `$HOME/Music` directory then no further configuration\nmay be necessary. See the [Quickstart](#quickstart) section.\n\nAfter installing MusicPlayerPlus there are several recommended\nconfiguration steps. If not already configured, the MPD server\nwill need to know where to locate your music library. This can\nbe configured by editing the MusicPlayerPlus configuration file\n`~/.config/mpprc` and running the command `mppinit sync`.\n\n### Client Configuration (required)\n\nInitialize the MusicPlayerPlus configuration by executing the command:\n\n```console\nmppinit\n```\n\nExamine the generated configuration in `~/.config/mpprc` and make any desired changes.\n\nThe client configuration performed by `mppinit` includes the configuration\nof an MPD user service. The configuration, files, and folders used by\nthis user level MPD service are stored in `~/.config/mpd/`. Examine the\ngenerated MPD configuration file `~/.config/mpd/mpd.conf`.\n\n### MusicPlayerPlus Configuration File\n\nMusicPlayerPlus 2.0.1 release 3 and later provides the configuration file\n`~/.config/mpprc` which serves as the primary source for MusicPlayerPlus\nuser configurable settings. This configuration file is the \"source of truth\"\nfor several settings including the music library location. Settings in\n`mpprc` are propogated throughout several other component's configurations.\n\nThe settings in `mpprc` are *dynamic* and preserved across command invocations.\nThe dynamic nature of this configuration file means that options specified\non the `mpplus` command line or in the `mpplus` menu system are written back\nout to `~/.config/mpprc` so the next invocation of `mpplus` will use the\nprevious invocation's options and settings as the default.\n\nThe default installed `mpprc` contains:\n\n```shell\n## MusicPlayerPlus runtime configuration\n#\n#  After modifying any of the following settings, run the command:\n#    mppinit sync\n#  as your normal MusicPlayerPlus user\n\n## Music library location\n#\nMUSIC_DIR=\"~/Music\"\n\n# MPD client\nMPD_CLIENT=\"mpcplus\"\n\n## General settings\n#\n# To enable any of these, set to 1\n# For example, to enable cover art display in tmux sessions set COVER_ART=1\n#\n# Play audio during asciimatics animations\nAUDIO=1\n# Display cover art in tmux sessions\nCOVER_ART=1\n# Display mpcplus and mppcava in a tmux session\nUSE_TMUX=1\n\n## Terminal emulator / display mode\n#\n#  Can be one of: console, current, gnome, kitty, retro, simple, tilix\n#  Where:\n#    'console' will force a tmux session\n#    'current' will force a tmux session in the current terminal window\n#    'gnome' will use the gnome-terminal emulator if installed\n#    'kitty' will use the Kitty terminal emulator if installed\n#    'retro' will use cool-retro-term if installed\n#    'simple' will use the ST terminal emulator if installed\n#    'tilix' will use the Tilix terminal emulator if installed\n#  Default fallback if none specified or not available is Kitty\n#\n#  Uncomment the preferred mode\n#MPP_MODE=console\n#MPP_MODE=current\n#MPP_MODE=gnome\n#MPP_MODE=retro\n#MPP_MODE=simple\n#MPP_MODE=tilix\nMPP_MODE=kitty\n\n## Service access\n#\n# The Bandcamp username can be found by visiting Bandcamp 'Settings' -\u003e 'Fan'\n# If you do not have a Bandcamp account, leave blank\nBANDCAMP_USER=\n\n# The Discogs username can be found by visiting discogs.com. Login, use the\n# dropdown of your user icon in the upper right corner, click on 'Profile'.\n# Your Discogs username is the last component of the profile URL.\nDISCOGS_USER=\n# The Discogs API token can be found by visiting\n# https://www.discogs.com/settings/developers\nDISCOGS_TOKEN=\n# Location of the generated custom Discogs Obsidian vault\n# Can be anywhere you have write permission\nDISCOGS_DIR=\"~/Documents/Obsidian/Discogs\"\n\n# Your Last.fm username, api key, and api secret\n# If you do not have a Last.fm account, leave blank\nLASTFM_USER=\nLASTFM_APIKEY=\nLASTFM_SECRET=\n\n# The Soundcloud user slug can be found by logging in to Soundcloud\n# click on the username at top right then 'Profile'. The user slug\n# is the last component of the URL when viewing your Soundcloud Profile.\n# If you do not have a Soundcloud account, leave blank\nSOUNDCLOUD_SLUG=\n\n# Your Spotify client id and client secret\n# If you do not have a Spotify account, leave blank\nSPOTIFY_CLIENT=\nSPOTIFY_SECRET=\n\n# Your YouTube api key\n# If you do not have a YouTube account, leave blank\nYOUTUBE_APIKEY=\n```\n\nAfter `mppinit` completes the MusicPlayerPlus initialization, edit the\n`~/.config/mpprc` configuration file and run `mppinit sync`.\n\n### MPD Music Directory Configuration\n\n**[Note:]** MusicPlayerPlus version 1.0.3 release 1 and later perform\nan automated MPD user configuration and systemd service activation.\nThis is performed by the `mppinit` command. MusicPlayerPlus 1.0.3r1\nand later installations need not perform the following manual procedures\nbut users may wish to review the automated MPD configuration and alter\nthe default MPD music directory location.\n\nThe default MPD and `mpcplus` music directory is set to:\n\n`$HOME/Music`\n\nIf your media library resides in another location then perform the following\nsteps and run `mppinit sync`:\n\n* Edit `$HOME/.config/mpprc` and set the `MUSIC_DIR` entry to the location of your music library (e.g. `vi ~/.config/mpprc`)\n* Run the `mppinit sync` command\n\nFor example, to set the MPD music directory to the `/u/audio/music` directory,\nedit `$HOME/.config/mpprc` and change the *MUSIC_DIR* setting:\n\n```shell\nMUSIC_DIR=\"/u/audio/music\"\n```\n\nThe *MUSIC_DIR* location must be writeable by your user.\n\nAny time the MPD music directory is manually modified, run `mppinit sync`.\n\n### Initializing the Beets media library management system\n\n**[Note:]** Beets is NOT the now defunct music service purchased by Apple.\nIt is an open source media library management system.\n\nMusicPlayerPlus includes the Beets media library management system\nand preconfigured settings to allow easy integration with MPD and `mpcplus`.\nBeets is an application that catalogs your music collection, automatically\nimproving its metadata. It then provides a suite of tools for manipulating\nand accessing your music. Beets includes an extensive set of plugins that\ncan be used to enhance and extend the functionality of the media library\nmanagement Beets provides. Many Beets plugins are installed and configured\nautomatically by MusicPlayerPlus.\n\nTo get started using the Beets media library management system, it is\nnecessary to import your music library into the Beets database. This process\ncatalogs your music collection and improves its metadata. The default\nBeets configuration provided by MusicPlayerPlus moves and tags files in the\nmusic library during this process. It adds music library data to the Beets\ndatabase. To import your music library into Beets, issue the following command:\n\n```console\nmppinit import\n```\n\nor to skip WAV format media conversion and just perform the Beets import:\n\n```console\nmpplus -I\n```\n\n**[Note:]** If additional songs or albums are added to the music library\nafter the initial Beets import is performed, simply rerun `mppinit import`\nor `beet import /path/to/new/items` to import any new library items.\nTo remove duplicates and retrieve metadata for the newly imported items,\nrun `mppinit metadata`.\n\nAfter importing the music library into Beets, try playing something with:\n\n```console\nbeet play QUERY\n```\n\nWhere 'QUERY' is a valid\n[Beets query](https://beets.readthedocs.io/en/stable/reference/query.html).\nThis can be a simple string like\n\"blue\" or \"love\" or a more complicated expression as described in the\nBeets query documentation. The Beets `play` plugin should match the\nquery string to songs in your music library, add those songs to the\nMPD queue, and play them. Use `beet ls QUERY` to see what would be played.\n\n**[Note:]** MusicPlayerPlus has configured the Beets play plugin\nto use the command `/usr/share/musicplayerplus/scripts/mpcplay.sh`\nto play media with this plugin. This script clears the MPD queue,\nadds any songs matching the query to the queue, and plays the MPD queue.\nIn addition, two arguments are supported: `--shuffle` and `--debug`.\nThese additional arguments are passed using the `--args` feature.\nFor example, to play all media matching the string \"velvet\" and shuffle\nthe order of play, issue the command `beet play --args --shuffle velvet`.\n\nExample usage of the `beet play` command:\n\n* `beet play velvet`\n* `beet play playlist:1970s`\n* `beet play --args --shuffle playlist:1990s`\n* `beet play --args \"--debug --shuffle\" green eyes`\n\nFor instructions on Beets media library setup and use see the\n[MusicPlayerPlus Beets README](beets/README.md).\n\nLearn more about the Beets media library management system at\nhttps://beets.io/\n\n### Additional metadata analysis and retrieval\n\nMusicPlayerPlus includes two supported methods for augmenting music\nlibrary metadata through acoustic analysis. These two methods are:\n\n- Essentia acoustic analysis and Beets metadata retrieval\n    - initialized with `mppinit -e metadata`\n- Blissify acoustic analysis of the MPD music library\n    - initialized with `mppinit -b metadata`\n\nA third method using AcousticBrainz is no longer supported:\n\n- AcousticBrainz metadata retrieval (deprecated)\n    - initialized with `mppinit -a metadata`\n\n#### Acoustic analysis with Blissify\n\nAcoustic analysis with Blissify does not require a prior Beets import.\nThe Blissify acoustic analysis creates a song similarity database for\nall the songs in the MPD music library. Initialize the Blissify database\nwith the command `blissify update \u003cmpd music directory\u003e`. For example,\nassuming the default MPD music directory:\n\n```console\nblissify update ~/Music\n```\n\nBlissify database initialization would have been automatically performed\nduring setup if metadata initialization were done with:\n\n```console\nmppinit -b metadata\n```\n\nAfter initialization of the Blissify database, the `blissify` command can\nbe used to create an MPD playlist based on song similarities. For example,\nto make a 30 song playlist that queues the closest song to the currently\nplaying song, then the closest song to the second song, etc, effectively\nmaking a \"path\" through the songs, execute the command:\n\n```console\nblissify playlist --seed-song 30\n```\n\nTo save the current MPD playlist (queue), execute the command:\n\n```console\nmpc save \u003cplaylist-name\u003e\n```\n\nNote that the acoustic analysis and database creation performed by\nBlissify does not update the Beets library database. In order to add\nthis additional acoustic metadata to the Beets library it is necessary\nto perform an acoustic analysis with Essentia or acoustic metadata\nretrieval with AcousticBrainz, both described in the next sections.\n\n#### Acoustic analysis with Essentia\n\nAfter completing the Beets music library import with either `mppinit import`\nor `mpplus -I`, additional Beets metadata can be retrieved with the command:\n\n```console\nmppinit -e metadata\n```\n\nThis will identify and delete duplicate tracks, retrieve album genres,\ndownload album cover art, and optionally analyze and retrieve metadata\nfor all songs in the music library using the\n[Essentia extractor](https://essentia.upf.edu/index.html) and\n[Essentia trained models](https://essentia.upf.edu/models.html).\n\nMusicPlayerPlus `mppinit -e metadata` uses Essentia for extracting acoustic\ncharacteristics of music, including low-level spectral information, rhythm,\nkeys, scales, and much more, and automatic annotation by genres, moods, and\ninstrumentation.\n\nThis is the same sort of thing that\n[AcousticBrainz](https://acousticbrainz.org/) does but the AcousticBrainz\nproject is no longer collecting data and was withdrawn in 2023.\nMusicPlayerPlus provides the same functionality using pre-compiled and\npackaged Essentia binaries and models.\n\nHowever, the process of analyzing, extracting, and retrieving metadata\ncan be time consuming for a large music library. The `mppinit -e metadata`\ncommand performs several metadata retrieval steps in a non-interactive\nmanner and in the background so it can be left unattended if desired.\n\n#### Acoustic retrieval with AcousticBrainz\n\n**[No longer supported]**\n\nWhile it still exists the AcousticBrainz service can be queried to provide\na relatively quick way to update the Beets library with additional\nacoustic metadata. The AcousticBrainz service has already analyzed the\nacoustic characteristics of songs in the MusicBrainz catalog. To retrieve\nthis metadata for songs in your music library, after Beets import is complete,\nrun the command `mppinit -a metadata`. Or, at any time after Beets import\nrun the command `beet acousticbrainz`. The AcousticBrainz service is no longer\nupdated and was retired in 2023.\n\nThe individual metadata retrieval steps performed automatically by\n`mppinit [-a|-b|-e] metadata` can be performed manually using the instructions in\nthe [MusicPlayerPlus Beets README](beets/README.md).\n\n### Activating the YAMS scrobbler for Last.fm\n\nYAMS is an acronym for \"Yet Another MPD Scrobbler\".\nWhen YAMS is configured and running, any songs, artists, or albums\nplayed through MPD get \"scrobbled\" to [Last.fm](https://www.last.fm).\nThis enables a tracking of your listening patterns and habits,\ncreating a fairly extensive set of statistics viewable on Last.fm.\n\nFeatures:\n\n- Authenticate with the new Last.fm Scrobbling API v2.0 - without the need to input/store your username/password locally.\n- Update your profile's \"Now Playing\" track via Last.fm's \"Now Playing\" API\n- Save failed scrobbles to a disk and upload them at a later date.\n- Timing configuration (e.g. scrobble percentage, real world timing values for scrobbling, etc.).\n- Prevent accidental duplicate scrobbles on rewind/playback restart/etc.\n- Automatic daemonization and config file generation.\n\nIn order to activate the YAMS scrobbler you will need an account with Last.fm.\nFree accounts with Last.fm include many of the service features and can\nprovide extensive listening history statistics. If you do not wish to\nuse Last.fm to analyze MPD track plays then this optional setup step\ncan be ignored and no action is required as MusicPlayerPlus disables\nYAMS by default. Disable a previously activated YAMS service with the\ncommand `mpplus -y`.\n\nActivate the YAMS scrobbler for Last.fm with the command:\n\n```console\nmpplus -Y\n```\n\nThe activation process must be run in a terminal window and will provide\nyou with a URL. Copy the URL and navigate to it using a web browser.\nThis will take you to Last.fm to authenticate if not already logged in\nand authorize YAMS access. Once access is authorized there is no need\nto authenticate for future Last.fm access with YAMS. There is also no\nneed to manually run the `yams` command as a user service is activated\nto run it automatically. Basically, nothing else to do, just play music\nand it will be scrobbled by YAMS.\n\nYAMS creates a configuration file `$HOME/.config/yams/yams.yml`.\n\n#### Using YAMScrobbler with Libre.fm\n\nYAMS works fine with Libre.fm, a Free Software replacement for Last.fm.\nIf you prefer to use Libre.fm rather than Last.fm, do the following:\n\n- Set the `base_url` config variable to `https://libre.fm/2.0/` in `$HOME/.config/yams/yams.yml` (don't forget the trailing slash!)\n- Delete any leftover `.lastfm_session` files\n- Authenticate like you normally would with Last.fm, however replace `last.fm` with `libre.fm` in the authorization URL printed out by YAMS\n\n### MPD Audio Output Configuration\n\nAdjust the `audio_output` settings in `~/.config/mpd/mpd.conf`.\nMPD must have at least one `audio_output` configured and in order\nto use the spectrum visualizer as configured by default it is necessary\nto configure a second `audio_output` in MPD.\n\nThe default MPD `audio_output` setting is `PulseAudio`. To modify the MPD audio\noutput, uncomment one of `ALSA`, `PulseAudio`, or `PipeWire` and restart MPD.\n\nA FIFO `audio_output` is used as a data source for the spectrum visualizer.\nTo configure this output, add the following to `~/.config/mpd/mpd.conf`:\n\n```\naudio_output {\n    type            \"fifo\"\n    name            \"Visualizer feed\"\n    path            \"~/.config/mpd/mpd.fifo\"\n    format          \"44100:16:2\"\n}\n```\n\nAn example ALSA `audio_output` configuration in `~/.config/mpd/mpd.conf`:\n\n```\naudio_output {\n  type    \"alsa\"\n  name    \"ALSA\"\n    buffer_time \"50000\"   # (50ms); default is 500000 microseconds (0.5s)\n#  device    \"hw:0,0\"  # optional\n#  mixer_type      \"hardware\"      # optional\n#  mixer_device  \"default\"  # optional\n#  mixer_control  \"PCM\"    # optional\n#  mixer_index  \"0\"    # optional\n}\n```\n\nOr, to use PulseAudio:\n\n```\naudio_output {\n    type  \"pulse\"\n    name  \"pulse audio\"\n    device         \"pulse\"\n    mixer_type      \"hardware\"\n}\n```\n\nOutput with PipeWire can also be configured:\n\n```\naudio_output {\n    type  \"pipewire\"\n    name  \"PipeWire Sound Server\"\n}\n```\n\nMPD is a powerful and flexible music player server with many configuration\noptions. Additional MPD configuration may be desired. See the\n[MPD User's Manual](https://mpd.readthedocs.io/en/stable/user.html)\n\n### Fuzzy Finder Configuration\n\nThe `fzmp` command lists, searches, and selects media from the MPD\nlibrary using the `fzf` fuzzy finder command line utility. A default\n`fzmp` configuration file for each user is created when the `mppinit`\ncommand is executed. The `fzmp` configuration file is located at:\n\n```\n~/.config/mpcplus/fzmp.conf\n```\n\nThe initial default `fzmp` configuration should suffice for most use cases.\nSome of the interactive key bindings may need to be modified if they are\nalready in use by other utilities. For example, the default key binding to\nswitch to playlist view is 'F1' but the `xfce4-terminal` command binds 'F1'\nby default to its help window. In this case either the `fzmp` playlist view\nkey binding must be changed or the XFCE4 terminal help window shortcut must\nbe disabled.\n\nTo disable the XFCE4 terminal help window shortcut, in `xfce4-terminal` select:\n\n*Edit -\u003e Preferences -\u003e Advanced*\n\nSelect the *Disable help window shortcut key (F1 by default)* and Close\nthe Preferences dialog. The XFCE4 terminal help window shortcut will no\nlonger be bound to 'F1' and no modification to the playlist view key binding\nfor `fzmp` would be necessary.\n\nTo modify the `fzmp` playlist view key binding, edit the `fzmp` configuration\nfile `~/.config/mpcplus/fzmp.conf` and add a line like the following:\n\n```console\nplaylist_view_key F6\n```\n\nThis revised configuration would change the playlist view key binding from\n'F1' to 'F6' and the XFCE4 terminal help window shortcut could remain enabled\nand bound to 'F1'.\n\nSeveral other `fzmp` bindings and options can be configured. See `man fzmp`\nfor details.\n\n### Start MPD\n\n**[Note:]** MusicPlayerPlus version 1.0.3 release 1 and later perform\nan automated MPD user configuration and systemd service activation.\nInitialization with `mppinit` for these installations should automatically\nstart the user MPD service. No further action should be required for\nMusicPlayerPlus v1.0.3r1 or later installations.\n\nStatus of the MPD service can be checked with:\n\n```console\nsystemctl --user status mpd.service\n```\n\nInstallation and initialization of MusicPlayerPlus prior to v1.0.3r1\nwill need to start mpd as a system-wide service by executing the commands:\n\n`sudo systemctl start mpd`\n\nIf you want MPD to start automatically on subsequent reboots, run:\n\n`sudo systemctl enable mpd`\n\nAlternatively, if you want MPD to start automatically when a client\nattempts to connect:\n\n`sudo systemctl enable mpd.socket`\n\n### System verification checks\n\nOnce the music directory has been set correctly, album art downloaded,\nmusic library imported, and `mppinit sync` has completed initialization,\nsome system checks can optionally be performed.\n\n* Verify the `mpd` service is running and if not then start it:\n    * `systemctl --user is-active mpd.service`\n    * `systemctl --user start mpd.service`\n* Update the MPD client database:\n    * `mpc update`\n* Verify the `mpd` service is enabled and if not enable it\n    * `systemctl --user is-enabled mpd.service`\n    * `systemctl --user enable mpd.service`\n* Play music with `mpplus`\n    * See the [online mpcpluskeys cheat sheet](https://github.com/doctorfree/MusicPlayerPlus/wiki/mpcpluskeys.1) or `man mpcpluskeys` for help navigating the `mpplus` windows\n    * See the [online mpplus man page](https://github.com/doctorfree/MusicPlayerPlus/wiki/mpplus.1) or `man mpplus` for different ways to invoke the `mpplus` command\n\n### Initialize Music Database\n\n**[Note:]** MusicPlayerPlus version 1.0.3 release 1 and later perform an\nautomated MPD music database initialization during execution of `mppinit`.\n\nFor versions of MusicPlayerPlus prior to v1.0.3r1, initialize the music\ndatabase with an MPD client and update the database. The `mpcplus` MPD\nclient can be used for this or the standard `mpc` MPD client can be used.\nWith `mpcplus`, launch the `mpcplus` MPD client, verify the client window\nhas focus, and type `u` to update the database. With `mpc` simply execute\nthe command `mpc update`.\n\nIf your music library is very large this process can take several minutes\nto complete. Once the music database has been updated you should see the\nsongs, albums, and playlists in your music library appear in the client view.\n\n### Installing Mopidy\n\nTo install, configure, and activate Mopidy issue the command `mppinit mopidy`.\nAfter Mopidy initialization completes, open `http://\u003cip address\u003e:6680/iris`.\nAfter adding music to the local music library, run `mopidy local scan`.\n\n**[Note:]** In order to use the Mopidy-Beets extension, perform a\n`mppinit import` and optionally `mppinit metadata` prior to `mppinit mopidy`.\n\nThe default music server in MusicPlayerPlus is the Music Player Daemon (MPD).\nAn alternate music server, Mopidy, is supported and can perform the same\nfunctions as MPD, is compatible with MPD clients, and can be extended to\noffer many more features.\n\nActivating Mopidy will first deactivate MPD. The MusicPlayerPlus Mopidy\nactivation runs as a user level system service. Configuration for Mopidy\nand Mopidy extensions resides in `$HOME/.config/mopidy/`. The MusicPlayerPlus\nactivation of Mopidy auto-configures Mopidy and the installed extensions.\n\nIn addition to the\n[bundled Mopidy extensions](https://docs.mopidy.com/en/latest/),\nthe `mppinit mopidy` command installs the following Mopidy extensions:\n\n- **Mopidy-Beets**\n    - Mopidy extension for playing music from Beets' web plugin\n- **Mopidy-Iris**\n    - A comprehensive and mobile-friendly client that presents your library and extensions in a user-friendly and intuitive interface. Built using React and Redux\n    - Open `http://\u003cip address\u003e:6680/iris`\n- **Mopidy-Mobile**\n    - Fully control a Mopidy music server from your mobile device\n    - Android App available on [Google Play](https://play.google.com/store/apps/details?id=at.co.kemmer.mopidy_mobile)\n    - Other devices open `http://IP_Address:6680` in a browser\n- **Mopidy-Mpd**\n    - Mopidy extension for controlling Mopidy from MPD clients\n- **Mopidy-Podcast**\n    - Mopidy extension for searching and browsing podcasts\n- **Mopidy-Podcast-iTunes**\n    - Mopidy extension for searching and browsing iTunes podcasts\n- **Mopidy-TuneIn**\n    - A backend for playing music from the TuneIn online radio service\n- **Mopidy-Scrobbler**\n    - Mopidy extension for scrobbling music to Last.fm\n    - Requires Last.fm username/password added to `~/.config/mopidy/mopidy.conf`\n\nAdditional Mopidy extensions can be installed and configured. For example,\nto stream Spotify with Mopidy, install and configure the Mopidy-Spotify\nextension. Learn more at https://mopidy.com/ext/\n\n**[Note:]** MusicPlayerPlus uses a Python virtual environment and Mopidy\nextensions are Python modules. In order to install a Mopidy extension it\nmust be installed in the MusicPlayerPlus Python virtual environment. For\nexample, to install the Mopidy Spotify extension run the following commands:\n\n```bash\nsource ~/.venv/bin/activate\npython3 -m pip install Mopidy-Spotify\n```\n\nTo view the effective Mopidy configuration run the command `mopidy config`.\nThis will display the full Mopidy configuration with passwords masked out\nso that you can safely share the output with others for debugging.\n\n**[Note:]** The Mopidy MPD extension provides compatibility with MPD\nclients but does not implement all MPD features. MPD is much more powerful\nand flexible in terms of its configurable inputs and outputs. After\nactivating Mopidy some features may not work the same as they did with MPD.\nFor example, spectrum visualization may fail or player stats may not be\navailable. However, Mopidy offers many features unavailable with MPD.\nIt's a tradeoff.\n\nTo re-activate MPD and disable Mopidy, issue the command `mppinit mpd`.\nEasily switch back and forth between MPD and Mopidy with `mppinit mpd`\nand `mppinit mopidy`. Note that MusicPlayerPlus continues to use the\nconfigured `MUSIC_DIR` as the master music library location.\nTo change the location of the music library, edit\n`~/.config/mpprc`, set `MUSIC_DIR` to the new location,\nand run `mppinit sync` to synchronize the music library location across\nBeets, MPD, Mopidy, and downloaders.\n\n### Installing Navidrome\n\nThe default music server in MusicPlayerPlus is the Music Player Daemon (MPD).\nAn alternate music server and streamer, Navidrome, is also supported.\nTo install, configure, and activate Navidrome issue the command:\n\n```console\nmppinit navidrome\n```\n\nThe MusicPlayerPlus Navidrome activation runs as a user level system service.\nConfiguration for Navidrome resides in `$HOME/.config/navidrome/navidrome.toml`.\nThe MusicPlayerPlus activation of Navidrome auto-configures, starts, and\nenables the Navidrome service. The Navidrome log file can be found at\n`$HOME/.config/navidrome/navidrome.log`.\n\nAfter installing Navidrome, you need to create your first user. This will be\nyour admin user, a super user that can manage all aspects of Navidrome,\nincluding the ability to manage other users. Browse to Navidrome’s homepage\nat http://localhost:4533\n\nFill out the username and password you want to use, confirm the password and\nclick on the “Create Admin” button. You should now be able to browse and\nlisten to all your music.\n\n**[Note:]** It usually take a couple of minutes for your music to start\nappearing in Navidrome’s UI. Check the logs to see what is the scan progress.\n\n**[Security Note:]** Navidrome comes with an embedded, full-featured HTTP\nserver but in order to provide additional security (e.g. SSL) Navidrome\nshould be run behind a reverse proxy like Nginx or Apache. MusicPlayerPlus\ndoes not configure a reverse proxy for Navidrome. See the Navidrome network\nconfiguration documentation at https://www.navidrome.org/docs/usage/security/\nto get started securing Navidrome. To use the MusicPlayerPlus default\nconfiguration of Navidrome, use `http://...` rather than `https://...`.\n\nIf all you want is a Navidrome streaming music server and you do not care\nabout Beets library management, additional downloads, or a Mopidy server\nthen setup can be accomplished with just `mppinit` followed by\n`mppinit navidrome`.\n\n#### Navidrome clients\n\nThe Navidrome self-hosted music service can stream your music to many devices.\n\nMusicPlayerPlus tested and recommended free open source Navidrome clients:\n\n- **iPhone/iPad**\n    - [iSub](http://www.subsonic.org/pages/apps.jsp#isub)\n- **Android**\n    - [Dsub](http://www.subsonic.org/pages/apps.jsp#dsub)\n- **Linux/MacOS/Windows**\n    - [Sonixd](https://github.com/jeffvli/sonixd)\n\nCharacter based terminal/console Navidrome clients:\n\n- **Linux/Windows**\n    - [Jellycli](https://github.com/tryffel/jellycli)\n- **Linux**\n    - [Stmp](https://github.com/wildeyedskies/stmp)\n\nNavidrome clients are not installed by MusicPlayerPlus. Install Navidrome\nclients using your device's app store or following the installation\ninstructions at the client link above.\n\nIf you do not have or wish to use a Navidrome client, then most modern\nbrowsers are supported Navidrome clients. To use a browser as a Navidrome\nweb client, open the URL `http://ip-address:4533` where *ip-address* is\nthe IP address of the Navidrome server.\n\nFor a list of Airsonic compatible applications, see\nhttps://airsonic.github.io/docs/apps/\n\nFor a list of Subsonic compatible clients, see\nhttps://www.navidrome.org/docs/overview/#apps\n\n[Sonixd](https://github.com/jeffvli/sonixd) is a cross-platform desktop\nSubsonic client compatible with Navidrome. On Apple MacOS, install sonixd\nwith Homebrew:\n\n```console\nbrew install --cask sonixd\n```\n\n[Sublime](https://sublime-music.gitlab.io/sublime-music/index.html) is a\nnative Subsonic client compatible with Navidrome for the Linux Desktop.\nSee https://sublime-music.gitlab.io/sublime-music/index.html to install\nSublime on a variety of Linux distributions.\n\n### Spotify and YouTube Music players\n\n`Spotify` and `YouTube Music` players can be installed, configured, and launched\nvia either the `mpplus` menu system or `mppinit`.\n\nThe `Spotify` player is the character-based `spotify_player` available at\nhttps://github.com/aome510/spotify-player and can be installed via the main menu\n(`mpplus -i`) or with the command `mppinit spotify`. This `Spotify` player runs\nin a terminal window or on the console and has full-feature parity with `Spotify`.\n\nConfiguration of the `Spotify` player is located in `~/.config/spotify-player/app.toml`.\n\nThe `YouTube Music` player is a `YouTube Music` desktop app available at\nhttps://github.com/th-ch/youtube-music and bundled with custom plugins and\nbuilt-in ad blocker/downloader. The `YouTube Music` player can be installed\nvia the main menu (`mpplus -i`) or with the command `mppinit youtube`.\n\nConfiguration of the `YouTube Music` player is located in `~/.config/YouTube Music/config.json`.\n\n### Terminal Emulator Support\n\nSupported terminal emulators in MusicPlayerPlus include `kitty`, `tilix`,\n`gnome-terminal`, `st`, and `cool-retro-term`. Kitty is the default terminal\nemulator used by MusicPlayerPlus except on Raspberry Pi OS where `st` is used\nas the default.\n\n**[Note:]** The [kitty terminal emulator](https://sw.kovidgoyal.net/kitty/)\nis very cool. A default kitty theme is provided (the 'Music Player Plus' theme)\nand should suffice for most users. An alternate kitty theme can be configured\nusing the kitty themes kitten. To use this kitten, run:\n\n```console\nkitty +kitten themes\n```\n\nAn alternate terminal emulator can be specified on the `mpplus` command line:\n\n```console\nmpplus -c ... # indicates use the current terminal and a tmux session\nmpplus -e ... # indicates use the simple terminal emulator (st)\nmpplus -g ... # indicates use the gnome terminal emulator\nmpplus -k ... # indicates use the kitty terminal emulator\nmpplus -r ... # indicates use the cool-retro-term terminal emulator\nmpplus -t ... # indicates use the tilix terminal emulator\n```\n\nIf an alternate terminal emulator is not specified on the command line\nthen the default will be used unless console mode is detected. Console mode\nis used when no DISPLAY can be opened (e.g. running on a console, running\nover SSH without a display, running on a headless server). In console mode\nMusicPlayerPlus utilizes `tmux` sessions to display the character-based music\nplayer `mpcplus` and spectrum visualizer `mppcava`.\n\nThe `mppcava` spectrum visualizer looks better when the font used by the\nterminal emulator in which it is running is a small sized font. Some\nterminal emulators rely on a profile from which they draw much of\ntheir configuration. Profiles are used in MusicPlayerPlus to provide\nan enhanced visual presentation.\n\nIn order to use the Gnome, Simple, or Tilix terminal emulators they must be\ninstalled manually (except on Raspberry Pi OS where the Simple terminal\nemulator is installed if no supported terminal emulator is found).\nIf you wish to use the Gnome, Simple, or Tilix terminal emulators,\nthen use your system's package manager to install them prior to\ninitializing MusicPlayerPlus with the `mppinit` command. If either or both\nof Gnome or Tilix terminal emulators are installed after MusicPlayerPlus\ninitialization with `mppinit` then run `mppinit profiles` after installing\ngnome-terminal or tilix terminal emulator(s).\n\nThere are four terminal profiles in two terminal emulators used by\nMusicPlayerPlus. The `gnome-terminal` emulator and the `tilix` terminal\nemulator each have two custom profiles created during `mppinit` initialization.\nThese profiles are named \"MusicPlayer\" and \"Visualizer\".\n\nThe custom MusicPlayerPlus terminal profiles are used to provide font sizes\nand background transparencies that enhance the visual appeal of both the\nMusicPlayerPlus control window and the spectrum visualizer.\n\nTo modify these terminal emulator profiles, launch the desired terminal\nemulator and modify the desired profile in the Preferences dialog.\n\n### Discogs User Collection\n\nMusicPlayerPlus includes support for the auto-generation of an\n[Obsidian](https://obsidian.md) vault from either a [Discogs](https://discogs.com)\nuser collection or a local music library. The extremely rich data available from\nDiscogs can be used to generate markdown format files reflecting the artists,\nalbums, tracks, and items in your collection or library. The generated markdown\nreflecting your Discogs collection or music library includes a preconfigured\nObsidian vault along with plugins, settings, and theme. The Obsidian Dataview\nplugin can be used to query the Obsidian vault in a variety of ways similar to\na database of your library. Several example Dataview queries are included.\n\nIn order to use this facility, both `DISCOGS_USER` and `DISCOGS_TOKEN` must be\nconfigured in `$HOME/.config/mpprc`. If these are set then the resulting Obsidian\nvault from the either the command `mppinit discogs` or `mppinit discogs local`\nwill be located in the folder specified by `DISCOGS_DIR` in `mpprc`.\n\nSee the [Obsidian Custom Discogs README](https://github.com/doctorfree/Obsidian-Custom-Discogs#readme) for details on setup and maintenance of a Discogs Obsidian vault.\n\n## MusicPlayerPlus Services and Clients\n\nMusicPlayerPlus includes several services, some installed by default and\nothers optionally installed with the `mppinit` command post-installation.\nClients that can be used to access these services are also provided.\n\n### Services\n\nThe following services are included with MusicPlayerPlus:\n\n- **Music Player Daemon (MPD)**\n    - Installed, configured, and activated by default\n- **MPD Stats Service**\n    - Installed, configured, and activated by default\n- **Beets Web Plugin Service**\n    - Installed, configured, and activated by default\n    - Beets queries can be performed at http://localhost:8337\n    - Can be queried via API endpoints. For example:\n        - `curl -s http://localhost:8337/album/ | jq -r .`\n- **Mopidy Music Server**\n    - Installed, configured, and activated with `mppinit mopidy`\n    - When activated, deactivates MPD, MPD Stats, and YAMS services\n- **Navidrome Music Streaming Server**\n    - Installed, configured, and activated with `mppinit navidrome`\n- **YAMS Last.FM Scrobbler**\n    - Installed, configured, and activated with `mppinit yams`\n\nAll of the MusicPlayerPlus services are user-level systemd services and can\nbe controlled by the MusicPlayerPlus user without the need for `root` privilege.\nThe `mpplus -i` interactive menu system includes menu entries for controlling\neach of these services as well as a status report on them by selecting the\n\"Manage Music Services\" from the Main Menu. Alternately, each service can\nbe controlled from the command line using `systemctl --user ...`. For example,\nto stop the MPD Stats Service, run the command `systemctl --user stop mpdstats`.\n\n### Which services should be installed and activated\n\nDepending upon the use case and personal preference, a variety of combinations\nof MusicPlayerPlus services can be activated. Mopidy with the Mopidy-MPD\nextension conflicts with the MPD service. YAMS and MPD Stats only work with\nMPD. Therefore, if Mopidy is activated the MPD, YAMS, and MPD Stats services\nare automatically deactivated. Similarly, if the MPD service is reactivated,\nthe YAMS and MPD Stats services are reactivated and Mopidy deactivated.\n\nChoose which service you prefer, MPD or Mopidy, and activate it with either\n`mppinit mopidy` or `mppinit mpd` (after activating Mopidy then deciding to\nreactivate MPD). Using these two commands, `mppinit mopidy` and `mppinit mpd`,\nit is easy to switch between the two conflicting services.\n\nThe advantage of MPD is its stability, maturity, flexibility, power, and\nextensive configuration options. However, it is difficult to enable streaming\nwith MPD. The advantage of Mopidy is its streaming capability and the variety\nof useful extensions, many of which are installed by default with\n`mppinit mopidy`.\n\nAn even better streaming solution is provided by Navidrome. Activating\nNavidrome enables access to the music library from any desktop, phone,\ntablet, or remote device with a browser. There are numerous Navidrome clients\navailable for all devices and platforms. Activating Navidrome does not conflict\nwith any of the other MusicPlayerPlus services so it can be streaming the\nmusic library while MPD or Mopidy is serving up the same library locally.\nNavidrome can optionally scrobble to Last.FM so if that option is enabled\nthen deactivate the YAMS service.\n\n**[Summary]** MusicPlayerPlus provides several different selections of\nservices appropriate for a variety of use cases. All service configurations\nrequire a prior MusicPlayerPlus initialization with `mppinit`. Some common\nMusicPlayerPlus service configurations include:\n\n- **Basic Music Player Daemon**\n    - Configured automatically with `mppinit`\n    - MPD enabled and active, all other services disabled\n    - Use `mpplus`, `mpcplus`, `mpc`, etc to play music on local system\n- **Music Player Daemon plus Beets**\n    - Configured with `mppinit import`\n    - MPD and Beets enabled and active, all other services disabled\n    - Use `beet ...`, `mpplus`, `mpcplus`, `mpc`, to search, filter, play, ...\n    - Enables the Beets web plugin at `http://\u003cip address\u003e:8337`\n- **Mopidy Music Server plus Beets**\n    - Configured with `mppinit import`, and `mppinit mopidy`\n    - Mopidy and Beets enabled and active, other services disabled\n    - Use `beet ...`, `mpplus`, `mpcplus`, `mpc`, to search, filter, play, ...\n    - Enables the Beets web plugin at `http://\u003cip address\u003e:8337`\n    - Enables the Mopidy web client at `http://\u003cip address\u003e:6680`\n- **Navidrome Streaming plus Mopidy Music Server plus Beets**\n    - Configure with `mppinit import`, `mppinit mopidy`, `mppinit navidrome`\n    - Navidrome, Mopidy and Beets enabled and active, other services disabled\n    - Use `beet ...`, `mpplus`, `mpcplus`, `mpc`, to search, filter, play, ...\n    - Enables the Beets web plugin at `http://\u003cip address\u003e:8337`\n    - Enables the Mopidy web client at `http://\u003cip address\u003e:6680`\n    - Enables the Navidrome web client at `http://\u003cip address\u003e:4533`\n    - Supports many clients available for all desktops, tablets, and phones\n    - Run `mppinit import` after new `mppinit bandcamp|soundcloud` downloads\n- **Navidrome Music Streaming Server without MPD/Mopidy/Beets**\n    - Configure with `mppinit navidrome`\n    - No need for `mppinit import|metadata|mopidy|yams`\n    - Use `mpplus -i` menu system to stop and disable all other services\n        - Select \"Manage Music Services\" from the Main Menu\n        - If active, Stop and Disable MPD, Mopidy, and Beets\n    - Navidrome enabled and active, other services disabled\n    - Enables the Navidrome web client at `http://\u003cip address\u003e:4533`\n    - Supports many clients available for all desktops, tablets, and phones\n    - No need for `mppinit import` after `mppinit bandcamp|soundcloud` downloads\n\n### Clients\n\nThe following clients are included with MusicPlayerPlus:\n\n- **mpplus MusicPlayerPlus front-end**\n    - Installed by default, see `man mpplus`\n    - Front-ends `mpcplus` MPD client and `mppcava` spectrum visualizer\n    - Example: `mpplus`\n- **mpcplus character-based feature-full MPD client**\n    - Installed by default, see `man mpcplus`\n    - Example: `mpcplus`\n- **mpc command-line MPD client**\n    - Installed by default, see `man mpc`\n    - Examples: `mpc stop`, `mpc current`, `mpc play`\n- **beet command-line interface to Beets**\n    - Installed by default, see `man beet`\n    - Examples: `beet play jethro tull`, `beet info -l aqualung`\n- **Beets web client**\n    - Installed by default\n    - Open `http://\u003cip address\u003e:8337`\n- **Mopidy web client**\n    - Installed, configured, and activated with `mppinit mopidy`\n    - Open `http://\u003cip address\u003e:6680`\n- **Mopidy Iris web client**\n    - Installed, configured, and activated with `mppinit mopidy`\n    - Open `http://\u003cip address\u003e:6680/iris`\n- **Mopidy-Mobile**\n    - Installed, configured, and activated with `mppinit mopidy`\n    - Open `http://\u003cip address\u003e:6680/mobile`\n- **Navidrome web client**\n    - Installed, configured, and activated with `mppinit navidrome`\n    - Open `http://\u003cip address\u003e:4533`\n\n## Documentation\n\n**[NEW:]** MusicPlayerPlus documentation is now available on [Read the Docs](https://musicplayerplus.readthedocs.io/en/latest/)\n\nAll MusicPlayerPlus commands have manual pages. Execute `man \u003ccommand-name\u003e`\nto view the manual page for a command. The `mpplus` frontend is the primary\nuser interface for MusicPlayerPlus and the manual page for `mpplus` can be\nviewed with the command `man mpplus`. Most commands also have\nhelp/usage messages that can be viewed with the **-u** argument option,\ne.g. `mpplus -u`.\n\n### README for MusicPlayerPlus configuration\n- [**config/README.md**](config/README.md) - Overview and details of the MusicPlayerPlus configuration\n\n### README for mpcplus MPD client\n- [**mpcplus/README.md**](https://github.com/doctorfree/mpcplus/README.md) - Introduction to the mpcplus MPD client\n\n### README for tmuxp configs\n- [**config/tmuxp/README.md**](config/tmuxp/README.md) - How to invoke the MusicPlayerPlus provided `tmuxp` session configurations\n\n### Man Pages\n\n- [**mpplus**](markdown/mpplus.1.md) : Primary MusicPlayerPlus user interface\n- [**mppcava**](markdown/mppcava.1.md) : Audio Spectrum Visualizer\n- [**mppjulia**](markdown/mppjulia.1.md) : asciimatics animation of a Julia Set\n- [**mpprocks**](markdown/mpprocks.1.md) : asciimatics animation of MusicPlayerPlus intro\n- [**mppplasma**](markdown/mppplasma.1.md) : asciimatics animation with Plasma effect\n- [**mppinit**](markdown/mppinit.1.md) : MusicPlayerPlus initialization\n- [**mppcover**](markdown/mppcover.1.md) : Displays album cover art for currently playing song\n- [**mppdl**](markdown/mppdl.1.md) : Downloads audio tracks from Bandcamp, Soundcloud, or a URL\n- [**mpcplus-tmux**](markdown/mpcplus-tmux.1.md) : MusicPlayerPlus in a tmux session\n- [**mpcplus**](markdown/mpcplus.1.md) : MusicPlayerPlus MPD client\n- [**mpcpluskeys**](markdown/mpcpluskeys.1.md) : Cheat sheet for `mpcplus` MPD client navigation\n- [**mppsplash-tmux**](markdown/mppsplash-tmux.1.md) : MusicPlayerPlus asciimatics animations in a tmux session\n- [**mppsplash**](markdown/mppsplash.1.md) : MusicPlayerPlus asciimatics animations\n- [**mpd-configure**](markdown/mpd-configure.1.md) : MPD configuration generator\n- [**mpd-monitor**](markdown/mpd-monitor.1.md) : Display info on currently playing MPD song\n- [**beet**](markdown/beet.1.md) : Beets media library management command-line interface\n- [**beetsconfig**](markdown/beetsconfig.5.md) : Beets media library management configuration\n- [**bandcamp-dl**](markdown/bandcamp-dl.1.md) : Download Bandcamp collections\n- [**blissify**](markdown/blissify.1.md) : create MPD playlists using song similarity database\n- [**scdl**](markdown/scdl.1.md) : Download Soundcloud favorites\n- [**fzmp**](markdown/fzmp.1.md) : List and search MPD media using fuzzy find\n- [**artist_to_albumartist**](markdown/artist_to_albumartist.1.md) : Copies the Artist tag to the AlbumArtist tag\n- [**listyt**](markdown/listyt.1.md) : List YouTube video titles and urls\n- [**yt-dlp**](markdown/yt-dlp.1.md) : Download YouTube and other sites videos and audio\n- [**create_playlist**](markdown/create_playlist.1.md) : Create playlists using Beets queries\n\n### Usage\n\nThe primary MusicPlayerPlus user interface is the `mpplus` command.\nExecute `mpplus -o` to open the `mpcplus` MPD client and the `mppcava`\nspectrum visualizer. The command `mpplus` without arguments displays\na series of interactive menus from which most of the MusicPlayerPlus\ntasks can be launched.\n\nThe `mpc` command provides a quick and easy command line interface\nto control the Music Player Daemon playback. The `mpc` command has\nmany command line options, see `man mpc` for a full description.\nTo get started with simple MPD playback control using `mpc`:\n\n**mpc toggle**\n: start playback if stopped or paused, and pause playback if playing\n\n**mpc stop**\n: stop playback\n\n**mpc next**\n: move to next song in playlist\n\n**mpc prev**\n: move to previous song in playlist\n\n**mpc volume +|- percent**\n: increase or decrease volume by 'percent'\n\nThe `beet play [QUERY]` command can be used to specify a song or songs\nto play where 'QUERY' is a Beets query matching songs in the music library.\n\nThe usage messages for `mppinit`, `mpplus`, `mpcplus`, and `mppcava`\nprovide a brief summary of the command line options.\n\n`mppinit` performs one-time initializations.\n\n\u003cdetails\u003e\u003csummary\u003eClick here to view the\n\n**mppinit usage message**\n\n\u003c/summary\u003e\n\n```text\nUsage: mppinit [-a] [-b] [-d] [-e] [-l music_dir] [-n] [-o] [-q] [-r] [-U] [-y] [-u] [bandcamp|cantata|discogs|discogs local|discogs upload vault folder|import|kitty|metadata|mopidy|mpd|navidrome|soundcloud|spotify|sync|yams|youtube]\nWhere:\n\t'-a' use AcousticBrainz for acoustic audio analysis [deprecated]\n\t'-b' use Blissify for MPD acoustic audio analysis\n\t'-d' install latest Beets development branch rather than\n\t\tthe latest stable release (for testing purposes)\n\t'-e' use Essentia for Beets acoustic audio analysis (default)\n\t'-l music_dir' specifies the location of the music library\n\t'-n' indicates perform a dry run, don't do anything just tell me\n\t'-o' indicates overwrite any pre-existing configuration\n\t'-q' indicates quiet execution, no status messages\n\t'-r' indicates remove service\n\t\tsupported service removals: mopidy navidrome\n\t'-U' indicates do not upgrade installed Python modules\n\t'-y' indicates answer 'yes' to all and proceed\n\t'-u' displays this usage message and exits\n\n\t'bandcamp' downloads all albums in your Bandcamp collections\n\t'cantata' installs the Cantata MPD graphical client\n\t'discogs' generates an Obsidian vault from your Discogs user collection\n\t'discogs local' generates an Obsidian vault from your local music library\n\t'discogs upload vault folder' adds the releases in 'vault' to\n\tDiscogs user collection folder 'folder'\n\t\t(DISCOGS_USER and DISCOGS_TOKEN in '~/.config/mpprc must be set)\n\t'import' performs a Beets music library import\n\t'kitty' installs the Kitty terminal emulator\n\t'metadata' performs a library metadata update\n\t'mopidy' installs and configures Mopidy extensible music server\n\t\tNote: activating Mopidy deactivates MPD\n\t'mpd' activates the MPD music server and deactivates Mopidy\n\t'navidrome' installs and configures Navidrome music server\n\t\tNote: 'mppinit navidrome \u003cversion\u003e' can be used to specify\n\t\tan alternate version of Navidrome to download and install\n\t'soundcloud' downloads all favorites in your Soundcloud account\n\t'spotify' installs the Spotify Music client spotify_player\n\n\t'sync' synchronizes MusicPlayerPlus configuration across configs\n\t'yams' activates the YAMS Last.fm scrobbler service\n\t'youtube' installs the YouTube Music client youtube-music\n\n\n'mppinit' must be run as the MusicPlayerPlus user, not root.\n'mppinit' must be run prior to 'mppinit sync', 'mppinit kitty',\n\t'mppinit metadata', 'mppinit bandcamp', 'mppinit mopidy',\n\t'mppinit navidrome', 'mppinit soundcloud', or 'mppinit import'\n```\n\n\u003c/details\u003e\n\nThe `mpplus` command serves as a general user interface for all of the\nMusicPlayerPlus capabilities.\n\n\u003cdetails\u003e\u003csummary\u003eClick here to view the\n\n**mpplus usage message**\n\n\u003c/summary\u003e\n\n```text\nUsage: mpplus [-A on|off] [-a] [-b] [-B] [-c] [-C client] [-E] [-e] [-F]\n\t[-f] [-G] [-g] [-D art|bandcamp|discogs|local|soundcloud] [-d music_directory]\n\t[-h] [-H] [-I] [-i|-o] [-jJ] [-k] [-K] [-l config|mopidy|navidrome|spotify|status]\n    [-L] [-m] [-n num] [-N] [-M alsaconf|enable|disable|restart|start|stop|status]\n    [-p] [-P script] [-q] [-Q] [-r] [-R] [-s song] [-S] [-t] [-T on|off] [-U vault]\n\t[-u] [-v viz_comm] [-w|W] [-x query] [-X query] [-y] [-Y] [-z fzmpopt] [-Z]\nMPCplus/Visualizer options:\n\t-A 'on|off' specifies whether to display album cover art\n\t-C 'client' indicates use 'client' MPD client rather than mpcplus\n\t-E indicates do not use gradient colors for spectrum visualizer\n\t-f indicates fullscreen display\n\t-h indicates half-height for visualizer window (with -f only)\n\t-H indicates disable use of extended window manager hints\n\t-P script specifies the ASCIImatics script to run in visualizer pane\n\t-q indicates quarter-height for visualizer window (with -f only)\n\t-c indicates use current terminal emulator / console mode\n\t-e indicates use simple terminal emulator\n\t-g indicates use gnome terminal emulator\n\t-k indicates use kitty terminal emulator\n\t-r indicates use retro terminal emulator\n\t-t indicates use tilix terminal emulator\n\t-v 'viz_comm' indicates use visualizer 'viz_comm' rather than mppcava\nASCIImatics animation options:\n\t-a indicates play audio during ASCIImatics display\n\t-b indicates use backup audio during ASCIImatics display\n\t-j indicates use Julia Set scenes in ASCIImatics display\n\t-J indicates Julia Set with several runs using different parameters\n\t-m indicates use MusicPlayerPlus scenes in ASCIImatics display\n\t-n num specifies the number of times to cycle ASCIImatics scenes\n\t-N indicates use alternate comments in Plasma ASCIImatics scenes\n\t-p indicates use Plasma scenes in ASCIImatics display\n\t-s song specifies a song to accompany an ASCIImatics animation\n\t\t'song' can be the full pathname to an audio file or a\n\t\trelative pathname to an audio file in the MPD music library\n\t\tor /home/ronnie/Music/\n\t-S indicates display ASCIImatics splash animation\nGeneral options:\n\t-B indicates analyze MPD music dir with Blissify and exit\n\t-D 'art' indicates download album cover art and exit\n\t-D 'bandcamp' indicates download Bandcamp songs and exit\n\t-D 'soundcloud' indicates download Soundcloud songs and exit\n\t-D 'discogs' generate markdown from Discogs collection\n\t-D 'local' generate markdown from local music library\n\t-Q indicates display MusicPlayerPlus info and exit\n\t-U 'vault' indicates upload releases in 'vault' to Discogs collection\n\t-Z performs a dry run of a Discogs collection upload\n\t-d 'music_directory' specifies the music directory to use for\n\t\tdownloaded album cover art. Without this option -D will use\n\t\tthe 'MUSIC_DIR' setting in '~/.config/mpprc'\n\t-F indicates convert WAV format files in the music library\n\t\tto MP3 format files and exit. A subsequent 'mpplus -I' import\n\t\twill be necessary to import these newly converted music files.\n\t-G indicates convert M4A format files in the music library\n\t\tto MP3 format files and exit. A subsequent 'mpplus -I' import\n\t\twill be necessary to import these newly converted music files.\n\t-I indicates import albums and songs from 'music_directory' to beets and exit\n\t\tIn conjunction with '-I', the '-A on' option disables auto-tagging\n\t-i indicates start mpplus in interactive mode (display the menu system)\n\t-o indicates start mpplus in non-interactive mode (no menu system)\n\t-K indicates kill MusicPlayerPlus tmux sessions and ASCIImatics scripts\n\t-l 'config' launches an editor in a terminal window to configure MusicPlayerPlus\n\t-l 'mopidy' opens Mopidy in the default browser if the Mopidy service is active\n\t-l 'navidrome' opens Navidrome in the default browser if the Navidrome service is active\n\t-l 'spotify' launches the Spotify Player in a terminal window\n\t-l 'status' displays services status and exits\n\t-L indicates download lyrics to the Beets library and exit\n\t-M 'action' can be used to control the Music Player Daemon (MPD)\n\t    or configure the ALSA sound system\n\t\tALSA configuration will update the ALSA configuration in '/etc/asound.conf'\n\t-R indicates record tmux session with asciinema\n\t\tAsciinema is not installed by MusicPlayerPlus\n\t\tTo record tmux sessions with asciinema, use your system's\n\t\tpackage manager to install it (e.g. apt install asciinema)\n\t-T 'on|off' specifies whether to use a tmux session\n\t-w indicates write metadata during beets import\n\t-W indicates do not write metadata during beets import\n\t-x 'query' uses AcousticBrainz to retrieve audio-based information\n\t\tfor all music library media matching 'query' [deprecated]. A query\n\t\tof 'all' performs the retrieval on the entire music library.\n\t-X 'query' performs an analysis and retrieval, using Essentia,\n\t\tof audio-based information for all music library media\n\t\tmatching 'query'. A query of 'all' performs the analysis\n\t\tand retrieval on the entire music library.\n\t-Y initializes the YAMS last.fm scrobbler service\n\t-y disables the YAMS last.fm scrobbler service\n\t-z fzmpopt specifies the fzmp option and invokes fzmp to\n\t\tlist/search/select media in the MPD library.\n\t\tValid values for fzmpopt are 'a', 'A', 'g', 'p', or 'P'\n\t-u displays this usage message and exits\n\nType 'man mpplus' for detailed usage info on mpplus\nType 'man mpcplus' for detailed usage info on the mpcplus MPD client\nType 'man mppsplash' for detailed usage info on the mppsplash command\n```\n\n\u003c/details\u003e\n\nThe `mpcplus` command is an MPD client and acts as the primary\nMusicPlayerPlus music player.\n\n\u003cdetails\u003e\u003csummary\u003eClick here to view the\n\n**mpclus usage message**\n\n\u003c/summary\u003e\n\n```text\nUsage: mpcplus [options]...\nOptions:\n  -h [ --host ] HOST (=localhost)       connect to server at host\n  -p [ --port ] PORT (=6600)            connect to server at port\n  --current-song [=FORMAT(=\u003cformat string\u003e)]\n                                        print current song using given format\n                                        and exit\n  -c [ --config ] PATH (=~/.config/mpcplus/config AND ~/.mpcplus/config)\n                                        specify configuration file(s)\n  --ignore-config-errors                ignore unknown and invalid options in\n                                        configuration files\n  --test-lyrics-fetchers                check if lyrics fetchers work\n  -b [ --bindings ] PATH (=~/.config/mpcplus/bindings AND ~/.mpcplus/bindings)\n                                        specify bindings file(s)\n  -s [ --screen ] SCREEN                specify the startup screen\n  -S [ --slave-screen ] SCREEN          specify the startup slave screen\n  -? [ --help ]                         show help message\n  -v [ --version ]                      display version information\n  -q [ --quiet ]                        suppress logs and excess output\n```\n\n\u003c/details\u003e\n\nThe mpcplus MPD client has a customized set of key bindings that allow\nquick and easy control of MPD, searches, lyrics display, client navigation,\nand much more via the keyboard. View the\n[**mpcpluskeys man page**](markdown/mpcpluskeys.1.md) with the command\n`man mpcpluskeys`.\n\nThe `mppsplash` command can be used to display a variety of character\nbased animations optionally accompanied by audio.\n\n\u003cdetails\u003e\u003csummary\u003eClick here to view the\n\n**mppsplash usage message**\n\n\u003c/summary\u003e\n\n```text\nUsage: mppsplash [-A] [-a] [-b] [-C] [-c num] [-d] [-jJ] [-m] [-p] [-s song] [-u]\nWhere:\n  -A indicates use all effects\n  -a indicates play audio during ASCIImatics display\n  -b indicates use backup audio during ASCIImatics display\n  -C indicates use alternate comments in Plasma effect\n  -c num specifies the number of times to cycle\n  -d indicates enable debug mode\n  -j indicates use Julia Set effect\n  -J indicates Julia Set with several runs using different parameters\n  -m indicates use MusicPlayerPlus effect\n  -p indicates use Plasma effect\n  -s song specifies the audio file to play as accompaniment\n    'song' can be the full pathname to an audio file or a relative\n    pathname to an audio file in the MPD music library or\n    $HOME/Music/\n  -u displays this usage message and exits\n```\n\n\u003c/details\u003e\n\nThe `mppcava` command is the MusicPlayerPlus custom character based\naudio spectrum visualizer.\n\n\u003cdetails\u003e\u003csummary\u003eClick here to view the\n\n**mppcava usage message**\n\n\u003c/summary\u003e\n\n```text\nUsage : mppcava [options]\nVisualize audio input in terminal.\n\nOptions:\n    -p          path to config file\n    -v          print version\n\nKeys:\n        Up        Increase sensitivity\n        Down      Decrease sensitivity\n        Left      Decrease number of bars\n        Right     Increase number of bars\n        r         Reload config\n        c         Reload colors only\n        f         Cycle foreground color\n        b         Cycle background color\n        q         Quit\n\nAll options are specified in a config file. See `$HOME/.config/mppcava/config`\n```\n\n\u003c/details\u003e\n\n### Example client invocations\nThe `mpplus` command is intended to serve as the primary interface to invoke\nthe `mpcplus` MPD client and `mppcava` spectrum visualizer. The `mpplus` command\nutilizes several different terminal emulators and can also be used to invoke\nany specified MPD client. Some example invocations of `mpplus` follow.\n\nOpen the mpcplus client and spectrum visualizer in fullscreen mode:\n\n`mpplus -f`\n\nOpen the mpcplus client and mppcava visualizer in fullscreen mode using the\ntilix terminal emulator and displaying the visualizer using quarter-height:\n\n`mpplus -f -q -t`\n\nOpen the cantata MPD graphical client and mppcava visualizer:\n\n`mpplus -C cantata`\n\nOpen the mpcplus client in the cool-retro-term terminal and mppcava visualizer\nin kitty:\n\n`mpplus -r`\n\nBrowse, list, search, and select media in the MPD library using the\n`fzf` fuzzy finder utility.\n\nSearch artist then filter by album using `fzf`:\n\n`mpplus -z a`\n\nSearch all songs in the library using `fzf`:\n\n`mpplus -z A`\n\nSearch the current playlist using `fzf`:\n\n`mpplus -z p`\n\nThe mpcplus MPD client can be opened directly without using mpplus.\nSimilarly, the mppcava spectrum visualizer can be opened directly without mpplus.\n\n`mpcplus` # In one terminal window\n\n`mppcava` # In another terminal window\n\nTo test the mpcplus lyrics fetchers:\n\n`mpcplus --test-lyrics-fetchers`\n\n### Adding Album Cover Art\n\nThe `mpcplus` MPD client is a character-based application. As such, it is\ndifficult to display graphical images. However, this limitation can be\novercome using `tmux` and additional tools. In this way we can add album\ncover art to MusicPlayerPlus when using the character-based `mpcplus` client.\n\nSee [Adding album art to MusicPlayerPlus](config/README.md) to get\nstarted integrating album art in MusicPlayerPlus.\n\nAn album cover art downloader is included in MusicPlayerPlus. To download\ncover art for all of the albums in your MPD music directory, run the command:\n\n```console\nmpplus -D art\n```\n\nCover art for each album is saved as the file `cover.jpg` in the album folder.\nExisting cover art is preserved. If an album has incorrect album cover art and\nBeets library management has been activated with `mppinit import`, update the\nalbum cover art for that album with the command `beet fetchart -f \u003cquery\u003e`\nwhere `\u003cquery\u003e` is a Beets query that identifies that album. For example,\nto update the album cover art for the album \"Eldorado\" by Electric Light\nOrchestra, issue the command `beet fetchart -f electric eldorado`.\n\n### Custom key bindings\n\nA few custom key bindings are configured during MusicPlayerPlus initialization\nwith the `mppinit` command. These are purely for convenience and can be altered\nor removed if desired.\n\nTmux custom key bindings are defined in `$HOME/.tmux.conf`.\nMusicPlayerPlus custom key bindings for tmux sessions include the following:\n\n-   `[ Alt-PgDn ]`     - Next window\n-   `[ Shift-Right ]`  - Next window\n-   `[ Alt-PgUp ]`     - Previous window\n-   `[ Shift-Left ]`   - Previous window\n-   `[ Alt-x ]`        - Prompt to kill session\n-   `[ Alt-X ]`        - Kill session\n-   `[ Alt-Left ]`     - Move pane focus to left\n-   `[ Alt-Right ]`    - Move pane focus to right\n-   `[ Alt-Up ]`       - Move pane focus up\n-   `[ Alt-Down ]`     - Move pane focus down\n-   `[ Prefix q ]`     - Prompt to kill session\n-   `[ Prefix Q ]`     - Kill session\n\nThe tmux prefix key is remapped from `Ctrl-b` to `Ctrl-a` and the status bar\nis configured to display a `Ctrl` message when the prefix key is pressed.\n\nThe MusicPlayerPlus tmux customization enables tmux mouse mode. The mouse can\nbe used to select and resize tmux panes and windows.\n\nThere are hundreds of tmux key bindings. To view the currently configured\ntmux key bindings, execute the command `tmux list-keys`.\n\nCustom key bindings are also defined for the `mpcplus` music player client\ncommand. Mpcplus custom key bindings are defined in\n`$HOME/.config/mpcplus/bindings`. MusicPlayerPlus custom key bindings for\n`mpcplus` include the following:\n\n-   `[ Alt-c ]` - Display album cover art for currently playing song\n-   `[ Alt-f ]` - Open the fuzzy finder to search/select media\n-   `[ Alt-m ]` - Open the MPD monitor in a terminal window\n-   `[ Alt-r ]` - Raise/lower the spectrum visualizer window\n\n#### Tmux session exit issues\n\nIn addition to the `Alt-x` and `Alt-X` key bindings above to kill the current\ntmux session, MusicPlayerPlus tmux key bindings include `Ctrl-a q` and\n`Ctrl-a Q` which also are mapped to `kill-session` in a similar manner. This\nis because some terminal emulators, in particular iTerm2, may already have key\nbindings for the `Alt` key or the Meta key may be something other than `Alt`.\n\nIn a MusicPlayerPlus tmux session, if `Alt-x` and `Alt-X` do not initiate\na `kill-session` then use the configured tmux prefix key (e.g. `Ctrl-a`)\nfollowed by `q` or `Q` to exit the current tmux session.\n\nIf a MusicPlayerPlus tmux session has been initiated over SSH using the\nTerminal app on macOS then it may be necessary to configure the Terminal\nprofile in use to \"Use Option as Meta key\" in order to recognize the custom\ntmux key bindings using the `Alt` key. To configure the Terminal app profile\nin this manner, go to `Terminal -\u003e Preferences -\u003e Profiles`. Select the\nprofile you are using (usually \"Basic Default\") and select the `Keyboard` tab.\nClick the \"Use Option as Meta key\" checkbox and exit Terminal preferences.\n\n## Removal\n\nOn Debian based Linux systems where the MusicPlayerPlus package was installed\nusing the MusicPlayerPlus Debian format package, remove the MusicPlayerPlus\npackage by executing the command:\n\n```console\n    sudo apt remove musicplayerplus\n```\nor\n```console\n    sudo dpkg -r musicplayerplus\n```\n\nOn RPM based Linux systems where the MusicPlayerPlus package was installed\nusing the MusicPlayerPlus RPM format package, remove the MusicPlayerPlus\npackage by executing the command:\n\n```console\n    sudo dnf remove MusicPlayerPlus\n```\nor\n```console\n    sudo rpm -e MusicPlayerPlus\n```\n\nOn Arch based Linux systems where the MusicPlayerPlus package was installed\nusing the MusicPlayerPlus Pacman format package, remove the MusicPlayerPlus\npackage by executing the command:\n\n```console\n    sudo pacman -Rs musicplayerplus\n```\n\nThe MusicPlayerPlus package can be removed by executing the \"Uninstall\"\nscript in the MusicPlayerPlus source directory:\n\n```console\n    git clone https://github.com/doctorfree/MusicPlayerPlus.git\n    cd MusicPlayerPlus\n    ./Uninstall\n```\n\n## Troubleshooting\nMany problems encountered with MusicPlayerPlus often resolve to problems with\nthe underlying Linux audio configuration. As a first step in troubleshooting,\nverify the audio subsystem is functioning properly. Most systems use either\nALSA or PulseAudio and there are numerous audio test guides available.\n\nMusicPlayerPlus includes a convenience script to test the ALSA audio subsystem.\nThe command `alsa_audio_test` can be run to test your ALSA audio setup.\nIf successful you will hear the test output of the `aplay` command.\nTo view a `alsa_audio_test` usage message and current ALSA configuration\nsettings, run the command `alsa_audio_test -u`\n\nAnother source of problems to investigate is the Music Player Daemon (MPD).\nThis is the music streaming server that MusicPlayerPlus connects to. MPD\nis run as a system service that runs automatically. You can check the status\nof the MPD service by running the command `systemctl --user status mpd`.\nYou can restart the MPD service with `systemctl --user restart mpd.service`.\nIf the issue is not resolved by a restart or reboot, check the MPD log file\nat `$HOME/.config/mpd/log` looking for recent failures and exceptions.\n\nIt may be the case that the root of a problem is a missing dependency.\nMusicPlayerPlus should have installed any missing dependencies but one\nmay have been overlooked, improperly installed, or subsequently removed.\nIf the system logs or error output indicates something was \"not found\"\nthen check for its existence. On Debian based systems there is a nice\nrepository package index maintained. If a command was not found, it is\noften possible to simply type that command at a shell prompt and the\nDebian packaging system will be searched for any packages that contain\na command with that name. If a likely looking package is returned, the\nproblem may be solved by installing that package.\n\nFinally, see the Troubleshooting section of the\n[MusicPlayerPlus Wiki](https://github.com/doctorfree/MusicPlayerPlus/wiki).\nfor additional troubleshooting techniques and commonly resolved issues.\n\nIf an issue cannot be resolved and all troubleshooting efforts have\nfailed, open an issue at\n[MusicPlayerPlus issues](https://github.com/doctorfree/MusicPlayerPlus/issues).\nEven if you do manage to resolve an issue, it may still be helpful to\nreport the issue at https://github.com/doctorfree/MusicPlayerPlus/issues\nso that a fix may be incorporated in the next release.\n\n### Known issues\n\n#### Tmux key bindings in iTerm2 terminal emulator\n\nThe `iTerm2` terminal emulator has built-in support for tmux. Several of\nthe iTerm2 built-in tmux key bindings conflict with and override the default\ntmux key bindings and the MusicPlayerPlus custom tmux key bindings.\n\nUnless you are quite familiar with iTerm2 and its tmux implementation, we do\nnot recommend using iTerm2 with MusicPlayerPlus when running tmux sessions.\n\nMusicPlayerPlus support for iTerm2 may be forthcoming in future releases but\nat this time iTerm2 is not a supported MusicPlayerPlus terminal emulator.\n\n#### Tmux sessions over SSH to Fedora systems\n\nA tmux session initiated over SSH to a Fedora Linux system may size the\ntmux panes incorrectly. This issue is not yet understood but will hopefully\nbe addressed in a future release of MusicPlayerPlus. If, for example, a\n`mpplus` or `mpcplus-tmux` tmux session displays the `mpcplus` pane with\na small height while the spectrum visualizer pane consumes most of the session\nwindow, then the `mpcplus` pane will need to be resized manually.\n\nTmux panes can be resized either using keyboard shortcuts or with the mouse.\n\nTo resize the `mpcplus` tmux pane using the mouse, click and drag the bottom\nof the upper pane in the session window. Drag the pane border down until the\n`mpcplus` display of music media appears.\n\nTo resize the `mpcplus` tmux pane using keyboard shortcuts, use one of the\ndefault tmux key bindings:\n\n```\nbind-key -r -T prefix       M-Up              resize-pane -U 5\nbind-key -r -T prefix       M-Down            resize-pane -D 5\nbind-key -r -T prefix       M-Left            resize-pane -L 5\nbind-key -r -T prefix       M-Right           resize-pane -R 5\nbind-key -r -T prefix       C-Up              resize-pane -U\nbind-key -r -T prefix       C-Down            resize-pane -D\nbind-key -r -T prefix       C-Left            resize-pane -L\nbind-key -r -T prefix       C-Right           resize-pane -R\n```\n\nThis means you can resize a pane by `\u003cprefix\u003e` `Alt ↓` (tmux prefix followed\nby \"Alt-DownArrow\"). The default MusicPlayerPlus tmux prefix is `Ctrl-a` so in\norder to resize the `mpcplus` pane using the keyboard, type `Ctrl-a` then type\n`Alt ↓`. You can repeat `Alt ↓` several times without needing to re-type the\n`Ctrl-a` prefix if you type it fast enough (about a second). If the display of\n`Ctrl` on the tmux status line disappears and you still need to resize the\n`mpcplus` pane, then you will need to re-type the prefix key `Ctrl-a`.\n\nThis issue has only been detected on Fedora Linux over SSH. However, it may\noccur with other systems and may not be exclusive to either SSH or Fedora.\n\n## Infrared remote control of MPD\n\nAdvanced users may wish to add remote control capabilities to MusicPlayerPlus.\nGetting IR remote control of MPD working is pretty geeky and fun. Also cool.\n\nThis can be accomplished on most Linux systems using LIRC (Linux Infrared\nRemote Control). LIRC setup and usage is described at\nhttps://wiki.archlinux.org/title/LIRC\n\nTo get started, see the\n[ArchLinux Step-by-step LIRC setup guide](https://wiki.archlinux.org/title/LIRC/Quick_start_guide)\nfor USB IR receiver with universal remote control.\n\nThe only prerequisites are a USB IR receiver, preferably an MCE model, and\nan old universal remote control you have lying around the house.\n\nA long list of LIRC supported remotes with corresponding LIRC configurations\ncan be found at the\n[LIRC Remotes Databass](http://lirc-remotes.sourceforge.net/remotes-table.html).\n\n\nThe hard part is getting the remote control device talking to the IR receiver\nsince there are a number of different protocols and devices supported.\nThe LIRC setup guide linked above has pretty good step-by-step procedures for\nestablishing communication between the remote and the receiver.\n\nOnce the hardware is successfully communicating, you can control MPD with `lirc`\nand `mpc` by configuring lirc. For example, add the following to `~/.lircrc`:\n\n```\n## irexec\nbegin\n     prog = irexec\n     button = play_pause\n     config = mpc toggle\n     repeat = 0\nend\n\nbegin\n     prog = irexec\n     button = stop\n     config = mpc stop\n     repeat = 0\nend\nbegin\n     prog = irexec\n     button = previous\n     config = mpc prev\n     repeat = 0\nend\nbegin\n     prog = irexec\n     button = next\n     config = mpc next\n     repeat = 0\nend\nbegin\n     prog = irexec\n     button = volup\n     config = mpc volume +2\n     repeat = 1\nend\nbegin\n     prog = irexec\n     button = voldown\n     config = mpc volume -2\n     repeat = 1\nend\nbegin\n     prog = irexec\n     button = pbc\n     config = mpc random\n     repeat = 0\nend\nbegin\n     prog = irexec\n     button = pdvd\n     config = mpc update\n     repeat = 0\nend\nbegin\n     prog = irexec\n     button = right\n     config = mpc seek +00:00:05\n     repeat = 0\nend\nbegin\n     prog = irexec\n     button = left\n     config = mpc seek -00:00:05\n     repeat = 0\nend\nbegin\n     prog = irexec\n     button = up\n     config = mpc seek +1%\n     repeat = 0\nend\nbegin\n     prog = irexec\n     button = down\n     config = mpc seek -1%\n     repeat = 0\nend\n```\n\nA guide for configuring `lirc` to control MPD using `mpc` can be found at\nhttps://wiki.archlinux.org/title/Music_Player_Daemon/Tips_and_tricks#Control_MPD_with_lirc\n\n## Screenshots\n\n\u003cp float=\"left\"\u003e\n  \u003cimg src=\"screenshots/mpplus-tilix.png\" style=\"width:800px;height:600px;\"\u003e\n  \u003cimg src=\"screenshots/mpplus-lyrics.png\" style=\"width:800px;height:600px;\"\u003e\n\u003c/p\u003e\n\n## Videos\n\n- [![MusicPlayerPlus Intro](https://i.imgur.com/UH2A21h.png)](https://www.youtube.com/watch?v=r7XLA9tO45Q \"MusicPlayerPlus ASCIImatics Intro\")\n- [![MusicPlayerPlus Demo](https://i.imgur.com/ZntE1sH.jpg)](https://www.youtube.com/watch?v=y2yaHm04ELM \"MusicPlayerPlus Demo\")\n\n## Building MusicPlayerPlus from source\n\nMusicPlayerPlus can be packaged and installed from the source code\nrepository. This should be done as a normal user with `sudo` privileges:\n\n```\n# Retrieve the source code from the repository\ngit clone https://github.com/doctorfree/MusicPlayerPlus.git\n# Enter the MusicPlayerPlus source directory\ncd MusicPlayerPlus\n# Create an installation package\n./mkpkg\n# Install MusicPlayerPlus and its dependencies\n./Install\n```\n\nThese steps are detailed below.\n\n### Clone MusicPlayerPlus repository\n\n```\ngit clone https://github.com/doctorfree/MusicPlayerPlus.git\ncd MusicPlayerPlus\n```\n\n**[Note:]** The `mkpkg` script in the top level of the MusicPlayerPlus\nrepository can be used to build an installation package on all supported\nplatforms. After cloning, `cd MusicPlayerPlus` and `./mkpkg`. The resulting\ninstallation package(s) will be found in `./releases/\u003cversion\u003e/`.\n\n### Install packaging dependencies\n\nMusicPlayerPlus components have packaging dependencies on the following:\n\nOn Debian based systems like Ubuntu Linux, install packaging dependencies via:\n\n```\nsudo apt install dpkg\n```\n\nOn RPM based systems like Fedora Linux, install packaging dependencies via:\n\n```\nsudo dnf install rpm-build rpm-devel rpmlint rpmdevtools\n```\n\n### Build and package MusicPlayerPlus\n\nTo build and package MusicPlayerPlus, execute the command:\n\n```\n./mkpkg\n```\n\nOn Debian based systems like Ubuntu Linux, the `mkpkg` scripts executes\n`scripts/mkdeb.sh`.\n\nOn RPM based systems like Fedora Linux, the `mkpkg` scripts executes\n`scripts/mkrpm.sh`.\n\nOn PKGBUILD based systems like Arch Linux, the `mkpkg` scripts executes\n`scripts/mkaur.sh`.\n\n### Install MusicPlayerPlus from source build\n\nAfter successfully building and packaging MusicPlayerPlus with `./mkpkg`,\ninstall the MusicPlayerPlus package with the command:\n\n```\n./Install\n```\n\n## Contributing\n\nThere are a variety of ways to contribute to the MusicPlayerPlus project.\nAll forms of contribution are appreciated and valuable. Also, it's fun to\ncollaborate. Here are a few ways to contribute to the further improvement\nand evolution of MusicPlayerPlus:\n\n### Testing and Issue Reporting\n\nMusicPlayerPlus is fairly complex with many components, features, options,\nconfigurations, and use cases. Although currently only supported on\nLinux platforms, there are a plethora of Linux platforms on which\nMusicPlayerPlus can be deployed. Testing all of the above is time consuming\nand tedious. If you have a Linux platform on which you can install\nMusicPlayerPlus and you have the time and will to put it through its paces,\nthen issue reports on problems you encounter wou","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdoctorfree%2FMusicPlayerPlus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdoctorfree%2FMusicPlayerPlus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdoctorfree%2FMusicPlayerPlus/lists"}