Files
videodownloader/README.md
dariusz de5832821c
All checks were successful
deploy / deploy (push) Successful in 2m21s
feat: auto-aktualizacja yt-dlp (start + cyklicznie) + endpointy /api/ytdlp i przycisk w UI
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-29 11:28:52 +02:00

71 lines
3.3 KiB
Markdown

# Video & Sound Downloader Pro — wersja web (SPA)
Webowy odpowiednik desktopowego narzędzia **Video & Sound Downloader Pro v6.5.6**.
Łączy `yt-dlp` + `FFmpeg` w jednym panelu: pobieranie audio (MP3), wideo (MP4),
całych playlist oraz materiałów z Facebooka — bez wpisywania komend i bez ręcznej
konwersji. Backend: **NestJS**, frontend: **React (Vite)**. Obraz portowany jest do
Dockera i wdrażany na `https://videodownloader.naurecki.pl`.
> Aplikacja działa na bazie [yt-dlp](https://github.com/yt-dlp/yt-dlp) i obsługuje
> wszystkie platformy, które obsługuje yt-dlp (YouTube, YouTube Music, YouTube Shorts,
> Facebook, LinkedIn, ARTE TV i wiele innych).
---
## Architektura
```
videodownloader/
├── apps/
│ ├── api/ # NestJS — joby pobierania, yt-dlp+ffmpeg, postęp SSE
│ │ ├── src/
│ │ └── Dockerfile # node + python3 + yt-dlp + ffmpeg
│ └── web/ # React + Vite (TS) — UI odwzorowany ze zrzutu
│ ├── src/
│ ├── nginx.conf # serwuje statyki + proxy /api (+ SSE bez buforowania)
│ └── Dockerfile
├── docker-compose.prod.yml # web → 127.0.0.1:8086, api wewnętrznie
└── .gitea/workflows/deploy.yml
```
Ruch publiczny: `Apache (vhost videodownloader.naurecki.pl, SSL)``127.0.0.1:8086`
(kontener **web**, nginx) → statyki React + proxy `/api` → kontener **api** (NestJS).
## Funkcje (odwzorowane ze zrzutu desktopowego)
- **Pole Link** z przyciskiem „wklej ze schowka”.
- **4 tryby**: `MP3` (pobierz dźwięk), `MP4` (pobierz wideo), `PLAYLISTA`
(pobierz całą listę → ZIP), `FACEBOOK` (pobierz wideo).
- **Jakość / Format** — lista zależna od trybu (MP3 320/256/192/128 kbps;
MP4 2160/1440/1080/720/480p).
- **Napisy** — opcja pobrania dostępnych napisów (`--write-subs --embed-subs`);
zgodnie z oryginałem **nie** dotyczy automatycznie generowanych napisów YouTube.
- Duży przycisk **POBIERZ** + **STOP** (przerwanie joba).
- **Log na żywo** (SSE) — komunikaty postępu, konwersji i scalania audio/wideo.
- Przyciski **Wsparcie** / **O mnie** oraz informacja o wersji **yt-dlp** z
przyciskiem „Sprawdź aktualizacje”.
- **Auto-aktualizacja yt-dlp** — API sprawdza i aktualizuje yt-dlp (`yt-dlp -U`)
przy starcie oraz cyklicznie (domyślnie co 24 h; `YTDLP_AUTO_UPDATE`,
`YTDLP_UPDATE_INTERVAL_H`). Ręczne wymuszenie: `POST /api/ytdlp/update`.
> Różnica względem wersji desktop: pole „Zapisz do” (ścieżka dyskowa Windows) w
> wersji web zostaje zastąpione pobraniem gotowego pliku przez przeglądarkę. Serwer
> przetwarza materiał w katalogu tymczasowym i po wysłaniu pliku sprząta po sobie
> (zgodnie z „bez zbędnych pozostałości i bez ręcznego sprzątania folderu”).
## Rozwój lokalny
```bash
# API
cd apps/api && npm install && npm run start:dev # http://localhost:3000/api
# WEB
cd apps/web && npm install && npm run dev # http://localhost:5173
```
Wymaga lokalnie `yt-dlp` i `ffmpeg` w PATH (w produkcji są w obrazie).
## Wdrożenie
Push do `main` → runner Gitea (`.gitea/workflows/deploy.yml`) buduje obrazy z
`docker-compose.prod.yml` i robi `up -d` na demonie Dockera serwera. Konfiguracja
reverse proxy + SSL — patrz [DEPLOY.md](DEPLOY.md).