YouTube is too good at keeping you there. Moving it into the terminal (an explicit channel list, explicit picks, explicit downloads) means the platform stops choosing for you. Add on-demand subtitle translation and every session becomes intentional, and doubles as language practice.
Only the channels you chose.
Your subscriptions are a short list in main.py, nothing recommended and nothing extra. The Textual interface shows channels on the left, the latest 30 videos in the middle (titles translated to English) and a thumbnail with info on the right.
Pick a video, or paste any YouTube link, and it is queued: downloaded with yt-dlp, transcribed, translated and saved. A live preview of the subtitles appears at the bottom while it works.
Six steps, all cached.
- 01
Download
yt-dlp pulls the video from a channel pick or a pasted link.
- 02
Whisper
faster-whisper runs locally on the GPU with ivrit-ai's Hebrew fine-tune, giving a timestamp for every word. Falls back to the CPU.
- 03
Translate
Batched Google Translate for each line, plus optional OpenAI for context-aware glosses of every word.
- 04
Subs
Hand-laid-out ASS subtitles, rendered by libass, that build up word by word.
- 05
Save
An .mkv with soft, toggleable subs and no re-encode, or burned into an .mp4.
- 06
Cloud
One key pushes the finished video to iCloud with rclone, ready on the phone.
Transcripts and translations are cached per video, so switching subtitle settings re-renders in seconds without running Whisper again.
Every word,
as it's spoken.
Meaning on top, sound underneath.
Like YouTube captions, but each Hebrew word becomes its own column that appears the moment it is spoken, left to right. The English meaning sits on top, how it sounds sits underneath, and the word being spoken glows gold.
The pronunciation comes from Dicta Nakdan vowel points, so מוח reads moach, not "much". The Hebrew letters, vowel points, a full-sentence line and right-to-left order can all be switched on in the settings.