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
✨ 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
- Collez l'URL d'une vidéo YouTube
- Cliquez sur "Analyser la vidéo"
- Sélectionnez les formats vidéo et audio souhaités
- Choisissez les options de sortie (conteneur, codec audio, bitrate)
- Cliquez sur "Télécharger"
- Suivez la progression en temps réel avec la barre de progression
- Téléchargez le fichier généré
📸 Screenshots
Etape 1 - Analyse
Etape 2 - Sélection des formats
Etape 3 - Téléchargement avec progression
🔧 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 à :
- Fork le projet
- Créer une branche (
git checkout -b feature/amelioration) - Commit vos changements (
git commit -am 'Ajout nouvelle fonctionnalité') - Push vers la branche (
git push origin feature/amelioration) - 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


