SvelteKit web frontend for yt-dlp and ffmpeg. Paste a YouTube URL to download best-quality video, subtitles (original + EN + DE), and thumbnail. Subtitles are converted to clean Markdown. Optional audio extraction to MP3. Supports ZIP & Send mode: downloaded files are packed into a ZIP and delivered to the browser, with optional server-side cleanup after delivery. An extra directory (ZIP_EXTRA_DIR) can be bundled into every ZIP. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
88 lines
2.5 KiB
Markdown
88 lines
2.5 KiB
Markdown
# Deployment
|
|
|
|
## What's in the package
|
|
|
|
```
|
|
build/ ← compiled SvelteKit server (self-contained, no npm needed)
|
|
scripts/
|
|
subtitle_to_markdown.py ← standalone subtitle converter CLI
|
|
create_zip.py ← ZIP creation helper (used internally by the server)
|
|
start.sh ← startup script
|
|
README.md
|
|
INSTALL.md
|
|
```
|
|
|
|
## Prerequisites on the Linux server
|
|
|
|
Node.js 18 or newer, Python 3, yt-dlp, and ffmpeg must be installed.
|
|
|
|
```bash
|
|
# ffmpeg, Node.js, and Python via apt
|
|
sudo apt install ffmpeg nodejs python3
|
|
|
|
# yt-dlp (latest release)
|
|
sudo curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp \
|
|
-o /usr/local/bin/yt-dlp
|
|
sudo chmod +x /usr/local/bin/yt-dlp
|
|
```
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
tar -xzf yt-dlf.tar.gz
|
|
cd yt-dlf
|
|
```
|
|
|
|
## Running
|
|
|
|
```bash
|
|
./start.sh
|
|
```
|
|
|
|
The server listens on port 3000 by default. Open `http://your-server:3000` in a browser.
|
|
|
|
## Environment variables
|
|
|
|
Edit `start.sh` to configure the variables below, or pass them directly on the command line.
|
|
|
|
### General
|
|
|
|
| Variable | Default | Purpose |
|
|
|---|---|---|
|
|
| `PORT` | `3000` | Port to listen on |
|
|
| `ORIGIN` | `http://localhost:PORT` | Public URL of the server — set this in production |
|
|
| `YTDLP_PATH` | `yt-dlp` | Full path to yt-dlp binary if not on PATH |
|
|
| `FFMPEG_PATH` | `ffmpeg` | Full path to ffmpeg binary if not on PATH |
|
|
| `DOWNLOAD_DIR` | `~/YouTube` | Directory where downloaded files are stored on the server |
|
|
|
|
### ZIP & Send mode
|
|
|
|
When `ZIP_AND_SEND=true`, all downloaded files are packed into a ZIP and offered as a browser download instead of (only) being saved on the server. A random prefix is added to the temporary directory name to avoid collisions when multiple users download the same video simultaneously.
|
|
|
|
| Variable | Default | Purpose |
|
|
|---|---|---|
|
|
| `ZIP_AND_SEND` | `false` | Enable ZIP & Send mode |
|
|
| `ZIP_EXTRA_DIR` | _(none)_ | Optional directory whose files are added to every ZIP alongside the downloaded files. Subdirectory structure is preserved. |
|
|
| `DELETE_AFTER_SEND` | `false` | Delete files from the server after the ZIP has been sent to the browser |
|
|
| `DELETE_DELAY` | `0` | Seconds to wait before deleting files after the ZIP has been sent |
|
|
|
|
### Examples
|
|
|
|
Custom port and public URL:
|
|
|
|
```bash
|
|
PORT=8080 ORIGIN=http://myserver:8080 ./start.sh
|
|
```
|
|
|
|
ZIP & Send with cleanup after 60 seconds:
|
|
|
|
```bash
|
|
ZIP_AND_SEND=true DELETE_AFTER_SEND=true DELETE_DELAY=60 ./start.sh
|
|
```
|
|
|
|
ZIP & Send with extra files bundled into every download:
|
|
|
|
```bash
|
|
ZIP_AND_SEND=true ZIP_EXTRA_DIR=/opt/yt-dlf/extras ./start.sh
|
|
```
|