♪ Terminal Music Player · v1.0.0

Music.
In the
Terminal.

Search YouTube, stream instantly, download MP3s, play playlists, and resolve Spotify links — all without ever leaving your terminal.

Download Source Quick Start
seeky — terminal
███╗ ███╗██╗ ██╗███████╗██╗ ██████╗██╗ ██╗ ████╗ ████║██║ ██║██╔════╝██║██╔════╝██║ ██║ ██╔████╔██║██║ ██║███████╗██║██║ ██║ ██║ ██║╚██╔╝██║██║ ██║╚════██║██║██║ ██║ ██║ ██║ ╚═╝ ██║╚██████╔╝███████║██║╚██████╗███████╗██║ YouTube · Stream · Download · Playlist · Spotify
♪ Streaming via mpv
What are you looking for? ❯ 🔎 Search YouTube 🎵 Play a YouTube URL directly 📋 Download a YouTube playlist 🟢 Resolve a Spotify link ✕ Quit
Search: tame impala let it happen
// Why seeky exists

I got tired of switching apps just to listen to music. Every time I wanted a song — open a browser, sign in, deal with ads, watch autoplaying videos, get distracted by recommendations. The whole ritual was exhausting.

I live in the terminal. So I built Seeky — a music player that lives there too. Search YouTube by name. Pick a track. Stream it instantly with zero browser overhead. Download it as MP3. Blast a whole playlist. Even paste in a Spotify link and it figures out the rest.

The best part? Smart prefetching. The moment you pick a song from search results, Seeky starts resolving the stream URL in the background. By the time you hit play, it's already ready. Instant. No lag. No wait. Just music.

And there's a terminal visualizer built on a real Cooley-Tukey FFT — not a fake animation. Actual frequency analysis of the audio, rendered in Unicode block characters at 50fps. Because if you're going to nerd out, do it properly.


// Features

Everything.
In your terminal.

🔎
YouTube Search

Search via YouTube Data API v3. Results show title, channel, duration, and view count in a clean table.

Smart Prefetch

Stream URLs are extracted in the background the moment you browse results. Hit play and it's instant — no waiting.

Stream via mpv

Direct CDN URL handed to mpv. No browser, no window, no overhead. Pure audio, right in your terminal.

MP3 Downloads

yt-dlp extracts best audio and converts to MP3. Saved neatly to ~/Music/MusiCLI automatically.

📋
Playlist Support

Paste a YouTube playlist URL and download every track as MP3 in one command. Progress shown per track.

🟢
Spotify Resolution

Paste any Spotify song or playlist link. Seeky resolves it to YouTube automatically via play-dl, then streams or downloads.

Terminal Visualizer

Real-time FFT analysis using Cooley-Tukey. Logarithmic frequency bands, Hann windowing, 50fps. Unicode block chars for sub-character precision.

🎛
cava Integration

If cava is installed, Seeky uses it for perfectly synced visualization directly from PipeWire/PulseAudio audio output.


// Quick Start

Up in
60 seconds.

01
Clone the repository

Get the source code on your machine.

bash
# Clone the repo git clone https://github.com/tarun922/seeky.play.api cd seeky.play.api
02
Install system dependency: mpv

mpv handles audio playback. It's the only system dependency.

bash
# Ubuntu / Debian sudo apt install mpv
# macOS brew install mpv
# Fedora sudo dnf install mpv
03
Install Node dependencies

Requires Node.js 18+. Installs yt-dlp-exec, play-dl, chalk, inquirer, ora and more.

bash
npm install
04
Add your YouTube API key

Edit src/config.js and add your YouTube Data API v3 key for search to work.

src/config.js
export const YOUTUBE_API_KEY = 'YOUR_KEY_HERE';
05
Run it

Launch the interactive CLI and start listening.

bash
node index.js

// Under the hood

How the
visualizer works.

CDN URL
YouTube audio stream
FFmpeg
Decode to raw PCM
8000 Hz mono s16le
Hann Window
Reduce spectral leakage
FFT 1024pt
Cooley-Tukey
O(N log N)
Log Bands
Log-spaced freq
mapping
Terminal
Unicode blocks
50 FPS

Why 8000 Hz sample rate?

CD quality is 44100 Hz — overkill for visualization. 8000 Hz gives enough frequency resolution for the FFT window while keeping CPU usage minimal. Your ears won't know the difference on a bar chart.

Why the Hann window?

Without it, sharp edges at the start/end of each analysis window create phantom frequencies that don't exist in the audio. The Hann function tapers each frame smoothly to zero, eliminating spectral leakage and keeping the visualizer clean.

Why logarithmic frequency bands?

Human hearing is logarithmic — one octave sounds the same whether it's 100→200 Hz or 1000→2000 Hz. Linear spacing would crush all the interesting bass into a few bars. Log spacing mirrors how you actually perceive sound.

Why does mpv play separately from FFmpeg?

mpv handles actual playback with full quality and buffering. FFmpeg re-decodes the same URL independently at lower quality just for analysis. They run in parallel — the visualizer is a few hundred milliseconds behind at most, imperceptible to human perception.