I built Waves to collapse that entire workflow into a single keyboard-driven terminal app.
The workflow: - Press "f d" to search Soulseek directly from the player - Pick a release from MusicBrainz results, download matching files - Import with automatic tagging, album art fetching, and Picard-compatible renaming - Music lands in your library, ready to play
No window switching. No waiting for library rescans. No manual file shuffling.
But it's also just a solid music player: - Miller columns navigation (Artist > Album > Track) with vim bindings - Gapless playback, MP3/FLAC/Opus/M4A support - Radio mode: when your queue runs out, it uses Last.fm similar artists to keep playing from your own library - Last.fm scrobbling with offline queue - MPRIS support for desktop integration on Linux - Playlists with folders, favorites, queue with undo/redo - Full-text search across everything (SQLite FTS5) - State persistence: queue, position, everything survives restarts
Built with Go, Bubble Tea, and SQLite. Soulseek integration requires a running slskd instance (https://github.com/slskd/slskd).
go install github.com/llehouerou/waves@latest
# or on Arch
yay -S waves-bin
# or with Nix
nix run github:llehouerou/waves
Press "?" for keybindings once you're in. Happy to answer questions about the architecture or take feature requests.