# 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:8085, api wewnętrznie └── .gitea/workflows/deploy.yml ``` Ruch publiczny: `Apache (vhost videodownloader.naurecki.pl, SSL)` → `127.0.0.1:8085` (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. - Banner **trybu testowego** (kosmetyczny, sterowany zmienną `TRIAL_*`). - Przyciski **Wsparcie** / **O mnie**. > 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).