Music control utility for MPD + beets
Project description
Musictl
Music control CLI for MPD + beets. Manage your library, playlists, and playback from the terminal.
Prerequisites
- Python ≥ 3.13
- MPD — running and configured
- beets — with library database and custom fields (
folder,playlists,comments) - YAD — for interactive dialogs (
update,delete-current) - FFmpeg — for
cue-split
Beets Setup
Musictl expects these beets flexible attributes:
folder— organizes tracks into directories (also synced togenre)playlists— comma-separated playlist namescomments— synced toplaylists:$playlistsfor external readers
Beets path config should include:
paths:
"folder::.+": $folder/$artist - $album - $track - $title
default: inbox/$genre/$artist - $album - $track - $title
Installation
# Clone and install with uv
git clone https://github.com/anthropics/musictl # replace with actual repo
cd musictl
uv sync
# Install shell completions (bash/zsh/fish)
uv run musictl --install-completion
Commands
| Command | Description |
|---|---|
musictl search <query> |
Search beets library, print relative paths |
musictl play <playlist> |
Load and play a playlist |
musictl play --random [--count N] |
Play N random tracks |
musictl update |
Set folder/playlists on current track via YAD dialog |
musictl delete-current |
Delete current track from library and disk |
musictl clean-current |
Remove current track from MPD queue |
musictl import [args] |
Import tracks via beet import |
musictl cue-split <file> --cue <cue> |
Split audio file by CUE sheet |
musictl generate-playlists |
Regenerate all .m3u playlist files |
musictl rename-playlist <old> <new> |
Rename a playlist across all tracks |
musictl rename-folder <old> <new> |
Rename a folder, move files, update tags |
musictl waybar |
JSON output for waybar custom module |
Piping
# Search and play results
musictl search 'artist:Beatles' | musictl play
# Chain: update current track, then remove from queue
musictl update && musictl clean-current
Waybar Integration
Add to your waybar config:
"custom/music": {
"exec": "musictl waybar",
"interval": 5,
"return-type": "json"
}
Hyprland Keybindings
bind = $mainMod, M, exec, musictl play --random --count 20
bind = $mainMod SHIFT, M, exec, musictl update
bind = $mainMod CTRL, M, exec, musictl delete-current
Development
just check # ruff check + basedpyright
just fmt # ruff fix + ruff format
just test # run tests
just sync # uv sync dependencies
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
musictl-0.2.1.tar.gz
(61.4 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
musictl-0.2.1-py3-none-any.whl
(18.6 kB
view details)
File details
Details for the file musictl-0.2.1.tar.gz.
File metadata
- Download URL: musictl-0.2.1.tar.gz
- Upload date:
- Size: 61.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dac68fcbda2d642faf42ac4bd2b98b320410aa2bfcfb462da43636aad8fb19c3
|
|
| MD5 |
6d7f0f1875ea4d0ebd499024e11e0c06
|
|
| BLAKE2b-256 |
2aaf8663fc11eabd0605f62e0abeb599c2e962e891a2347f41dde41288141fd0
|
File details
Details for the file musictl-0.2.1-py3-none-any.whl.
File metadata
- Download URL: musictl-0.2.1-py3-none-any.whl
- Upload date:
- Size: 18.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ff5216fa70d1dfd495a6d138c59b83fb5772779320d38d541808935bc36d75e
|
|
| MD5 |
ab2d1bdb51913f46ec6cae9c47c162a7
|
|
| BLAKE2b-256 |
e0a1f4a8dbe569fb1bfb7160780f3be02d2a42a5051481539e65f0022f8e938f
|