Cashier — abonnements Jellyfin payants

Vendez des abonnements mensuels ou annuels à votre serveur Jellyfin via Stripe ; le paiement active le compte, le non-paiement le suspend.

Cashier transforme votre serveur Jellyfin en service payant. Un visiteur choisit une formule, paie avec Stripe et le compte Jellyfin devient actif aussitôt ; quand un renouvellement n’est pas payé, le compte est suspendu jusqu’au paiement de la facture. Il fonctionne avec Registration, qui fournit la page d’inscription et la création de compte.

Ce qu’il fait

  • Des formules que vous définissez, mensuelles et annuelles, selon le nombre d’appareils pouvant lire en même temps (par exemple 1 à 4 écrans), avec un essai gratuit facultatif pour le premier abonnement.
  • Des paiements avec votre propre compte Stripe : carte, Apple Pay / Google Pay et les méthodes locales proposées par Stripe ; les données de carte ne transitent jamais par votre serveur. Codes promotionnels, adresse de facturation et Stripe Tax en option.
  • Compte actif dès le paiement : dès que Stripe confirme le paiement, le compte est activé avec les limites de la formule.
  • Le non-paiement suspend : après un échec de paiement, le compte reste actif pendant un délai de grâce (3 jours par défaut) pendant que Stripe réessaie, puis il est désactivé ; le paiement de la facture le réactive. La suppression des comptes suspendus depuis longtemps est facultative et désactivée par défaut.
  • Garde-fou de limite de flux : la lecture au-delà du nombre d’appareils de la formule est arrêtée.
  • E-mails aux abonnés : rappel de facture, reçu, échec de paiement, suspension avec le lien de paiement et réactivation, via les paramètres SMTP de Registration.
  • Administration : abonnés, paiements et un journal dans le tableau de bord de Jellyfin ; une réconciliation avec Stripe a lieu toutes les 15 minutes au cas où un webhook serait manqué.

Exigences

  • Jellyfin Server 12.2 ou plus récent.
  • Registration, installé et sous licence (Cashier utilise sa page d’inscription, ses paramètres e-mail et sa création de compte).
  • Un compte Stripe (ouverture gratuite ; Stripe prélève ses propres frais par paiement) et le serveur joignable en HTTPS, pour que Stripe puisse appeler le webhook.

Questions fréquentes

Puis-je facturer l’accès à mon serveur Jellyfin ? Oui : Registration fournit la page d’inscription et Cashier l’abonnement. Les visiteurs choisissent une formule, paient via votre compte Stripe et leur compte est activé aussitôt ; un renouvellement impayé le suspend. Voir le guide.

Sans licence Cashier valide, que deviennent les abonnés existants ? Aucune nouvelle inscription payante n’est acceptée tant que la licence n’est pas redevenue valide ; rien n’est supprimé.

Ce qu’il envoie où

  • Stripe (api.stripe.com, avec la clé secrète / restreinte de votre propre compte Stripe) — le seul prestataire de paiement :
    • Session Stripe Checkout (page hébergée par Stripe ; abonnement) : le prix de la formule, les URL de retour vers votre serveur, l’identifiant utilisateur Jellyfin, l’identifiant du serveur et le nom d’utilisateur (métadonnées), l’adresse e-mail du client (depuis Cashier ou la demande d’inscription) ou l’identifiant client Stripe existant, la langue ; en option : période d’essai, codes promotionnels, adresse de facturation et taxe automatique (désactivée par défaut).
    • Création du produit et des prix (nom du service, montant, devise, intervalle, nombre d’appareils), configuration du portail client Stripe (changer de carte/de formule, factures, résiliation).
    • Le webhook Stripe vers votre serveur — seulement si vous cliquez sur « create webhook automatically » (nécessite une adresse HTTPS publique) ; sinon le serveur lit les événements Stripe toutes les 15 min (aucun port ouvert nécessaire).
    • Résiliation de l’abonnement Stripe lorsque vous supprimez un utilisateur avec un abonnement actif.
    • Les données de carte n’atteignent jamais votre serveur : les coordonnées de paiement ne sont saisies que sur les pages de Stripe.
  • Webhook entrant (/Cashier/Stripe/Webhook) : signature Stripe vérifiée, 256 Ko max.
  • E-mail (via le SMTP du plugin Registration) : au client — échéance de facture (3 jours avant), échec de paiement, paiement réussi, compte suspendu, compte réactivé (tout activé par défaut), contenant le nom du service, le nom d’utilisateur, le montant, la date, le lien de la facture Stripe et un lien de paiement signé (7 jours) ; à l’administrateur — paiements et échecs, via les canaux de Registration (e-mail / Telegram).
  • La page de paiement et le QR TV sont servis par le plugin (QR généré sur le serveur, aucune ressource externe). La page d’administration ne contient que des liens vers le tableau de bord Stripe.
  • Plus le client de licences, identique dans chaque plugin : voir Licences et confidentialité dans nos plugins.

Stocké localement :

  • data/secrets.json (exclu de la configuration envoyée au navigateur) : clé secrète Stripe, secret du webhook, clé HMAC des liens de paiement.
  • data/subscriptions.json : par abonné — identifiant et nom d’utilisateur, e-mail, identifiants client/abonnement Stripe, statut, formule, dates de période ; paiements (identifiant de facture, montant, devise, résultat, lien de facture ; 5000 max), journal (2000 max), identifiants d’événements traités (30 jours).
  • Configuration : formules/prix, identifiants Stripe (produit, portail, webhook, compte), adresse publique.
  • Conservation : la ligne d’abonné est supprimée avec l’utilisateur du serveur ; les comptes suspendus ne sont pas supprimés automatiquement (valeur par défaut).

Compatibilité avec les clients

  • La suspension/réactivation de compte et la limite de flux simultanés par formule sont côté serveur : 🟢 tout client. La limite est appliquée nativement (MaxActiveSessions) à la connexion / au démarrage de lecture.
  • Page client (/Cashier/Page) : tout navigateur ; les TV paient depuis un téléphone via QR. ✅ de bout en bout contre un simulateur Stripe (25/25, y compris TV → téléphone → paiement → TV connectée automatiquement).
  • ❔ Pas encore testé contre le vrai Stripe dans la suite automatisée (simulateur seulement) ; applications Jellyfin natives : ❔ non testé.

Légende : ✅ vérifié (test de bout en bout ou sur appareil) · 🟢 côté serveur, fonctionne avec tout client (par conception, pas de test par client) · ➖ sans objet · ❔ non testé.

Licences

Le plugin est open source (GPL-3.0). Les versions compilées prêtes à installer 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 comprises dans votre formule et le support — chaque mise à jour tant que l’abonnement est actif, via votre dépôt de plugins privé, plus 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 comprend 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, ainsi que dans votre compte (Compte → Licences, Code source) ; chaque archive contient le texte complet de la GPL-3.0 (LICENSE). Si vous avez besoin du code source d’une version que vous ne pouvez plus télécharger, écrivez-nous et nous vous l’envoyons. Voir la section 10 de la Licence (CLUF).

Droits sur le contenu

Cashier prélève vos utilisateurs via votre propre compte Stripe. Vous êtes seul responsable de détenir les droits sur le contenu ou le service facturé (par exemple les films, séries ou chaînes de votre serveur) ; MediaLab Works fournit uniquement le logiciel et n’est pas partie à vos ventes. Stripe peut fermer ou restreindre un compte qui facture du contenu sans en détenir les droits — voir la liste des activités restreintes de Stripe.

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)
  • Registration by MediaLab, installé et sous licence
  • Un compte Stripe et le serveur accessible en HTTPS (pour le webhook)
  • Open source (GPL-3.0) : le code source de chaque version est dans votre compte

Dernière version

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

La version compilée est publique ; l’utilisation du plugin nécessite une licence ou l’essai gratuit de 30 jours.