A web interface for yt-dlp. Downloads videos onto server.
  • HTML 42.7%
  • TypeScript 35.4%
  • CSS 18.9%
  • Dockerfile 2.8%
  • Shell 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-09 00:06:16 +02:00
screenshots Upload files to "screenshots" 2026-08-29 16:25:37 +02:00
.dockerignore init 2026-07-19 13:09:50 +02:00
.gitignore display resolution badge 2026-07-19 18:43:30 +02:00
deno.json progress bar when downloading 2026-08-28 22:23:05 +02:00
deno.lock progress bar when downloading 2026-08-28 22:23:05 +02:00
Dockerfile Revert "play video on server (test)" 2026-07-23 11:16:29 +02:00
index.html added label for subtitles (english only at the moment) 2026-08-30 21:50:26 +02:00
LICENSE read me and license 2026-08-28 22:33:55 +02:00
main.ts fix progress bar indication 2026-08-30 21:45:14 +02:00
README.md Update README.md 2026-09-09 00:06:16 +02:00
run-local.sh adapt script 2026-08-28 21:25:15 +02:00
sanitize_files.ts 1 shot script to fix file names 2026-07-21 18:27:58 +02:00
style.css design adaptions 2026-08-30 20:54:46 +02:00

yt-dlp-web-ui

A web UI for yt-dlp, built with Deno.

NOTE ON AI USE: While I do use AI to write code I decide on the architecture, design of the software, design of the website, how it works and what it should do. I also decide which dependencies and tools to use.

Features

  • Paste a YouTube URL and download with a max-quality selector (480p4K)
  • Live download progress bar
  • Video library with thumbnails, resolution badges and channel info
  • Built-in player with English subtitles when available
  • In-app status for active and failed downloads

Todo

  • Support downloading subtitles in additional languages (currently English only)
  • Unify the project description across the repository, this README and the UI subtitle
  • Add a one-click "retry without subtitles" button to the failed-download state, instead of telling users to switch the subtitle option manually
  • Add a per-video info popup with additional details such as the description and the original URL
  • Play video while downloading

Requirements

  • Deno 2.x
  • yt-dlp available on PATH
  • ffmpeg (format merging) and mediainfo (metadata)

Getting started

git clone https://code.reboot.li/rebootl/yt-dlp-wui.git
cd yt-dlp-wui
./run-local.sh

Then open http://localhost:9092.

Docker

docker build -t yt-dlp-wui .
docker run -p 9092:9092 -v /path/to/your/videos:/app/downloads yt-dlp-wui

Configuration

Environment variable Default Description
PORT 9092 Server port
DOWNLOAD_DIR ./downloads Where videos are saved

Project structure

main.ts      Deno/Oak backend: REST API + static file serving
index.html   Alpine.js frontend (single file)
style.css    Styles