Skip to main content

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 to genre)
  • playlists — comma-separated playlist names
  • comments — synced to playlists:$playlists for 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


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)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

musictl-0.2.2-py3-none-any.whl (21.3 kB view details)

Uploaded Python 3

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

Hashes for musictl-0.2.2.tar.gz
Algorithm Hash digest
SHA256 3a1b8e941bdcb81bbafaaf2b3038839fad58e856ff0a1f4d15ed6676e4c4d874
MD5 20006e587fda305ad59b6a8764f14798
BLAKE2b-256 8dba34b3c86807e45a03b645b615ccbb7c60fa69cbcf964a4897e52101c22b40

See more details on using hashes here.

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

Hashes for musictl-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 28afeabc0ce74df0bbb82917af792e2ba85bbe0ad88bff502295d7c9d8557e3a
MD5 963bc11648d1c8e96975aa64af6b219f
BLAKE2b-256 18d9dd27dec69f8555e90311fdea0043c28dcd01eb6e735c832ebca006c10b78

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page