Files
Flaro/web
ScarriffleandClaude Opus 5 255eb7c2f0 Spider-Man ist nicht 720p, er ist breit
Die Auflösung wurde allein aus der Höhe gebildet. Ein Kinoformat von 2.39:1
liegt als 1920×800 vor — nach der Höhe gerechnet kam „720p" heraus, und das
stand so in der Oberfläche. Jetzt zählt die grössere von Breite und Höhe;
Hochformat kippt damit nicht, und 4K-Breitbild heisst nicht mehr 1440p.

Die Detailansicht hat zwei Leserschaften, und bisher bekamen beide dasselbe.
Wer schauen will, sieht jetzt Laufzeit, Auflösung und die Sprachen — jede
einmal, statt „Englisch · Englisch · Englisch · Englisch · Deutsch". Wer die
Mediathek betreut, sieht darunter Dateiformat, Grösse und den Ordner. Der
Ordner verrät eine falsche Zuordnung in einer Sekunde: steht über der
Beschreibung „Hanni & Nanni 3" und der Ordner heisst „Hanni und Nanni", ist
die Sache klar. Er kommt nur für Administratoren überhaupt vom Server —
versteckt im Client wäre er weiterhin auslesbar.

Ein geplanter Titel war unsichtbar. Das ist die Hälfte, die nichts bringt:
dass er kommt, ist der Sinn des Planens. Er steht jetzt mit „Verfügbar ab …"
in der Mediathek, und die Datei geht trotzdem nicht heraus — Download wie
Strom lehnen bis zum Termin ab, auch für Administratoren. Wer vorziehen will,
hat „Jetzt veröffentlichen"; eine Hintertür für eine Rolle wäre eine Regel,
die manchmal gilt.

Was ein Auffrischen geändert hat, steht jetzt unter „Zu prüfen" — in einer
eigenen Gruppe mit „Zur Kenntnis" statt „Veröffentlichen". Diese Titel sind
sichtbar; es gibt nichts freizugeben, nur etwas abzuhaken.

Und das Protokoll sagt endlich, wo es knallt. „InvalidOperationException:
Nullable object must have a value." ohne eine einzige Zeile Herkunft ist für
niemanden eine Diagnose — weder für den Betreiber noch für mich.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-06 14:51:00 +02:00
..

Flaro Web

Die Weboberfläche für Rechner, auf denen es keine App gibt — Windows vor allem.

Aufbau

Ordner Was
app/ Das Frontend (Vite, TypeScript)
server/ Ein Server ohne Abhängigkeiten, der die Anfragen weiterreicht und die gebauten Dateien ausliefert
frontend/ Die erste Fassung als einzelne Datei. Läuft, wird abgelöst.
jellyfin-theme/ Ein Kleid für Jellyfins eigene Oberfläche — die kleine Lösung von vorher

Warum ein eigener Server?

Er löst zwei Dinge, an denen die einzelne Datei scheitert, und zwar unabhängig davon, wie gut das Frontend geschrieben ist:

  • Herkunft. Anfragen laufen über /api und damit über dieselbe Adresse wie die Seite. Kein CORS, auch nicht beim Streamen.
  • Klartext und Verschlüsselung. Läuft der Medienserver über http und die Seite über https, blockiert der Browser den Stream. Dagegen kann keine Zeile im Frontend etwas tun — ein Server davor schon.

Nebenbei bleibt der Zugangsschlüssel beim Server, statt im Browser zu liegen.

Betreiben

cd app && npm install && npm run build
cd ../server && FLARO_SERVER=http://jellyfin:8096 node index.js

Dann auf http://localhost:8080. Der Port lässt sich über PORT ändern.

Entwickeln

cd app && FLARO_SERVER=http://jellyfin:8096 npm run dev

Vite übernimmt dabei das Weiterreichen, der eigene Server wird nicht gebraucht.