Personal

RB YouTubeTools - An Open Source YT video Processing Toolbox

A desktop app for downloading and translating YouTube auto-captions, built out of a very specific problem: wanting to understand kpop variety content with no subtitles.

April 1, 2026
ElectronReactTypeScriptyt-dlpPython

View on GitHub

This article will be continuously updated as the project grows. What's described here reflects v0.1.0-alpha — the first public release.

What is this

RB YouTubeTools is an open source desktop app for pulling and translating YouTube auto-generated captions. Right now it does one thing: you give it a YouTube URL, pick a target language, and it downloads the auto-captions and runs them through Google Translate, giving you a translated subtitle file you can read or play back inside the app.

That's the whole scope for now. The name is intentionally broad because I have other YouTube-related tools in mind down the road, but this translation feature is what exists today.

The project is on GitHub at ryanputraa/RB-YouTubeTools.

Why this exists

I got into kpop. Specifically a group called AHOF.

The problem with following a kpop group if you don't speak Korean is that the actual content -- the variety show appearances, the radio interviews, the random live streams -- almost never gets subtitled. Dedicated fan subbers exist for the big groups but for smaller acts you're mostly out of luck. YouTube's auto-captions are there, they're just in Korean.

YouTube has a feature to auto-translate captions into another language. The catch is that it's been broken or disabled for a lot of content for a while now. You click the language dropdown and nothing happens, or the option just isn't there. So the captions exist, the translation infrastructure exists, but the button doesn't work.

I figured there had to be a way to just... extract the captions and translate them myself. There was. It took a bit of work to get right, but it works.

How it's built

The app is an Electron desktop app running React and TypeScript on the frontend, with Node.js handling all the heavy lifting on the backend side.

The actual caption extraction is done by yt-dlp, a command-line YouTube downloader. The app shells out to yt-dlp to fetch the auto-generated subtitle file (VTT format), then parses that locally. YouTube's VTT files have a quirky format -- they deliver rolling word-by-word captions with tiny carry-forward cues every 10ms -- so there's a custom parser that cleans that up into readable subtitle blocks.

Those blocks get sent through the Google Translate API in batches, written back out as a translated VTT file, and surfaced in the app. You can read the translation on screen, export the subtitle file, or play the original video with the translated subtitles overlaid directly in the app.

A few other things the app handles: ffmpeg is required to merge DASH-fragmented subtitle streams (which is how YouTube delivers a lot of auto-captions), so there's a first-run setup screen that downloads ffmpeg automatically. For videos that require a YouTube login, there's an in-app login popup using an isolated Electron browser session rather than trying to read cookies from your system browser.

Translation history is stored locally so you can go back to previous jobs without re-downloading.

Next steps

A few things I want to add, roughly in priority order:

  • Batch URL input -- paste in a playlist or a list of URLs and translate them all
  • More translation providers -- Google Translate works but it's not always the best for Korean; DeepL would be a meaningful upgrade
  • Subtitle timing adjustments -- manual offset controls for when the captions are slightly out of sync
  • Auto-download on paste -- detect a YouTube URL in the clipboard when the app opens and pre-fill it
  • Windows installer -- right now it's a portable exe; a proper installer with auto-update would make it easier to distribute
  • More tools -- the "YouTubeTools" name is doing work; there's more I want to build here eventually