Urlaubsaufnahmen, Mitschnitte, Vorträge. Jedes Verfahren, das bei Filmen richtig ist, wäre hier falsch: „Sommer 2019 Teil 2" ist kein Film von 2019, zwei Aufnahmen desselben Tages sind nicht zwei Fassungen derselben Sache, und in keinem Katalog steht, was da liegt. Die neue Art `Videos` nimmt den Dateinamen als Titel, zerlegt nichts, legt nichts zusammen und fragt niemanden. Der Pfad ist dabei der Vergleichsschlüssel, nicht der Name — zwei Dateien „Ausflug.mp4" in zwei Ordnern sind zwei Ausflüge. **Der Unterordner wird zur Kategorie.** Statt eine eigene Gruppierung zu bauen, bekommt jedes Video den Namen seines Ordners als Genre. Damit greifen Filter, Kategorienansicht und Suche, ohne dass es in der Oberfläche etwas Neues gibt. Eine zweite Gruppierung daneben hiesse: zwei Wege für dasselbe, und einer davon wäre überall sonst ungepflegt. Die Anreicherung übergeht jetzt alles, was `MatchLocked` trägt. Das galt bisher nur für von Hand korrigierte Zuordnungen und gilt damit auch hier — eine Suche nach „Abend am Feuer" fände irgendeinen fremden Film, und der stünde danach mit Plakat und Beschreibung in der Urlaubsmediathek. Geprüft: vier Dateien in zwei Ordnern ergeben vier Titel mit ihren Dateinamen, keine Jahre, keinen fremden Treffer — und genau zwei Kategorien, denn was direkt in der Wurzel liegt, bekommt keine. 742 Tests grün, davon zwei neue. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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
/apiund damit über dieselbe Adresse wie die Seite. Kein CORS, auch nicht beim Streamen. - Klartext und Verschlüsselung. Läuft der Medienserver über
httpund die Seite überhttps, 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.