Music Text User Interface - User-friendly command line music player

Florrie a5d3b710eb Don't reload the listing if it's unnecessary 4 hours ago
tui-lib @ e4ae17895c b3e18e9f23 Update tui-lib with label.text draw dependency 6 hours ago
.editorconfig 4bb56a667d Add editorconfig file 7 months ago
.gitignore 0899802dc4 DOUBLE SIGH 1 year ago
.gitmodules 1daa3b0f41 Miscellaneous readme changes 1 year ago
LICENSE.txt 6d270d43d5 Add GPL license file 1 year ago
README.md 9fcdf1d123 Reformat keybindings documentation 3 days ago
backend.js 47bd859d1a 'Clear past / up to this track' queue menu options 1 week ago
client.js 8053f12b63 Only render when stuff on-screen actually changes! 3 days ago
crawlers.js 328b6f388f Add flac to crawl-local extension list 8 months ago
downloaders.js 77bae19bb6 Oragnize cached downloads much better! 3 months ago
general-util.js e9ccfa2fd4 Metadata (stored, throttle, status, and more) 6 months ago
guess.js e1b016fd5c WIP guessing game! 2 months ago
index.js 8053f12b63 Only render when stuff on-screen actually changes! 3 days ago
metadata-readers.js e9ccfa2fd4 Metadata (stored, throttle, status, and more) 6 months ago
package-lock.json 86af38d567 Add wcwidth as a dependency 3 months ago
package.json 86af38d567 Add wcwidth as a dependency 3 months ago
players.js 0e9b316165 "Pause when this track ends" option 1 month ago
playlist-utils.js 7552ecaecb Don't crash when calling countTotalItems on tracks 1 month ago
record-store.js 8766d0f6c9 Automatically play next track 1 year ago
screenshot.png 1daa3b0f41 Miscellaneous readme changes 1 year ago
smart-playlist.js 6055638558 Smart playlists 1 year ago
stress-test.txt 9a4f04fbd3 Dramatically optimize perf of large playlists 9 months ago
telnet-server.js 8053f12b63 Only render when stuff on-screen actually changes! 3 days ago
todo.txt a5d3b710eb Don't reload the listing if it's unnecessary 4 hours ago
ui.js a5d3b710eb Don't reload the listing if it's unnecessary 4 hours ago
undo-manager.js a8fec45b10 Stub undo manager, remove 1 year ago

README.md

Screenshot of the player

Installation

You will need a relatively recent version of Node.js, as well as mpv (apt install mpv and the like work fine).

# Please do note --recursive. It clones git submodules.
git clone --recursive https://git.ed1.club/florrie/mtui.git  # Or https://notabug.org/towerofnix/mtui.git
cd mtui
npm install
npm link  # Or sudo npm link
mtui  # Or node .

Add music to the ~/Music folder to make it show up in mtui, or pass mtui a playlist.json file (usually generated by http-music or downloaded from online).

Bugs or ideas?

Feel free and encouraged to report any bugs (unexpected behavior or crashes) to the issue tracker on NotABug.org! You're also welcome to share any ideas, suggestions, and questions through there.

Keybindings

  • Ctrl+C: exit
  • Up, Down: select previous or next item in a listing
  • Tab, Shift+Tab: switch between UI elements
  • g/G, Home/End: move to the first and last item in a listing
  • [: focus the main track/group listing
  • ]: focus the queue listing
  • Enter: play the selected track
  • Ctrl+Up, p: play previous track
  • Ctrl+Down, n: play next track
  • Shift+Up/Down or drag: select multiple items at once
  • Space: toggle pause
  • Escape: stop playing the current track
  • l: toggle track loop
  • Right: seek ahead
  • Left: seek back
  • m, f: open a menu of actions related to the selected track/group/item(s)
  • v, V: increase and decrease playback volume
  • Ctrl+F or /: jump to a track or group by entering (part of) its name
  • Ctrl+O: open a playlist from a source (like a /path/to/a/folder or a YouTube playlist URL) (you can also just pass this source to mtui)
  • t, T: switch between playlist tabs
  • Ctrl+T: open the current playlist in a new tab (so, clone the current tab)
  • Ctrl+W: close the current tab
  • In the main listing:
    • Enter: if the selected item is a group, enter it; if it's a track, play it
    • Backspace: leave the current group (if in one)
    • q: queue the selected track or group to play after the track which is selected in the queue
    • d: download the selected track (but don't play it)
  • In the queue listing:
    • s: shuffle the queue
    • c: clear the queue
    • x: remove the selected track from the queue
    • Ctrl+L: jump to the track that's currently playing
  • In path displays: (Path displays are the things that show below the main and queue listings. They show the path of groups to the selected item in the listing.)
    • Enter, Space: view the selected item in the main listing
    • Left, Right: navigate the path display
  • In a context menu:
    • All the usual controls (up, down, tab, space, enter) work
    • Backspace or Escape: close the menu without taking any action
    • Type the beginning of the name of an option, like its first letter, to quickly jump to it
  • With a number pad:
    • Should be in NumLock!
    • 2, 4, 6, 8: cursor keys (down/left/right/up)
    • 5: pause (and any action that would take the space bar)
    • 7, 9: focus main track/group, queue listings
    • /, *: decrease, increase playback volume
    • .: back (and any action that would take backspace)
    • +: open a context menu
    • 1, 3: skip to previous, next track