Application web self-hosted pour lister, mettre en file d'attente et extraire des vidéos/audios YouTube (yt-dlp + ffmpeg), avec suivi en temps réel.
Find a file
Nicolas a73ead75a0
Some checks failed
Publier l'image Docker / test (pull_request) Failing after 4s
Publier l'image Docker / publish (pull_request) Has been skipped
fix: image Docker glibc + UI plus douce + placeholders génériques
- server/Dockerfile : base node:22-bookworm-slim au lieu d'alpine. Le
  binaire autonome yt-dlp_linux est lié à la glibc ; sur musl (Alpine),
  spawn échouait en prod avec ENOENT bien que le fichier soit présent et
  exécutable (interpréteur ELF introuvable). Repéré via un rapport de bug
  en conditions réelles. Même choix que mediaDrop pour un souci similaire.
- client/src/styles/base.scss : palette partagée (custom properties CSS),
  fond/texte/bordures adoucis, boutons/inputs cohérents, variante
  "secondary" pour les actions non-principales (Annuler). Remplace le
  rendu par défaut trop contrasté (fond très sombre côté navigateur non
  compensé, rouge vif sur les erreurs).
- Placeholders des champs chaîne/mots-clés rendus génériques
  (@nomdelachaine, mot-clé1/mot-clé2) au lieu d'un exemple spécifique.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-16 22:22:44 +02:00
.forgejo/workflows feat(client): frontend (formulaire d'ajout + file d'attente) 2026-09-16 09:28:49 +02:00
client fix: image Docker glibc + UI plus douce + placeholders génériques 2026-09-16 22:22:44 +02:00
server fix: image Docker glibc + UI plus douce + placeholders génériques 2026-09-16 22:22:44 +02:00
spec fix: image Docker glibc + UI plus douce + placeholders génériques 2026-09-16 22:22:44 +02:00
.gitignore chore: init .gitignore 2026-09-16 07:33:38 +02:00
biome.json feat: squelette serveur/client + Docker + CI de build/release 2026-09-16 07:55:43 +02:00
package-lock.json feat: squelette serveur/client + Docker + CI de build/release 2026-09-16 07:55:43 +02:00
package.json feat: squelette serveur/client + Docker + CI de build/release 2026-09-16 07:55:43 +02:00
README.md feat: squelette serveur/client + Docker + CI de build/release 2026-09-16 07:55:43 +02:00

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

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

# 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

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.