NaviPy
Accessible Navidrome desktop client built with PySide6. Keyboard-first controls, live region announcements, and XDG-compliant configuration keep the app friendly for screen readers and shared systems.
This project is vibe coded. If you have problems with fully AI generated code, move along, nothing to see here. For people with a brain, keep reading, you will be impressed.
Features
- Browse artists, albums, playlists, and genres from your Navidrome server
- Keyboard-driven playback controls with live announcements
- Queue management (play now, next/previous, clear/remove)
- Track-change announcements (toggle in View → Announce Track Changes)
- Context menus on library/search trees (right click or Shift+F10/Menu) for play, queue, favorite
- Search dialog mirrors the tree (artists/albums/songs/genres) with expand/collapse, Enter to play, and context menus
- Discover section with recently added/played, frequently played, random albums, server “Now Playing”, and “Similar to current track”
- Favorites section listing all starred songs; press Enter to play all or open individual tracks
- Add-to-playlist from songs/albums/artists/genres/favorites via context menu (choose existing or create new)
- Desktop integrations via MPRIS (playback control, metadata, notifications)
- Config, data, and cache saved under XDG paths (
~/.config/stormux/navipy, etc.) - Does not log credentials; server secrets live in
servers.json
Requirements
- Python 3.9+ (PySide6)
- Qt multimedia runtime for audio playback (e.g.,
qt6-multimediapackage when using system Qt) - Navidrome server credentials
Setup
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Run
python3 navipy.py
Logs are written to ~/.local/share/stormux/navipy/navipy.log.
Configuration and Data Paths
- Config:
~/.config/stormux/navipy/settings.jsonandservers.json
Honors$XDG_CONFIG_HOME. Default path is~/.config/navipy. - Data (logs, runtime files):
~/.local/share/stormux/navipy/($XDG_DATA_HOMErespected) - Cache:
~/.cache/stormux/navipy/($XDG_CACHE_HOMErespected)
Keyboard Shortcuts
- Playback:
Spaceplay/pause,Xplay/resume,Ctoggle pause,Vstop - Navigation:
Zprevious,Bnext,Ctrl+Left/Rightprevious/next,Alt+Sshuffle,Alt+Rrepeat - Announcements:
Alt+Cannounce current track (live region),Ctrl+Tannounce track (dialog),Ctrl+Pannounce position - Volume:
Ctrl+Up/Downor0/9to adjust - Library/Search:
Ctrl+Oconnect,F5refresh,Ctrl+Fsearch,Alt+Icontext menu for current track/selection,Shift+F10or Menu key for item context menu
Playback Persistence
- Volume, shuffle, and repeat preferences persist in
settings.json - Repeat defaults to off; shuffle retains your last choice across launches
Accessibility Notes
- Live region announcements for status updates and explicit announce commands
- Accessible names/descriptions on interactive widgets
- Keyboard-only navigation throughout the UI
Development Tips
- Keep secrets out of logs;
servers.jsonstores credentials and is not tracked - Respect XDG env vars in scripts/tests to avoid polluting real user data
- Placeholder tests can be added under
tests/withpytest
Languages
Python
100%