You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

9.2 KiB

🎬 yt-dlp Web Interface

Interface web moderne et sécurisée pour télécharger des vidéos YouTube, avec options de conversion et affichage détaillé. Utilise l'excellent yt-dlp. Le tout conteneurisé avec Docker/Podman. Codé avec mon ami : Claude AI

License Docker Python Security

Fonctionnalités

🎥 Téléchargement

  • 🔍 Analyse complète des formats vidéo et audio disponibles
  • 🎯 Sélection précise des formats (qualité, codec, bitrate)
  • ⚙️ Options de sortie personnalisables (MP4, MKV, WebM)
  • 🎵 Transcodage audio (AAC, MP3, Opus) avec contrôle du bitrate
  • 🎵 Mode audio seulement pour extraire uniquement l'audio

📊 Interface & UX

  • 📦 Interface moderne et responsive
  • 📈 Barre de progression en temps réel avec SSE (Server-Sent Events)
  • Téléchargements non-bloquants - multiples téléchargements simultanés
  • 💨 Vitesse et ETA affichés pendant le téléchargement
  • 📋 Affichage de la commande yt-dlp exécutée pour transparence

🔒 Sécurité

  • Validation stricte des URLs YouTube (protection contre injection de commandes)
  • 🛡️ Protection path traversal sécurisée
  • 👤 Container non-root (exécution en tant qu'utilisateur appuser)
  • 🔐 Validation des inputs (conteneurs, codecs, bitrate)
  • 🔍 Logging complet pour audit et debugging

🚀 Performance & Fiabilité

  • 🆔 Sessions UUID isolées - pas de conflit entre téléchargements
  • 🧹 Nettoyage automatique des fichiers anciens (>1h)
  • 🔄 Healthcheck intégré pour monitoring
  • 📝 Logs détaillés avec rotation automatique
  • 🐳 Conteneurisé pour un déploiement facile

🚀 Démarrage rapide

Avec Docker

docker pull raynoxis/yt-dlp-web-interface:latest
docker run -d -p 5000:5000 --name ytdlp-web raynoxis/yt-dlp-web-interface:latest

Avec Podman

podman pull docker.io/raynoxis/yt-dlp-web-interface:latest
podman run -d -p 5000:5000 --name ytdlp-web raynoxis/yt-dlp-web-interface:latest

Avec Docker Compose (Recommandé)

git clone https://github.com/Raynoxis/yt-dlp-Web-Interface.git
cd yt-dlp-Web-Interface
docker-compose up -d

Accédez à l'interface : http://localhost:5001 (ou 5000 si vous utilisez la commande docker run directe)

📖 Documentation

🛠️ Build depuis les sources

# Cloner le repo
git clone https://github.com/Raynoxis/yt-dlp-Web-Interface.git
cd yt-dlp-Web-Interface

# Build avec Docker
docker build -t raynoxis/yt-dlp-web-interface .

# Ou avec Podman
podman build -t raynoxis/yt-dlp-web-interface .

# Lancer
docker run -d -p 5000:5000 --name ytdlp-web raynoxis/yt-dlp-web-interface

🎯 Utilisation

  1. Collez l'URL d'une vidéo YouTube
  2. Cliquez sur "Analyser la vidéo"
  3. Sélectionnez les formats vidéo et audio souhaités
  4. Choisissez les options de sortie (conteneur, codec audio, bitrate)
  5. Cliquez sur "Télécharger"
  6. Suivez la progression en temps réel avec la barre de progression
  7. Téléchargez le fichier généré

📸 Screenshots

Etape 1 - Analyse

Etape 1

Etape 2 - Sélection des formats

Etape 2

Etape 3 - Téléchargement avec progression

Etape 3

🔧 Configuration avancée

Volumes persistants

docker run -d \
  -p 5000:5000 \
  -v ./downloads:/app/downloads \
  --name ytdlp-web \
  raynoxis/yt-dlp-web-interface:latest

Variables d'environnement

docker run -d \
  -p 5000:5000 \
  -e FLASK_ENV=production \
  -e PYTHONUNBUFFERED=1 \
  --name ytdlp-web \
  raynoxis/yt-dlp-web-interface:latest

Compose complet

version: '3.8'

services:
  ytdlp-webinterface:
    image: raynoxis/yt-dlp-web-interface:latest
    container_name: ytdlp-webinterface
    ports:
      - "5001:5000"
    volumes:
      - ./downloads:/app/downloads
    restart: unless-stopped
    environment:
      - FLASK_ENV=production
      - PYTHONUNBUFFERED=1
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:5000/"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

🔐 Sécurité

Mesures de sécurité implémentées

  • Validation stricte : Seules les URLs YouTube valides sont acceptées
  • Protection injection : Validation des inputs avant exécution
  • Path traversal : Protection contre l'accès à des fichiers non autorisés
  • Isolation : Chaque téléchargement dans un répertoire UUID unique
  • Non-root : Le container s'exécute avec un utilisateur non-privilégié
  • Logging : Tous les événements sont tracés pour audit
  • Nettoyage : Suppression automatique des fichiers après 1 heure

Bonnes pratiques recommandées

# Utiliser un reverse proxy avec SSL/TLS
# Limiter l'accès par IP avec un firewall
# Configurer des limites de ressources sur le container
docker run -d \
  --memory="2g" \
  --cpus="1.0" \
  -p 5000:5000 \
  raynoxis/yt-dlp-web-interface:latest

📊 API Endpoints

Analyse de vidéo

POST /api/analyze
Content-Type: application/json

{
  "url": "https://www.youtube.com/watch?v=VIDEO_ID"
}

Téléchargement

POST /api/download
Content-Type: application/json

{
  "url": "https://www.youtube.com/watch?v=VIDEO_ID",
  "video_format": "299",
  "audio_format": "140",
  "output_container": "mp4",
  "audio_codec": "aac",
  "audio_bitrate": "192k",
  "audio_only": false
}

Progression en temps réel (SSE)

GET /api/progress/<session_id>

Télécharger le fichier

GET /api/download-file/<session_id>/<filename>

Nettoyage

POST /api/cleanup/<session_id>
POST /api/cleanup-all

🗂️ Architecture

yt-dlp-Web-Interface/
├── app.py                     # Backend Flask avec SSE
├── templates/
│   └── index.html            # Frontend avec progress bar
├── downloads/                # Fichiers téléchargés (UUID sessions)
│   ├── <uuid-session-1>/
│   └── <uuid-session-2>/
├── Dockerfile                # Image Docker (non-root)
├── docker-compose.yml        # Configuration Compose
└── docs/                     # Documentation

🔄 Gestion des fichiers

Nettoyage automatique

  • Déclenchement : À chaque nouveau téléchargement
  • Rétention : 1 heure par défaut
  • Action : Suppression des répertoires de session > 1h

Nettoyage manuel

# Nettoyer une session spécifique
curl -X POST http://localhost:5000/api/cleanup/<session_id>

# Nettoyer toutes les sessions
curl -X POST http://localhost:5000/api/cleanup-all

🐛 Dépannage

Les téléchargements échouent

  • Vérifiez que l'URL YouTube est valide
  • Certains formats peuvent ne pas être disponibles
  • Consultez les logs : docker logs ytdlp-web

Erreur de permissions

# Avec Podman, ajuster les permissions du volume
podman unshare chown -R 1000:1000 downloads/

Le healthcheck échoue

  • Attendez 40 secondes (start_period)
  • Vérifiez que le port 5000 est accessible

🤝 Contribution

Les contributions sont les bienvenues ! N'hésitez pas à :

  1. Fork le projet
  2. Créer une branche (git checkout -b feature/amelioration)
  3. Commit vos changements (git commit -am 'Ajout nouvelle fonctionnalité')
  4. Push vers la branche (git push origin feature/amelioration)
  5. Ouvrir une Pull Request

📝 License

Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.

🙏 Remerciements

  • yt-dlp - Le meilleur outil de téléchargement vidéo
  • Flask - Framework web Python
  • FFmpeg - Traitement vidéo et audio
  • Claude AI - Assistant de développement

📈 Changelog

v2.0.0 (2025-11-25)

  • Ajout de la barre de progression en temps réel avec SSE
  • 🔒 Amélioration majeure de la sécurité (validation URL, path traversal)
  • 🆔 Sessions UUID isolées pour téléchargements concurrents
  • 👤 Container non-root pour meilleure sécurité
  • 📝 Logging complet pour audit et debugging
  • Téléchargements non-bloquants avec threads
  • 🧹 Nettoyage automatique des sessions anciennes

v1.0.0 (Initial)

  • 🎬 Interface web pour yt-dlp
  • 🎯 Sélection de formats vidéo/audio
  • 🎵 Mode audio seulement
  • 🐳 Conteneurisation Docker/Podman

⚠️ Avertissement

Cet outil est destiné à un usage personnel et éducatif. Respectez les conditions d'utilisation de YouTube et les lois sur le droit d'auteur de votre pays.

📧 Contact

Raynoxis - GitHub

Lien du projet: https://github.com/Raynoxis/yt-dlp-Web-Interface

Lien Docker Hub: https://hub.docker.com/r/raynoxis/yt-dlp-web-interface