--- title: Jellyswarrm created: 2026-06-06 updated: 2026-06-06 type: app tags: [catalogue, reverse-proxy, media, jellyfin, federation, rust] confidence: medium contested: false sources: [https://selfh.st/apps/?tag=Reverse+Proxy, https://github.com/LLukas22/Jellyswarrm] --- # 🚦 Jellyswarrm > **Reverse proxy spécialisé Jellyfin qui fusionne plusieurs serveurs en une bibliothèque unifiée**. Pour qui veut centraliser ses médias (et ceux de ses amis) sans configurer chaque client avec N serveurs. ## 📋 Informations Générales | Champ | Valeur | | :--- | :--- | | **Site web** | (GitHub uniquement) | | **GitHub** | [LLukas22/Jellyswarrm](https://github.com/LLukas22/Jellyswarrm) | | **License** | GPL-2.0 (relicencé depuis MIT le 2025-08-29) | | **Langage** | Rust (90.4 %), HTML, Python | | **Étoiles GitHub** | 749 ⭐ | | **Dernière MAJ** | 2025-08-29 (v0.2.1) | | **Catégorie** | [[cat-reverse-proxy|Reverse Proxy]], Media, Jellyfin | ## 📝 Description **Jellyswarrm** est un **reverse proxy L7 ultra-spécialisé** : il se place devant **plusieurs instances Jellyfin** et les présente aux clients (Jellyfin Mobile, web, TV, etc.) comme **un seul serveur unifié**. C'est la réponse au problème classique : "j'ai un serveur Jellyfin chez moi, mon ami en a un autre à 500 km, et je veux que mes apps n'en voient qu'un seul avec la bibliothèque agrégée". Le tagline officiel résume bien : *"Many servers. Single experience."* **Caractéristiques principales** : - ✅ **Reverse proxy Jellyfin-compatible** : le client croit parler à un serveur Jellyfin normal - ✅ **Bibliothèque unifiée** : fusion des films/séries/musique de tous les serveurs en arrière - ✅ **Lecture directe depuis le serveur d'origine** : pas de transit par Jellyswarrm (transcodage fait sur place) - ✅ **Mapping utilisateur** : lier ses comptes entre serveurs pour une expérience cohérente - ✅ **Synchronisation de comptes** (fédération) : ajouter un user une seule fois - ✅ **UI Jellyfin web embarquée** : accessible directement via `/` - ✅ **WebSocket** pour les features temps-réel (SyncPlay en cours de stabilisation) - ✅ **Client apps existants** : la plupart des apps Jellyfin fonctionnent sans modification - ⚠️ **Encore en développement actif** : certaines features annoncées comme QuickConnect, ajustement automatique du bitrate, gestion des médias via l'UI ne sont pas encore implémentées **Public cible** : utilisateurs de **Jellyfin multi-site** (plusieurs localisations géographiques, serveurs amis, familles éclatées) qui veulent **une seule bibliothèque**, **une seule URL** et **un seul login**. Particulièrement adapté aux personnes qui partagent des médias avec leurs proches sans monter un serveur centralisé coûteux. ## 🚀 Installation ### Option 1 : Docker Compose (recommandé) ```yaml # docker-compose.yml version: '3.8' services: jellyswarrm: image: ghcr.io/llukas22/jellyswarrm:latest container_name: jellyswarrm restart: unless-stopped ports: - "3000:3000" volumes: - ./data:/app/data # config + base SQLite environment: - JELLYSWARRM_USERNAME=admin - JELLYSWARRM_PASSWORD=jellyswarrm # ⚠️ CHANGER en production ! - JELLYSWARRM_HOST=0.0.0.0 - JELLYSWARRM_PORT=3000 networks: - proxy networks: proxy: external: true ``` > 💡 Le tag `latest` est reconstruit à chaque release. Pour un pinning, utilisez `:v0.2.1` (ou version actuelle). ### Variante Traefik (exposer derrière Traefik) ```yaml # docker-compose.yml (variante) version: '3.8' services: jellyswarrm: image: ghcr.io/llukas22/jellyswarrm:latest container_name: jellyswarrm restart: unless-stopped volumes: - ./data:/app/data environment: - JELLYSWARRM_USERNAME=admin - JELLYSWARRM_PASSWORD=changeme labels: - "traefik.enable=true" - "traefik.docker.network=proxy" - "traefik.http.routers.jellyswarrm.rule=Host(`media.example.com`)" - "traefik.http.routers.jellyswarrm.entrypoints=websecure" - "traefik.http.routers.jellyswarrm.tls.certresolver=letsencrypt" - "traefik.http.services.jellyswarrm.loadbalancer.server.port=3000" networks: - proxy networks: proxy: external: true ``` ### Option 2 : Binaire natif (build depuis source) ```bash # Prérequis : Rust toolchain + Node.js 20+ git clone --recurse-submodules https://github.com/LLukas22/Jellyswarrm.git cd Jellyswarrm cd ui && npm install && cd .. cargo build --release ./target/release/jellyswarrm-proxy ``` ## ⚙️ Configuration Initiale 1. **Lancer le conteneur** : `docker compose up -d`. 2. **Accéder à l'UI d'administration** : `http://YOUR_HOST:3000/ui` (login avec `JELLYSWARRM_USERNAME` / `JELLYSWARRM_PASSWORD`). 3. **Ajouter les serveurs Jellyfin upstream** : menu "Servers" → URL + clé API de chaque instance Jellyfin. 4. **Mapper les utilisateurs** : menu "Users" → lier un compte local à un compte distant. 5. **Tester** : `http://YOUR_HOST:3000` affiche l'UI Jellyfin web unifiée, brancher les clients (Android TV, iOS, web) sur cette URL unique. 6. **Sécuriser** derrière HTTPS (Traefik/Caddy) avant d'exposer sur Internet. > ⚠️ **Changer le mot de passe par défaut** `jellyswarrm` immédiatement après la première connexion. ## 🔄 Alternatives ### Open Source - **Jellystat** — analytics et stats Jellyfin (pas de fusion) - **Jellyseerr** — requêtes média style Overseerr (Jellyfin-aware) - **JellySync** — synchronisation entre serveurs (expérimental) - **Multi-server dans l'app Jellyfin** — support natif dans certaines apps (Jellyfin Media Player, etc.) mais pas toutes - **SMB / NFS mounts** — monter les bibliothèques distantes (perf réseau catastrophique, pas viable hors LAN) - **Plex** — supporte multi-serveurs nativement mais c'est un autre écosystème ### Propriétaires (ce que Jellyswarrm remplace) - **Plex** (passé à un modèle freemium) — multi-serveurs natif mais non libre - **Emby Premiere** — multi-serveurs en option payante - **Stremio + Real-Debrid** — agrégation SaaS de sources ### Comparaison rapide | Critère | Jellyswarrm | Multi-serveur dans app Jellyfin | Plex | | :--- | :--- | :--- | :--- | | Licence | GPL-2.0 | GPL-2.0 (Jellyfin) | Propriétaire | | Fusion bibliothèque | ✅ | ❌ (commutation) | ✅ | | Single login | ✅ | ❌ | ✅ | | Lecture directe | ✅ | n/a | ✅ | | Stabilité | ⚠️ WIP | ✅ | ✅ | | Transcodage | Côté serveur d'origine | Côté serveur sélectionné | Centralisé ou remote | **Verdict** : **Jellyswarrm** est la **seule solution self-hosted** connue pour la fusion de bibliothèques Jellyfin. À utiliser si vous avez **réellement plusieurs serveurs** et que la commutation manuelle est insupportable. Sinon, l'ajout multi-serveur natif des clients Jellyfin reste la voie la plus stable. ## 🔐 Sécurité - **Authentification admin** sur `/ui` : changer le mot de passe par défaut - **HTTPS obligatoire** en production (Traefik/Caddy) : Jellyfin utilise des streams longs, MITM est un risque réel - **Clés API Jellyfin upstream** : stockées dans `./data`, sécuriser les permissions du volume (`chmod 700`) - **Mapping d'utilisateurs** : limiter aux comptes de confiance ; un user mappé peut voir la bibliothèque du serveur lié - ⚠️ **Pas d'auth globale sur l'UI Jellyfin** : c'est Jellyswarrm qui **doit** faire office d'authentification, sinon tout le monde voit tout - ⚠️ **WIP** : l'auth et certaines protections sont en cours de durcissement - **Reverse proxy HTTPS** : utiliser les middlewares Traefik `secureHeaders` (HSTS, X-Frame-Options, etc.) ## 📚 Ressources - [README officiel](https://github.com/LLukas22/Jellyswarrm/blob/main/README.md) - [Documentation UI](https://github.com/LLukas22/Jellyswarrm/blob/main/docs/ui.md) - [Documentation Config](https://github.com/LLukas22/Jellyswarrm/blob/main/docs/config.md) - [Reddit r/JellyfinCommunity WIP](https://www.reddit.com/r/JellyfinCommunity/comments/1my7q6p/wip_jellyswarrm_a_reverse_proxy_to_merge_multiple/) - [Patreon LLukas22 (devlog)](https://www.patreon.com/posts/jellyswarrm-into-145059441) ## Pages Liées - [[cat-reverse-proxy]] — Catégorie Reverse Proxy - [[app-caddy]] — reverse proxy L7 pour exposition HTTPS - [[app-traefik]] — reverse proxy L7 cloud-native - [[app-jellyfin]] — Le serveur média en aval - [[comparatif-reverse-proxy]] — Comparaison détaillée - [[media-stack]] — Stack média auto-hébergée