Show HN: Waves – Terminal music player with download, tagging, and library
2 points
12 hours ago
| 0 comments
| github.com
| HN
Managing a local music library used to mean juggling multiple apps: a Soulseek client to find music, MusicBrainz Picard for tagging, a file manager to organize folders, and finally a music player. Every new album meant switching between windows, waiting for apps to rescan, and hoping everything ended up in the right place.

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.
No one has commented on this post.