YouTube Downloader & Transcript Extractor
Go to file
Stefan Waidele 6df26c12e6 Add login, ad columns and user management
Unauthenticated visitors see the app with left/right ad columns (loaded
from ads-left.html and ads-right.html). Logged-in users see no ads and
get a logout link in the top bar.

Login is at /login (not linked). Users are managed in users.txt via
scripts/add_user.py (scrypt-hashed passwords). users.txt is gitignored.

New env vars: USERS_FILE, ADS_DIR.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-16 21:21:48 +02:00
.vscode Initial commit — yt-dlf YouTube downloader & transcript extractor 2026-05-16 20:33:23 +02:00
scripts Add login, ad columns and user management 2026-05-16 21:21:48 +02:00
src Add login, ad columns and user management 2026-05-16 21:21:48 +02:00
static Initial commit — yt-dlf YouTube downloader & transcript extractor 2026-05-16 20:33:23 +02:00
.gitignore Add login, ad columns and user management 2026-05-16 21:21:48 +02:00
.npmrc Initial commit — yt-dlf YouTube downloader & transcript extractor 2026-05-16 20:33:23 +02:00
ads-left.html Add login, ad columns and user management 2026-05-16 21:21:48 +02:00
ads-right.html Add login, ad columns and user management 2026-05-16 21:21:48 +02:00
INSTALL.md Add login, ad columns and user management 2026-05-16 21:21:48 +02:00
jsconfig.json Initial commit — yt-dlf YouTube downloader & transcript extractor 2026-05-16 20:33:23 +02:00
package-lock.json Initial commit — yt-dlf YouTube downloader & transcript extractor 2026-05-16 20:33:23 +02:00
package.json Initial commit — yt-dlf YouTube downloader & transcript extractor 2026-05-16 20:33:23 +02:00
README.md Initial commit — yt-dlf YouTube downloader & transcript extractor 2026-05-16 20:33:23 +02:00
start.sh Add login, ad columns and user management 2026-05-16 21:21:48 +02:00
svelte.config.js Initial commit — yt-dlf YouTube downloader & transcript extractor 2026-05-16 20:33:23 +02:00
vite.config.js Initial commit — yt-dlf YouTube downloader & transcript extractor 2026-05-16 20:33:23 +02:00

yt-dlf

YouTube Downloader & Transcript Extractor — a local web frontend for yt-dlp and ffmpeg.

Features

  • Paste a YouTube URL and download the best available video quality
  • Subtitles downloaded automatically in the video's original language, English, and German (where available)
  • Subtitles converted to clean Markdown (timestamps stripped, text deduplicated and paragraph-wrapped)
  • Optional audio extraction to MP3 via ffmpeg
  • Real-time progress log streamed to the browser
  • Files saved to ~/YouTube/<video title>/

Prerequisites

brew install yt-dlp ffmpeg

Node.js 16+ is required for the web app (tested with Node 26).

Project Layout

yt-dlf/
├── scripts/
│   └── subtitle_to_markdown.py   # standalone CLI converter
├── src/
│   ├── lib/
│   │   └── subtitle.js           # JS conversion module (used by web app)
│   └── routes/
│       ├── api/download/
│       │   └── +server.js        # SSE endpoint — runs yt-dlp / ffmpeg
│       ├── +layout.svelte
│       └── +page.svelte          # UI
└── vite.config.js

Running the web app

npm install       # first time only
npm run dev       # starts on http://localhost:5173

To use a custom port:

PORT=8080 npm run dev

Standalone subtitle converter

Convert a .vtt or .srt subtitle file to Markdown directly from the terminal:

./scripts/subtitle_to_markdown.py video.en.vtt
./scripts/subtitle_to_markdown.py video.en.vtt output.md

Output is saved next to the input file (same name, .md extension) unless a second argument is given.