All checks were successful
deploy / deploy (push) Successful in 2m34s
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
68 lines
3.0 KiB
Markdown
68 lines
3.0 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.
|
|
- 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).
|