Files
videodownloader/README.md
dariusz 94278f119d
All checks were successful
deploy / deploy (push) Successful in 28s
fix: SSE bez nazwanych zdarzen (postep stal na 0); usun tryb testowy; opcja napisow (osadz/.srt)
- jobs.controller: usun pole type z MessageEvent — onmessage w EventSource
  reaguje tylko na domyslne 'message', przez co front nie dostawal zdarzen
- usun trial (health, compose, deploy.yml, UI, zmienne Gitea)
- napisy: wybor osadzania w wideo lub osobnego pliku .srt (--convert-subs srt)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-29 11:22:12 +02:00

3.0 KiB

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 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.

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

# 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.