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
# From PyPI
uv tool install musictl
# Or from source
git clone https://github.com/A/musictl
cd musictl
uv tool install -e .
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, remove from queue |
musictl delete-current |
Delete current track from library and disk, remove from queue |
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
# Search and play from a specific folder
musictl search 'folder:rock' | musictl play
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.2.tar.gz
(64.7 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.2-py3-none-any.whl
(21.3 kB
view details)
File details
Details for the file musictl-0.2.2.tar.gz.
File metadata
- Download URL: musictl-0.2.2.tar.gz
- Upload date:
- Size: 64.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.10 {"installer":{"name":"uv","version":"0.10.10","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 |
3a1b8e941bdcb81bbafaaf2b3038839fad58e856ff0a1f4d15ed6676e4c4d874
|
|
| MD5 |
20006e587fda305ad59b6a8764f14798
|
|
| BLAKE2b-256 |
8dba34b3c86807e45a03b645b615ccbb7c60fa69cbcf964a4897e52101c22b40
|
File details
Details for the file musictl-0.2.2-py3-none-any.whl.
File metadata
- Download URL: musictl-0.2.2-py3-none-any.whl
- Upload date:
- Size: 21.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.10 {"installer":{"name":"uv","version":"0.10.10","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 |
28afeabc0ce74df0bbb82917af792e2ba85bbe0ad88bff502295d7c9d8557e3a
|
|
| MD5 |
963bc11648d1c8e96975aa64af6b219f
|
|
| BLAKE2b-256 |
18d9dd27dec69f8555e90311fdea0043c28dcd01eb6e735c832ebca006c10b78
|