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 YouTubeffmpeg- Pour la conversion audioscp- 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
- Créez un fichier
.envbasé sur.env.example:
cp .env.example .env
- 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
- 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
Description
Languages
TypeScript
100%