# YouTube Downloader (Flask + nginx) Servizio minimale per scaricare video o solo audio da YouTube tramite interfaccia web. Basato su Flask + yt-dlp dietro nginx, con download disponibili tramite browser. ## Stack - Python 3.11, Flask, gunicorn - yt-dlp + ffmpeg per download e conversione - nginx per servire la UI statica e fare proxy verso l'API - Docker Compose per orchestrare servizi e volume condiviso dei file ## Prerequisiti - Docker + Docker Compose ## Configurazione ambiente Variabili in `.env` (già fornito un esempio): | Variabile | Default | Descrizione | | --- | --- | --- | | `WEB_PORT` | 8080 | Porta esposta pubblicamente da nginx (UI + API) | | `API_PORT` | 5000 | Porta interna dell'API Flask (dietro nginx) | | `MAX_DURATION_SECONDS` | 5400 | Durata massima del video in secondi (default 1h30) | ## Avvio rapido ```bash docker compose up --build ``` Poi apri: [http://localhost:8080](http://localhost:8080) (o la `WEB_PORT` impostata). ## Uso 1. Inserisci un link YouTube. 2. Premi "Carica formati" per vedere risoluzioni/video e formati audio disponibili (yt-dlp). 3. Scegli video o solo audio, risoluzione/formato desiderato e avvia "Scarica". 4. Il file generato è servito da nginx in `/downloads/` e il link è mostrato nell'interfaccia. ## API (dietro nginx) - `POST /api/info` body: `{ "url": "..." }` → restituisce formati video/audio e durata (rispetta limite `MAX_DURATION_SECONDS`). - `POST /api/download` body: `{ url, mode: "video"|"audio", format_id?, audio_ext? }` → scarica e restituisce `{ file, url }` con link al file. - `GET /api/health` → stato servizio. ## Volumi e file - I file scaricati vivono nel volume `downloads` montato su `/downloads` in entrambi i container. Rimangono finché non si rimuove il volume (`docker compose down -v`). ## Note e limiti - Il limite durata è bloccante: se il video supera `MAX_DURATION_SECONDS`, l'API risponde 400. - Non è implementato un sistema di queue o rate limiting: pensato per uso singolo/privato. - yt-dlp segue le policy di YouTube; l'uso è responsabilità dell'utente. ## Pulizia - Fermare: `docker compose down` - Fermare e rimuovere volume download: `docker compose down -v`