vimyt

June 20, 2026 ยท View on GitHub

TUI for YouTube Music with vim keybindings and radio mixes. Built with Go, Bubble Tea, and Lip Gloss.

Search, queue, playlists, artists, radio mixes, and history. All navigated with vim keybindings (j/k, gg/G, visual select, yank/delete/paste, undo/redo). Session state persists across launches.

Demo:

https://github.com/user-attachments/assets/7719af94-4268-44dc-8ae1-32e5420bd23c

Prerequisites

  • Go 1.25+
  • yt-dlp -- YouTube search and audio URL resolution
  • mpv -- audio playback engine

yt-dlp and mpv must be on your PATH.

Installation

Go install

Make sure $GOPATH/bin is in your PATH:

# bash/zsh
export PATH="$HOME/go/bin:$PATH"

# fish
fish_add_path ~/go/bin

Then run:

go install github.com/Sadoaz/vimyt@latest
vimyt

From source

git clone https://github.com/Sadoaz/vimyt.git
cd vimyt
go build -o vimyt .
./vimyt

Keybindings

KeyAction
j / kMove down / up
gg / GJump to top / bottom
Ctrl+d / Ctrl+uHalf-page down / up
h / lNavigate back / forward (enter playlists)
H / J / K / LSwitch panel focus (left / down / up / right)
1-6Jump to panel by number
Alt+h / Alt+lCycle panels
Ctrl+o / Ctrl+iJumplist back / forward
zZoom current panel
:<n>Jump to line number

Playback

KeyAction
EnterPlay selected track
SpaceToggle play / pause
> / <Seek forward / backward
g + timeSeek to time (e.g. 1:23)
+ / -Volume up / down
nNext track
RRandomize queue

Editing

KeyAction
v / VVisual selection mode
yy / yYank (copy)
dd / dDelete
xCut
pPaste
oSwap visual selection end
uUndo
Ctrl+rRedo

Other

KeyAction
/Search (from any panel)
fFilter current panel
aAdd track/playlist to queue or add artist
FToggle favorite
rStart radio mix from track
SOpen settings
?Help overlay
qQuit

Settings

Press S to open settings:

  • Autoplay / Shuffle / Loop Track (infinite or x times)
  • Focus Queue on add
  • Relative line numbers
  • Pin Search / Playlist / Radio / Artists panels
  • Show/Hide History / Radio History / Artists
  • YT Auth -- browser cookie auth (Firefox, Chrome, Chromium, Brave, Edge) for private playlists
  • Import Playlist by URL
  • Discord Rich Presence -- show the current track as a "Listening to ..." status

Discord Rich Presence

vimyt can publish the currently playing track to Discord as a "Listening to ..." status, with title, artist, album art, a progress bar, and an optional "Listen on YT Music" button. It talks to a running Discord client over its local IPC socket, so nothing extra needs to be installed.

Because Discord ties the activity name to an application, you supply your own application ID the first time:

  1. In settings (S), select Set up Discord RPC.
  2. Follow the on-screen steps: create an application at discord.com/developers/applications, copy its Application ID, and enable Settings > Activity Privacy > Share your detected activities in Discord.
  3. Paste the Application ID and press Enter.

The application's name is what shows up as "Listening to ", so name it whatever you want the status to read (e.g. "vimyt"). Once set up, Rich Presence and the listen button are enabled by default and can be toggled in settings; the setup entry becomes Change Discord App ID.

Set VIMYT_DISCORD_APP_ID to override the configured ID from the environment.

Data Storage

Only metadata is stored locally. No audio or video is downloaded. Location depends on your OS:

  • macOS: ~/Library/Application Support/vimyt/
  • Linux: ~/.config/vimyt/
  session.json        # Session state (cursors, settings, playback position)
  queue.json          # Persisted queue
  play_history.json   # Last 500 played tracks
  radio_history.json  # Last 100 radio mix sessions
  artists.json        # Followed artists and cached albums
  playlists/          # Playlist JSON files