Skip to content

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