# youtubeDownloader Application web self-hosted pour parcourir, mettre en file d'attente et extraire des vidéos/audios YouTube, en s'appuyant sur [yt-dlp](https://github.com/yt-dlp/yt-dlp) et [ffmpeg](https://ffmpeg.org/). Ce projet reprend et remplace une série de scripts `.cmd` (téléchargement vidéo, récupération de miniatures, recherche de streams par chaîne) par une interface web unique. ## Fonctionnalités prévues - **Parcourir une chaîne** : recherche par chaîne (URL ou `@handle`), liste de ses vidéos/streams avec filtre par mots-clés dans le titre. - **Ajout par URL** : ajout direct d'une ou plusieurs URLs YouTube. - **Playlists** : coller un lien de playlist (`youtube.com/playlist?list=...`) affiche toutes ses vidéos, à ajouter une par une ou d'un coup (« Tout ajouter à la file »). - **File d'attente** : chaque élément ajouté est configurable individuellement : - **Vidéo** : qualité, sous-titres (fr/en), miniature intégrée, métadonnées. - **Audio seul** : extraction dans un format courant (mp3/m4a/opus). - **Miniature seule** : récupération du poster uniquement. - **Exécution en parallèle** : plusieurs téléchargements simultanés (concurrence configurable), avec suivi de progression en temps réel. - **Livraison au navigateur** : les fichiers terminés sont téléchargés directement par l'utilisateur (pas de dépôt sur une bibliothèque partagée type Emby). - **Accès** : aucune authentification, usage LAN uniquement. ## Stack technique (prévue) - **Backend** : TypeScript / Fastify, organisé en services modulaires (découverte de chaîne, gestion de la file d'attente, exécution des téléchargements, notifications temps réel). - **Frontend** : TypeScript vanilla, vues séparées en `.ts` / `.html` / `.scss`. - **Moteur** : `yt-dlp` + `ffmpeg` (installés dans l'image Docker, non versionnés). - **Déploiement** : Docker / docker-compose. - **Linting** : Biome.js. ## Développement Squelette actuel : serveur Fastify (`server/`) + client minimal (`client/`), sans encore la logique de découverte/file d'attente/téléchargement. ```bash # Racine : lint (Biome) sur tout le repo npm install && npm run lint # Client : build (esbuild + sass) -> client/dist cd client && npm install && npm run build # Serveur : typecheck, tests, dev (sert client/dist) cd server && npm install npm run typecheck npm test npm run dev ``` Le serveur écoute par défaut sur `http://localhost:3000` (`/health` pour la vérification de santé) et sert les fichiers statiques de `client/dist` (variable `CLIENT_DIST_PATH`). ### Docker ```bash docker build -f server/Dockerfile -t youtubedownloader . docker run -p 3000:3000 youtubedownloader ``` ### CI/CD `.forgejo/workflows/publish-docker.yml` teste (lint + typecheck + tests + build) puis publie l'image sur `git.dev.kyuno.fr/kyuno/youtubedownloader` (push sur `main` -> `latest` + sha court, tag `vX.Y.Z` -> version). Nécessite un secret `REGISTRY_TOKEN` sur le dépôt (voir l'en-tête du workflow). ## Statut Squelette d'infrastructure en place (serveur/client minimaux, Docker, CI). Fonctionnalités listées ci-dessus pas encore implémentées. Voir les issues et PR pour le suivi du développement.