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

150 lines
2.8 KiB
Markdown

# 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