Releases: A/musictl
Release list
v0.2.2
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-argsflag 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-completionreferences 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
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
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
updatecommand - Waybar integration:
waybarcommand outputs current track's folder and playlists as JSON - Shell completions: bash/zsh/fish via
--install-completion - Structured logging:
-v/-vv/-vvvverbosity flags
Bug Fixes
- Fix beets
modify()not persisting flexible attributes — switched tobeet modify -y -msubprocess - Fix
play --randompassing 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 removeusing non-existent-yflag — corrected to-f - Use
id:instead ofpath: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