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

# 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


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)

Uploaded Source

Built Distribution

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

musictl-0.2.1-py3-none-any.whl (18.6 kB view details)

Uploaded Python 3

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

Hashes for musictl-0.2.1.tar.gz
Algorithm Hash digest
SHA256 dac68fcbda2d642faf42ac4bd2b98b320410aa2bfcfb462da43636aad8fb19c3
MD5 6d7f0f1875ea4d0ebd499024e11e0c06
BLAKE2b-256 2aaf8663fc11eabd0605f62e0abeb599c2e962e891a2347f41dde41288141fd0

See more details on using hashes here.

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

Hashes for musictl-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0ff5216fa70d1dfd495a6d138c59b83fb5772779320d38d541808935bc36d75e
MD5 ab2d1bdb51913f46ec6cae9c47c162a7
BLAKE2b-256 e0a1f4a8dbe569fb1bfb7160780f3be02d2a42a5051481539e65f0022f8e938f

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