555ca0bba9f59176f0dc065bcc95e54471204b42
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.
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)
- 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. Reads legacy~/.config/navipyif present. - 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
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%