Skip to content

Releases: A/musictl

v0.2.2

Choose a tag to compare

@github-actions github-actions released this 16 Mar 03:04
1d961b5

Enhanced track information display and improved file handling

New Features

  • Waybar output now includes artist and title information for the current track
  • Waybar command runs continuously using MPD idle events for real-time updates
  • Import command shows a metadata dialog to set artist, album, and genre before importing
  • Added -B/--beets-args flag to pass additional arguments to beet import

Bug Fixes

  • Playlist generation now skips non-audio files that cause MPD loading to fail
  • Fixed queue removal order in update/delete-current commands to prevent removing wrong tracks
  • Cue-split now preserves original sample rate instead of forcing 44.1kHz
  • Cue-split handles parsing errors gracefully instead of crashing

Changes

  • PyPI installation instructions added to README
  • Removed outdated --install-completion references from documentation

Upgrade Notes

No breaking changes.


Technical Details

[0.2.2] - 2026-03-16

Features

  • Add track artist and title to waybar text output

Changes

  • Update README: add PyPI install instructions, remove --install-completion

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

Other

  • Filter non-audio files from playlists, add pre-import metadata dialog

Playlist generation now skips non-audio entries (e.g. .fbak files) that
cause MPD's atomic load to fail. Import command shows a YAD form to set
artist/album/genre before beet import, writing tags via mutagen.

  • Preserve sample rate in cue-split, fix queue removal order, improve CLI

  • cue-split: stream-copy + remux for FLAC input, patch DATACODECS for non-FLAC
    to avoid ffcuesplitter's hardcoded -ar 44100

  • update/delete-current: remove track from MPD queue before modify+move/delete
    to avoid accidentally removing the next track

  • import: add -B/--beets-args flag for passing extra flags to beet import

  • cue-split command: handle RuntimeError from parse/split gracefully

  • Bump version to 0.2.2, update README

  • Preserve sample rate in cue-split, fix YAD output order, improve CLI

  • Pass sample rate to ffmpeg backend for lossless cue splitting

  • Remove --output-by-row from YAD columns so output matches field order

  • Add pre-import metadata dialog for setting folder/playlists

  • Simplify ffmpeg adapter interface and protocol definitions

  • Update tests to match new signatures

  • Make waybar command run continuously using MPD idle events

v0.2.1

Choose a tag to compare

@github-actions github-actions released this 08 Mar 16:59
7208d3b

Improved status display and streamlined queue management workflows.

New Features

  • Status display now includes nerd font icons and shows when tracks are in your inbox
  • Confirmation dialogs are now more compact and user-friendly

Changes

  • Queue cleaning is no longer automatic when updating or deleting current track - you now control when to clean your queue manually

Upgrade Notes

No breaking changes.


Technical Details

[0.2.1] - 2026-03-08

Other

  • Bump to 0.2.1: decouple clean-current, improve waybar output, fix yad height

  • Bump version to 0.2.1

  • Remove auto clean-current from update and delete-current commands (now called separately)

  • Improve waybar output with nerd font icons and inbox detection

  • Add --height=1 to yad confirm dialog

  • Fix docs: just test instead of uv run pytest

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 08 Mar 15:26
36e0572

Complete rewrite with clean architecture (adapters → services → commands), Protocol-based DI, and comprehensive test coverage.

New Features

  • CLI commands: search, play, update, delete-current, clean-current, import, cue-split, generate-playlists, rename-playlist, rename-folder, waybar
  • Playback modes: play --playlist NAME, play --random --count N, or pipe paths via stdin
  • Playlist generation: auto-generated m3u playlists — per-folder, per-tag, inbox, collection, no_playlist, all
  • Incremental playlist updates: diff-based regenerate() only rewrites changed files and removes stale ones
  • Track metadata editing: YAD dialog for folder/playlist assignment with update command
  • Waybar integration: waybar command outputs current track's folder and playlists as JSON
  • Shell completions: bash/zsh/fish via --install-completion
  • Structured logging: -v/-vv/-vvv verbosity flags

Bug Fixes

  • Fix beets modify() not persisting flexible attributes — switched to beet modify -y -m subprocess
  • Fix play --random passing absolute paths to MPD instead of relative URIs
  • Fix beets queries failing on paths with special characters (commas, colons) — exact path matching in Python
  • Fix beet remove using non-existent -y flag — corrected to -f
  • Use id: instead of path: for subprocess-based beet commands to avoid CLI parsing issues

Changes

  • Rewritten from monolithic modules to layered architecture with Protocol-based dependency injection
  • Switched from Poetry to Hatch + uv, YAML config to Python dataclass, argparse to cyclopts
  • Added CI workflow (ruff, basedpyright, pytest) and PyPI publish workflow with git-cliff changelog