Terminal UI music player and library manager written in Go.
- Scan audio libraries into SQLite.
- Analyze duration, key, and BPM.
- Browse tracks, manage a queue, and play locally in a TUI.
- Library scanning with incremental updates.
- Track filtering, sorting, and favorites.
- Queue management and persistence.
- Built-in log view and log file viewer.
- Tag editing for MP3 and FLAC.
Build:
go build ./cmd/txpRun:
go run ./cmd/txpRun with a custom config path:
go run ./cmd/txp --config-path /path/to/config.jsonIf you pass a directory, it resolves to config.json inside that directory.
Config is JSON (schema in internal/config/config.go). The default path is ~/.txp/config.json.
Key fields:
libraries/selectedLibrarieslibrary_nav_cursormain_view:track_vieworlibrary_viewtheme,panel.libraryWidth,panel.queueWidth,panel.showTrackInfoshortcutsmapanalysis_*(window seconds, sample rate, BPM range)volume,enable_double_click_playback
Library paths are normalized to absolute paths and deduped.
TXP_LOG_PATH: override log file path.TXP_LOG_LEVEL:error(default),warn,info,debug.TXP_AUDIO_DIAG: enable periodic audio diagnostics logs (any non-empty value except0/false).
Playback:
.mp3 .ogg .flac .wav .aif .aiff .m4a
Analysis sampling:
.mp3 .ogg .flac .wav .aif .aiff .m4a
Tag writing:
- MP3 (ID3v2)
- FLAC (Vorbis comments)
.m4a decoding requires FFmpeg and build tag ffmpeg.
Example build with FFmpeg decoder:
go build -tags ffmpeg ./cmd/txpCtrl+K: command paletteCtrl+C: quitCtrl+R: resize mode/orCtrl+F: focus filterSpace: play/pausen/p: next/previous track
Keybindings are configurable in the settings view and persisted in config.
SQLite is created automatically:
- Default:
~/.txp/txp.db - With
--config-path:txp.dbnext to that config
Schema summary:
tracks,queue,track_stats,stats_cache,track_errors
- No audio: check device output and verify supported formats.
.m4aerrors: build with-tags ffmpegand ensureffmpegis onPATH.- Large libraries: filtering and log tailing may be slower; let the scan finish first.