Plan Guard pour Jellyfin

Pour Jellyfin : des limites de streaming par utilisateur ou par formule, appliquées avant et pendant la lecture, plus la détection des comptes partagés avec d’autres personnes.

Streams playing right now with each viewer's plan profile, quality and address; a second stream over a Basic plan is flagged with the reason1 sur 7

Plan Guard définit des limites de streaming par utilisateur ou par formule sur votre serveur Jellyfin, les applique avant et pendant que les gens regardent, et détecte les comptes partagés avec d’autres personnes, par exemple un compte payant utilisé dans plusieurs foyers à la fois. Jellyfin n’a pas de limite de flux simultanés en propre ; Plan Guard en ajoute une.

Ce qu’il fait

  • Profils de limites : flux simultanés, qualité à domicile et en déplacement (débit), résolution maximale, si la conversion vidéo (transcodage) est autorisée et si les sources 4K peuvent être converties, et combien d’appareils un compte peut utiliser en 30 jours. Chaque utilisateur reçoit un profil, ou le profil par défaut pour tous les autres. Les administrateurs ne sont jamais limités.
  • Avant le démarrage de la lecture : au-dessus de la limite de flux, une nouvelle lecture est refusée, et la qualité demandée est plafonnée au débit du profil pour le domicile ou le déplacement. Le débit à distance et le réglage de conversion vidéo sont aussi écrits dans la stratégie Jellyfin de chaque utilisateur.
  • Pendant la lecture : une lecture qui enfreint le profil reçoit un message, puis une commande d’arrêt, puis son transcodage est terminé sur le serveur, et enfin l’appareil est déconnecté. En option, l’appareil est aussi bloqué pour cet utilisateur.
  • Difficile à contourner (à partir de la version 0.1.2) : la limite de flux compte les véritables requêtes de lecture par connexion et par titre, y compris les requêtes de fichier direct, de téléchargement et HLS, pour qu’une deuxième connexion avec le même appareil ou un lecteur qui ne déclare pas sa lecture ne la contourne plus. Le plafond de qualité s’applique aussi aux requêtes directes. Vous pouvez traiter chaque client comme en déplacement, et un client sans adresse est compté comme en déplacement.
  • Détection des comptes partagés : un score de confiance par compte sur les 30 derniers jours, à partir de lectures simultanées sur des réseaux différents, de déplacements « impossibles », de trop nombreux réseaux en un jour, de trop nombreux appareils et d’appareils nouveaux. Par défaut, elle se contente de notifier ; vous pouvez aussi envoyer un message à l’utilisateur, forcer une nouvelle connexion ou bloquer l’appareil le plus récent.
  • Fonctionne avec Cashier : les abonnés reçoivent le profil lié à leur formule payante, et Plan Guard prend en charge l’arrêt des lectures.
  • Page d’administration : les flux actifs avec un bouton Stop (avec un message facultatif), les profils, les utilisateurs, les comptes partagés et un journal de chaque action. Les alertes de compte partagé vont aussi dans le journal d’activité de Jellyfin.

Compatibilité des clients

La limite de flux et le débit sont aussi écrits dans les propres réglages utilisateur de Jellyfin, donc ils s’appliquent à chaque client. Tous les lecteurs n’obéissent pas à une commande d’arrêt ; Plan Guard utilise ce que chacun supporte :

  • Jellyfin Web (testé de bout en bout) : une lecture supplémentaire est refusée avant de démarrer, Stop est obéi, et une source de 10 Mbit/s est transcodée à 1,6 Mbit/s sous un profil de 2 Mbit/s.
  • Les lecteurs sans contrôle à distance, comme Infuse, Kodi et DLNA, ignorent les commandes d’arrêt : pour eux, les arrêter signifie déconnecter l’appareil (l’utilisateur doit se reconnecter sur cet appareil). Vous pouvez désactiver cela dans les réglages. Cela découle du fonctionnement de ces lecteurs ; ce n’est pas encore testé sur les vraies applications.
  • Si un lecteur continue à lire après la commande d’arrêt, Plan Guard termine son transcodage sur le serveur, puis déconnecte l’appareil.
  • La limite de flux est vérifiée au démarrage de la lecture, y compris pour les lecteurs qui sautent la requête d’information de lecture de Jellyfin et demandent le flux directement.

Les applications natives (Android, Android TV, Swiftfin, Findroid, Kodi/JellyCon, Infuse, Streamyfin) n’ont pas encore été testées ; la liste de la réaction de chacune sera ajoutée après les tests.

Ce qu’il envoie, où

Rien concernant vos utilisateurs ne quitte votre serveur, et les localisations sont résolues localement. Plan Guard télécharge les bases City et ASN gratuites DB-IP Lite depuis download.db-ip.com, puis de nouveau au démarrage quand elles ont plus de 35 jours ; il le fait uniquement tant que la détection des comptes partagés est active (elle l’est par défaut) et quand il ne peut pas réutiliser une base de localisation déjà conservée par Access Log ou Security Notifications. Hormis cela, seule la vérification de licence atteint medialab.works. Sur votre serveur, Plan Guard conserve les accès par session (utilisateur, appareil, IP, localisation approximative) pendant 31 jours, ainsi qu’un journal de ses actions.

Détails complets pour chaque produit, y compris ce qui reste sur votre serveur : Licence, confidentialité et compatibilité.

Géolocalisation IP par DB-IP. Les bases DB-IP Lite sont distribuées sous CC BY 4.0.

Prérequis

  • Pour l’instant, medialab Server (la variante MediaLab de Jellyfin 12.2). La version actuelle ne se charge pas dans l’image Docker Jellyfin 12.2 officielle (l’API du serveur cesse de répondre) ; une version vérifiée sur l’image Docker officielle et sur le paquet Debian suivra, et d’ici là le plugin reste « Bientôt disponible ».
  • Facultatif : Cashier, pour des profils de limites par formule payante.

Limites

  • La résolution et la conversion vidéo sont vérifiées après le démarrage de la lecture (message, puis arrêt) ; seules la limite de flux et le débit sont appliqués avant.
  • Les réseaux mobiles, les VPN et les déplacements peuvent ressembler à du partage ; l’action par défaut pour les comptes partagés est donc une simple notification.

Licence

Le plugin est open source (GPL-3.0). Les versions compilées prêtes à l’installation sont publiques, comme le code source. Ce que vous achetez, c’est l’abonnement : la licence d’utilisation du plugin sur un serveur Jellyfin, les mises à jour incluses dans votre formule et le support : chaque mise à jour tant que l’abonnement est actif, via votre dépôt de plugins privé, et de l’aide quand quelque chose ne fonctionne pas. Le plugin vérifie la clé d’abonnement une fois par jour ; sans abonnement valide, il s’arrête jusqu’au renouvellement (rien n’est supprimé). Mensuel, annuel ou à vie (la licence à vie inclut un an de mises à jour), ou inclus dans le pack Jellyfin. Essai gratuit de 30 jours.

Code source. Pour chaque version, le code source complet correspondant est public, à côté de la version compilée, dans l’historique des versions, et aussi dans votre compte (Compte → Licences, Code source) ; chaque archive contient le texte intégral de la GPL-3.0 (LICENSE). Si vous avez besoin du code source d’une version que vous ne pouvez plus télécharger, demandez-nous et nous vous l’envoyons. Voir la section 10 de la Licence (CLUF).

Code écrit par nos soins, par MediaLab Works ; il ne contient aucun code tiers. Le lecteur des fichiers de base de localisation est notre propre implémentation, écrite à partir de la spécification publique du format MaxMind DB. Les données de localisation proviennent de DB-IP et sont téléchargées par votre serveur, non embarquées dans le plugin.

Fonctionne au mieux avec medialab Server

Ce plugin fonctionne sur Jellyfin officiel 12.2 ou plus récent. Sur medialab Server, notre serveur basé sur Jellyfin, avec les mêmes données, bibliothèques, utilisateurs et applications, il fonctionne mieux :

  • Verified – medialab. Le serveur vérifie la signature de nos plugins et vous montre que les fichiers sont exactement ceux que nous avons publiés. Un plugin modifié après sa publication est signalé.
  • Intégré à l’interface. Les plugins peuvent ajouter des boutons et des liens dans le menu de vos utilisateurs (par exemple « TV », « Share ») sans configuration web manuelle.
  • Prioritaire par défaut. Les plugins medialab passent en premier là où cela compte : tuners TV en direct, sources de guide et fournisseurs de sous-titres. L’ordre reste le vôtre : vous pouvez le modifier à tout moment.
  • Le catalogue medialab.works inclus, avec une installation sans confirmations supplémentaires.
  • Mises à jour depuis l’interface web, sans terminal (avec Self-Update de MediaLab) : vérifiez, mettez à jour et revenez en arrière depuis le tableau de bord ; si une nouvelle version ne démarre pas, le serveur revient de lui-même à la version précédente, avec vos données intactes.
  • Le même Jellyfin, à jour. medialab Server suit chaque semaine les versions stables de Jellyfin 12.x ; une nouvelle version n’est publiée qu’après avoir réussi tous les tests, y compris ceux de nos plugins.

Les applications Jellyfin (Android, iOS, TV, web) se connectent exactement comme à Jellyfin officiel.

Pour l’installer, lancez l’image de conteneur (guide) ou, sur Debian 12, les paquets apt, qui remplacent jellyfin-server et jellyfin-web en conservant vos données en place (guide).

medialab Server est un logiciel libre (GPL-2.0), basé sur Jellyfin. Le code source est public : medialab-server et medialab-server-web.

Configuration requise

  • Jellyfin Server 12.2 ou plus récent (Linux, Windows ou Docker)
  • Localisation depuis les bases gratuites DB-IP Lite City et ASN, téléchargées chaque mois (IP Geolocation by DB-IP, CC BY 4.0)
  • Cashier by MediaLab en option : profils de limites par formule payante
  • Open source (GPL-3.0) : le code source de chaque version est dans votre compte

Dernière version

0.1.4
publiée le 20 oct. 2026
Voir toutes les modifications →