apiyt2jellyfin/README.md
2026-02-25 22:54:49 +01:00

2.8 KiB

Yt2Jellyfin - Backend

API REST pour télécharger, convertir et transférer de la musique YouTube vers un serveur Jellyfin.

Stack Technique

  • Bun - Runtime JavaScript ultra-rapide
  • Hono - Framework web léger
  • TypeScript - Typage statique

Prérequis Système

Les outils suivants doivent être installés sur le système:

  • yt-dlp - Pour télécharger les vidéos YouTube
  • ffmpeg - Pour la conversion audio
  • scp - Pour le transfert SSH (généralement préinstallé)

Installation des dépendances système

# Debian/Ubuntu
sudo apt update
sudo apt install yt-dlp ffmpeg openssh-client

# Arch Linux
sudo pacman -S yt-dlp ffmpeg openssh

Installation

bun install

Configuration

  1. Créez un fichier .env basé sur .env.example:
cp .env.example .env
  1. Configurez les variables d'environnement:
SSH_PRIVATE_KEY_PATH=/path/to/your/ssh/key
JELLYFIN_HOST=192.168.1.100
JELLYFIN_SSH_PORT=22
JELLYFIN_DESTINATION_PATH=/home/playlist
CORS_ORIGIN=http://localhost:5173
TEMP_DIR=./temp
  1. Assurez-vous que la clé SSH privée a les bonnes permissions:
chmod 600 /path/to/your/ssh/key

Développement

bun run dev

Le serveur sera disponible sur http://localhost:3000.

Production

bun run start

API Endpoints

POST /api/process

Télécharge, convertit et transfère un fichier audio YouTube vers Jellyfin.

Request Body:

{
  "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
  "filename": "ma-chanson",
  "format": "mp3"
}

Response (Success):

{
  "success": true,
  "message": "Fichier téléchargé, converti et transféré avec succès",
  "filename": "ma-chanson.mp3"
}

Response (Error):

{
  "success": false,
  "error": "URL YouTube invalide",
  "details": "..."
}

GET /health

Vérifie l'état du serveur.

Response:

{
  "status": "ok"
}

Structure

src/
├── config/           # Configuration
│   └── env.ts
├── controllers/      # Contrôleurs API
│   └── process-controller.ts
├── middleware/       # Middleware HTTP
│   └── cors.ts
├── services/         # Logique métier
│   ├── youtube-downloader.ts
│   └── file-transfer.ts
├── types/            # Définitions TypeScript
│   └── api.ts
├── utils/            # Utilitaires
│   └── validators.ts
└── index.ts          # Point d'entrée

Sécurité

  • Validation stricte des URLs YouTube pour prévenir les injections de commandes
  • Sanitisation des noms de fichiers
  • Utilisation de clés SSH pour l'authentification
  • CORS configuré pour autoriser uniquement l'origine du frontend
  • Nettoyage automatique des fichiers temporaires