The terminal toolkit for YouTube.

Download originals in any quality with zero re-encoding, extract MP3s, pull clean transcripts, and stream without leaving your shell.

$npm install -g krosztube
krosztube

Everything the download sites do, minus the download sites.

Nothing gets re-encoded

krosztube grabs the exact streams YouTube serves and merges them with an ffmpeg stream copy. What the uploader encoded is what lands on your disk.

144p480p1080p1440p4K8K

MP3 in one flag

krosztube audio -b 320 takes the best audio stream and hands you a clean MP3.

Streams to mpv or VLC

krosztube play opens any video instantly, full quality, no file saved. Add --audio for radio mode.

Video, but make it ANSI

play --ascii renders the actual video as truecolor half-blocks in your terminal.

Binaries handled for you

First run downloads a checksum-verified yt-dlp and a static ffmpeg for your OS. When YouTube breaks things, krosztube update fixes them.

The whole script, as text.

Transcripts come from YouTube's own captions: free, instant, no API keys. Auto-caption noise is deduplicated and reflowed into readable paragraphs.

$ krosztube transcript https://youtu.be/jNQXAC9IVRw \
--format md -o script.md
Transcript (en, manual) → script.md

Me at the zoo

Channel: jawed · Duration: 00:19

All right, so here we are, in front of the elephants. The cool thing about these guys is that they have really, really long trunks, and that is pretty much all there is to say.

Also a typed library.

Every command is a plain async function with progress callbacks, AbortSignal support and typed errors. The CLI is just its first consumer.

import { download, getTranscript, renderTranscript } from 'krosztube';

const { files } = await download('https://youtu.be/jNQXAC9IVRw', {
  quality: 1080,
  container: 'original',
  onProgress: (e) => console.log(e.phase, e.percent),
});

const transcript = await getTranscript('https://youtu.be/jNQXAC9IVRw');
console.log(renderTranscript(transcript, 'md'));

Eight commands, no menus.

download

Videos or playlists at any quality, stream-copied

audio

MP3 extraction from 64 to 320 kbit/s

transcript

Captions as clean txt, markdown, SRT or VTT

play

Stream via mpv or VLC, radio mode, ASCII mode

info

Title, channel, duration, views, JSON output

formats

Every available stream in one table

update

Refresh yt-dlp when YouTube changes things

doctor

Check binaries, players and the cache dir

One install away.

$npm install -g krosztube

Node 20+, Windows, macOS and Linux.