# 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 ```bash # Debian/Ubuntu sudo apt update sudo apt install yt-dlp ffmpeg openssh-client # Arch Linux sudo pacman -S yt-dlp ffmpeg openssh ``` ## Installation ```bash bun install ``` ## Configuration 1. Créez un fichier `.env` basé sur `.env.example`: ```bash cp .env.example .env ``` 2. Configurez les variables d'environnement: ```env 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 ``` 3. Assurez-vous que la clé SSH privée a les bonnes permissions: ```bash chmod 600 /path/to/your/ssh/key ``` ## Développement ```bash bun run dev ``` Le serveur sera disponible sur `http://localhost:3000`. ## Production ```bash bun run start ``` ## API Endpoints ### POST `/api/process` Télécharge, convertit et transfère un fichier audio YouTube vers Jellyfin. **Request Body:** ```json { "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "filename": "ma-chanson", "format": "mp3" } ``` **Response (Success):** ```json { "success": true, "message": "Fichier téléchargé, converti et transféré avec succès", "filename": "ma-chanson.mp3" } ``` **Response (Error):** ```json { "success": false, "error": "URL YouTube invalide", "details": "..." } ``` ### GET `/health` Vérifie l'état du serveur. **Response:** ```json { "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