Sola MPD is a web-based MPD client focused on usability with flexible browsing and search.
The primary goal of this client is to help users efficiently find specific songs within large music libraries and freely organize them into a queue and playlists. If you're looking for a table-oriented UI for better music management, this client might be a good fit. However, if you're seeking a player with fancy visual design, this may not be what you're looking for.
This client has the following features:
- Playback control (Play, Resume, Next, and so on)
- Play queue
- Flexible metadata browser (inspired by GMPC)
- MPD Playlist management
- Flexible search
=,!=,has,regular expression, etc- Flexible AND/OR combinations
- Saved searches (a.k.a Smart Playlist inspired by MusicBee)
- Database file tree
- Quick filtering box (inspired by MusicBee)
- Plugin for integration with other services
- Intuitive song table editing (powered by AG Grid)
- Multiple MPD servers
- Dark theme
- All songs (Simple full-text search)
- Responsive layout for tablets
- Supports touch devices
- Browse recently added artists, albums and composers
- Playlist sync with Subsonic API compatible service (via plugin)
- Advanced search (Beta, requires lainbow integration)
- Text-to-Music search (MuQ-MuLan)
- Similarity search (MuQ)
On the other hand, the following features are out of scope for now:
- Cover art
Feel free to file an issue if you are interested in any of missing capabilities.
Sola MPD only supports MPD version 0.21 or later.
Some features may use MPD's API in a suboptimal way (e.g., loading all songs at once). While the client has been tested and works well in my environment (with a library of approximately 85,000 songs), it might consume excessive memory with significantly larger libraries.
Sola MPD is a web based client and needs to be deployed on your server in the local network.
It can be the same server as the MPD server or on a different server, as long as it can communicate with the MPD server.
Sola MPD only requires Docker and Docker Compose to be installed on the server.
If you are using the latest version of Docker, the compose command is already included. Otherwise, you need to install it separately.
-
Ensure a docker process is running on the server
docker ps
If you have any issues, please confirm if you installed Docker correctly.
-
Clone this repository on your server
git clone https://github.com/prokosna/sola_mpd.git cd sola_mpd -
[Optional] Edit the docker-compose.yaml file if you want to change the port or other configurations
$ vi docker-compose.yaml -
For users migrating from
docker/start.sh: If you were using the previous version withdocker/start.sh, run the migration script before starting the new version:./docker/migrate_db.sh
This will copy your existing database from the old
sola_dbvolume to the new one. -
Start the application
docker compose up -d
-
Access to http://[Your Server IP]:3000 (or the port you configured) from your browser
-
In the setup dialog, please enter the endpoint of your mpd server which can be accessed from the Sola MPD server.
If you are using bridge mode and MPD is running on the same server, you need to use "host.docker.internal" instead of "localhost".
The main branch should be always the latest working branch.
You just need to stop the running container, pull the latest main branch and run the latest container.
$ cd sola_mpd
$ docker compose down
$ git pull origin main
$ docker compose up --build -d| Action | Description |
|---|---|
| Double click | Add the song to the end of the play queue and play that song |
| Shift + select a song | Range selection |
| Ctrl + select a song | Multiple selection |
| Ctrl + A | Select all visible songs |
| Space | Pause or resume playback |
| Add (Context menu) | Add the selected songs to the play queue |
| Replace (Context menu) | Replace the current play queue with the selected songs |
| Edit Columns (Context menu) | Edit the metadata to be used as columns - The order can be changed by directly dragging & dropping the column on the table. |
You can unlock the following features by setting up lainbow.
Once you have set up lainbow, you can just uncomment the following line in docker-compose.yaml,
args:
LAINBOW_ENDPOINT: "http://your.lainbow.endpoint:port/"then restart the container.
$ docker compose down
$ docker compose up --build -dSola MPD requires MuQ and MuQ-MuLan embeddings in the vector database for these features. After restarting the container, the "Advanced Search" tab will be available in the Settings page. If you use Settings > Advanced Search > Scan Library and Analyze buttons to prepare the vector database, only MuQ and MuQ-MuLan embeddings will be generated.
Please note that lainbow requires a NVIDIA GPU to generate embeddings. It works with CPU but it takes much longer time to generate embeddings.
This feature may require some engineering skill to set up. Feel free to let me know if you are interested in this feature but having some trouble setting it up.
Sola MPD has a plugin system to integrate with other services.
For example, I have a use case to synchronize MPD songs with a playlist in an application compatible with Subsonic API and have developed the Subsonic plugin.
To use the Subsonic plugin:
-
Uncomment the Subsonic plugin in
docker-compose.yaml -
Run the plugin container with Sola MPD
$ docker compose up --build -d -
On the Plugin page in Sola MPD, enter the plugin endpoint (in this case
[Your Server IP]:3001) and configure the plugin following a dialog. -
When the plugin is available, you will see
Sync with Subsonicin the right-click context menu and you can create a playlist with selected songs on Sola MPD as long as the exact same songs are available on Subsonic as well.
This plugin is quite specific to my use case, but you can use this as a reference to develop a custom plugin for your use case.
Sola MPD is written in TypeScript with React, Vite, Protocol Buffers, Jotai, etc.
# 1. Install dependencies, set up a husky hook for format/lint
$ npm i
# 2. Build the domain package first
$ npm run -w packages/domain build
# 3. Run dev servers
$ npm run dev