Cashier — kostenpflichtige Jellyfin-Abonnements

Verkaufe monatliche oder jährliche Abonnements für deinen Jellyfin-Server über Stripe; die Zahlung aktiviert das Konto, fehlende Zahlung sperrt es.

Cashier macht deinen Jellyfin-Server zu einem kostenpflichtigen Dienst. Ein Besucher wählt einen Tarif, zahlt mit Stripe, und das Jellyfin-Konto ist sofort aktiv; wird eine Verlängerung nicht bezahlt, wird das Konto gesperrt, bis die Rechnung bezahlt ist. Es arbeitet mit Registration zusammen, das die Registrierungsseite und die Kontoerstellung bereitstellt.

Was es macht

  • Von dir festgelegte Tarife, monatlich und jährlich, nach der Anzahl der Geräte, die gleichzeitig abspielen dürfen (zum Beispiel 1 bis 4 Bildschirme), optional mit kostenlosem Testzeitraum für das erste Abonnement.
  • Zahlungen über dein eigenes Stripe-Konto: Karte, Apple Pay / Google Pay und die lokalen Methoden, die Stripe anbietet; Kartendaten berühren deinen Server nie. Optionale Promotion-Codes, Rechnungsadresse und Stripe Tax.
  • Konto aktiv bei Zahlung: Sobald Stripe die Zahlung bestätigt, wird das Konto mit den Limits des Tarifs freigeschaltet.
  • Fehlende Zahlung sperrt: Nach einer fehlgeschlagenen Zahlung bleibt das Konto für eine Kulanzfrist (standardmäßig 3 Tage) aktiv, während Stripe es erneut versucht, dann wird es deaktiviert; die Zahlung der Rechnung schaltet es wieder frei. Das Löschen lange gesperrter Konten ist optional und standardmäßig aus.
  • Schutz des Stream-Limits: Wiedergabe über die Geräteanzahl des Tarifs hinaus wird gestoppt.
  • E-Mails an Abonnenten: Rechnungserinnerung, Beleg, fehlgeschlagene Zahlung, Sperrung mit dem Bezahllink und Reaktivierung, über die SMTP-Einstellungen von Registration.
  • Verwaltung: Abonnenten, Zahlungen und ein Journal im Jellyfin-Dashboard; Stripe wird alle 15 Minuten abgeglichen, falls ein Webhook verpasst wird.

Voraussetzungen

  • Jellyfin Server 12.2 oder neuer.
  • Registration, installiert und lizenziert (Cashier nutzt dessen Registrierungsseite, E-Mail-Einstellungen und Kontoerstellung).
  • Ein Stripe-Konto (kostenlos erstellt; Stripe berechnet seine eigene Gebühr pro Zahlung) und der Server über HTTPS erreichbar, damit Stripe den Webhook aufrufen kann.

Häufige Fragen

Kann ich Leuten den Zugang zu meinem Jellyfin-Server in Rechnung stellen? Ja: Registration stellt die Registrierungsseite bereit, Cashier das Abonnement. Besucher wählen einen Tarif, zahlen über dein Stripe-Konto, und ihr Konto wird sofort freigeschaltet; eine unbezahlte Verlängerung sperrt es. Siehe die Anleitung.

Was passiert mit bestehenden Abonnenten ohne gültige Cashier-Lizenz? Es werden keine neuen kostenpflichtigen Registrierungen akzeptiert, bis die Lizenz wieder gültig ist; es wird nichts gelöscht.

Was es wohin sendet

  • Stripe (api.stripe.com, mit dem Secret- / eingeschränkten Key von deinem eigenen Stripe-Konto) — der einzige Zahlungsprovider:
    • Stripe-Checkout-Session (Seite bei Stripe gehostet; Abonnement): der Tarifpreis, Rückkehr-URLs zu deinem Server, die Jellyfin-Benutzer-ID, Server-ID und der Benutzername (Metadaten), die E-Mail-Adresse des Kunden (aus Cashier oder der Registrierungsanfrage) oder die bestehende Stripe-Kunden-ID, die Sprache; optional: Testzeitraum, Promotion-Codes, Rechnungsadresse und automatische Steuer (standardmäßig aus).
    • Erstellen des Produkts und der Preise (Service-Name, Betrag, Währung, Intervall, Geräteanzahl), Konfiguration des Stripe Customer Portal (Karte/Tarif wechseln, Rechnungen, kündigen).
    • Der Stripe-Webhook an deinen Server — nur wenn du „create webhook automatically“ klickst (braucht eine öffentliche HTTPS-Adresse); sonst liest der Server die Stripe-Events alle 15 Minuten (kein offener Port nötig).
    • Kündigung des Stripe-Abonnements, wenn du einen Benutzer mit aktivem Abonnement löschst.
    • Kartendaten erreichen deinen Server nie: Zahlungsdetails werden nur auf Stripes Seiten eingegeben.
  • Eingehender Webhook (/Cashier/Stripe/Webhook): Stripe-Signatur geprüft, maximal 256 KB.
  • E-Mail (über das SMTP des Registration-Plugins): an den Kunden — Rechnung fällig (3 Tage vorher), Zahlung fehlgeschlagen, Zahlung erfolgreich, Konto gesperrt, Konto reaktiviert (alle standardmäßig an), mit Service-Name, Benutzername, Betrag, Datum, Stripe-Rechnungslink und einem signierten Bezahllink (7 Tage); an den Admin — Zahlungen und Fehlschläge, über Registrations Kanäle (E-Mail / Telegram).
  • Die Bezahlseite und der TV-QR werden vom Plugin ausgeliefert (QR wird auf dem Server erzeugt, keine externen Ressourcen). Die Admin-Seite enthält nur Links zum Stripe-Dashboard.
  • Dazu der Lizenz-Client, in jedem Plugin gleich: siehe Lizenzierung und Datenschutz in unseren Plugins.

Lokal gespeichert:

  • data/secrets.json (wird nicht an die Konfiguration mitgesendet, die an den Browser geht): Stripe-Secret-Key, Webhook-Secret, HMAC-Key für Bezahllinks.
  • data/subscriptions.json: pro Abonnent — Benutzer-ID und -Name, E-Mail, Stripe-Kunden-/Abonnement-IDs, Status, Tarif, Zeitraumdaten; Zahlungen (Rechnungs-ID, Betrag, Währung, Ergebnis, Rechnungslink; max. 5000), Journal (max. 2000), verarbeitete Event-IDs (30 Tage).
  • Konfiguration: Tarife/Preise, Stripe-IDs (Produkt, Portal, Webhook, Konto), öffentliche Adresse.
  • Aufbewahrung: Die Abonnenten-Zeile wird zusammen mit dem Server-Benutzer gelöscht; gesperrte Konten werden nicht automatisch gelöscht (Standardeinstellung).

Kompatibilität mit Clients

  • Kontosperrung/-reaktivierung und das gleichzeitige Stream-Limit pro Tarif sind serverseitig: 🟢 jeder Client. Das Limit wird nativ erzwungen (MaxActiveSessions) bei der Anmeldung / beim Wiedergabestart.
  • Kundenseite (/Cashier/Page): jeder Browser; TVs zahlen vom Handy per QR. ✅ End-to-End gegen einen Stripe-Simulator (25/25, inklusive TV → Handy → Zahlung → TV automatisch angemeldet).
  • ❔ Im automatisierten Test noch nicht gegen echtes Stripe getestet (nur Simulator); native Jellyfin-Apps: ❔ nicht getestet.

Legende: ✅ verifiziert (End-to-End- oder Test auf dem Gerät) · 🟢 serverseitig, funktioniert mit jedem Client (konstruktionsbedingt, kein clientspezifischer Test) · ➖ nicht zutreffend · ❔ nicht getestet.

Lizenzierung

Das Plugin ist Open Source (GPL-3.0). Die installationsfertigen Builds sind öffentlich, genau wie der Quellcode. Was du kaufst, ist das Abonnement: die Lizenz zur Nutzung des Plugins auf einem Jellyfin-Server, die Updates, die dein Tarif umfasst, und Support: jedes Update, solange das Abonnement aktiv ist, über dein privates Plugin-Repository, und Hilfe, wenn etwas nicht funktioniert. Das Plugin prüft den Abonnementschlüssel einmal am Tag; ohne gültiges Abonnement stoppt es, bis du verlängerst (es wird nichts gelöscht). Monatlich, jährlich oder als Lifetime-Lizenz (die Lifetime-Lizenz umfasst ein Jahr Updates), oder im Jellyfin-Paket enthalten. 30 Tage kostenlos testen.

Quellcode. Für jede Version ist der vollständige zugehörige Quellcode öffentlich, neben dem Build, im Changelog, und auch in deinem Konto (Konto → Lizenzen, Quellcode); jedes Archiv enthält den vollständigen Text der GPL-3.0 (LICENSE). Wenn du den Quellcode einer Version brauchst, die du nicht mehr herunterladen kannst, frag uns, und wir schicken ihn dir. Siehe Abschnitt 10 der EULA.

Rechte an Inhalten

Cashier berechnet deine Benutzer über dein eigenes Stripe-Konto. Allein du bist dafür verantwortlich, die Rechte an dem Inhalt oder der Dienstleistung zu besitzen, für die du Geld verlangst (zum Beispiel die Filme, Serien oder Kanäle auf deinem Server); MediaLab Works stellt nur die Software zur Verfügung und ist nicht Partei deiner Verkäufe. Stripe kann ein Konto sperren oder einschränken, das für Inhalte ohne Rechte Geld verlangt — siehe Stripes Liste der restricted businesses.

Funktioniert am besten mit medialab Server

Dieses Plugin funktioniert mit dem offiziellen Jellyfin 12.2 oder neuer. Auf medialab Server, unserem auf Jellyfin basierenden Server mit denselben Daten, Bibliotheken, Nutzern und Apps, funktioniert es besser:

  • Verified – medialab. Der Server prüft die Signatur unserer Plugins und zeigt dir, dass die Dateien genau die sind, die wir veröffentlicht haben. Ein nach der Veröffentlichung verändertes Plugin wird markiert.
  • In die Oberfläche integriert. Plugins können Schaltflächen und Links zum Menü deiner Nutzer hinzufügen (zum Beispiel „TV“, „Share“), ohne manuelle Web-Konfiguration.
  • Standardmäßig Vorrang. medialab-Plugins stehen dort an erster Stelle, wo es darauf ankommt: Live-TV-Tuner, Programmführer-Quellen und Untertitelanbieter. Die Reihenfolge bestimmst weiterhin du: Du kannst sie jederzeit ändern.
  • Der Katalog von medialab.works ist enthalten, die Installation erfolgt ohne zusätzliche Bestätigungen.
  • Updates über die Weboberfläche, ohne Terminal (mit Self-Update by MediaLab): prüfen, aktualisieren und zurücksetzen über das Dashboard; startet eine neue Version nicht, kehrt der Server von selbst zur vorherigen zurück, deine Daten bleiben unversehrt.
  • Dasselbe Jellyfin, immer aktuell. medialab Server folgt jede Woche den stabilen Versionen von Jellyfin 12.x; eine neue Version wird erst veröffentlicht, wenn sie alle Tests bestanden hat, einschließlich der Tests unserer Plugins.

Die Jellyfin-Apps (Android, iOS, TV, Web) verbinden sich genauso wie mit dem offiziellen Jellyfin.

Zur Installation startest du das Container-Image (Anleitung) oder, unter Debian 12, die apt-Pakete, die jellyfin-server und jellyfin-web ersetzen und deine Daten an Ort und Stelle lassen (Anleitung).

medialab Server ist freie Software (GPL-2.0) auf Basis von Jellyfin. Der Quellcode ist öffentlich: medialab-server und medialab-server-web.

Voraussetzungen

  • Jellyfin Server 12.2 oder neuer (Linux, Windows oder Docker)
  • Registration by MediaLab, installiert und lizenziert
  • Ein Stripe-Konto und ein über HTTPS erreichbarer Server (für den Webhook)
  • Open Source (GPL-3.0): Der Quellcode jeder Version liegt in deinem Konto

Neueste Version

0.1.6
veröffentlicht am 20.10.2026
Alle Änderungen ansehen →

Der Build ist öffentlich; für die Nutzung des Plugins brauchst du eine Lizenz oder den kostenlosen 30-tägigen Testzeitraum.