Bei 2500 Karten scrollt man sonst lange, bis die Reiter wieder auftauchen.
Die Leiste bleibt jetzt oben stehen, der Knopf unten rechts bringt einen
zurück.
Er animiert selbst statt mit behavior: 'smooth'. Das rechnet mit fester
Geschwindigkeit und bräuchte über 300.000 Pixel Seitenhöhe Minuten; hier
sind es immer 450 ms.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013XVnRop5c3or3B8xE2hpgZ
Die Runde ist jetzt benannt. Der Host pflegt die Namensliste im neuen Reiter
"Verwaltung", alle anderen wählen sich oben rechts einen aus. Der Name landet
serverseitig an Vorschlägen und Wertungen, statt aus einem Textfeld zu
kommen, in das jeder schreiben konnte, was er wollte.
Dazu zwei Sammelstellen, beide nach Person gruppiert und für alle sichtbar,
aber nur selbst bearbeitbar:
- "Sammlungen": Filme, die man sehen möchte. Getrennt vom Rad-Vorschlag,
von dem es weiterhin einen je Person gibt.
- "Wünsche": was der Seite noch fehlt. Der Host darf hier alle Einträge
ändern und löschen.
Die Filmliste hat jetzt zwei Ansichten. Kompakt ist die gewohnte Karte,
Details stellt Cover, Text und vier Szenenbilder nebeneinander — eine Karte
so breit wie vier kompakte oder die halbe Reihe, je nachdem was zuerst
zutrifft. Reihen und Einzelfilme sind dabei exakt gleich hoch; die
Blätterleiste liegt dafür über dem Cover statt darunter.
Die Filmansicht nutzt die Breite: links Cover, Text und Knöpfe, rechts der
Trailer, darunter die Bilder. Ein Klick zeigt ein Bild in voller Größe.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013XVnRop5c3or3B8xE2hpgZ
Nach Bewertung sortiert sieht man immer dieselben zwanzig Filme. Zufällig
kommt auch mal etwas aus der Mitte des Katalogs nach oben.
Jeder Film bekommt dafür einen festen Wurf. Mit Math.random() direkt im
Vergleich würde die Sortierung bei jedem Filtern neu durcheinanderspringen.
Neu gemischt wird beim Neuladen der Seite.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013XVnRop5c3or3B8xE2hpgZ
Wer einen Film aufs Rad gesetzt hat, kann ihn dort auch wieder runternehmen.
Im Raster tragen alle Filme auf dem Rad jetzt eine Marke, nicht nur der
eigene Vorschlag — so sieht man auf einen Blick, was schon vorgeschlagen
ist. Die Karten hören dafür am Live-Kanal mit.
Dazu: der Host löscht einzelne Wertungen, das Cover dockt oben an statt
mittig, und die Suche heißt schlicht "Globale Suche".
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013XVnRop5c3or3B8xE2hpgZ
Bisher fragten Vorschlag und Wertung getrennt nach dem Namen — einmal in der
Filmansicht, einmal über der Liste. Jetzt steht er einmal in der
Reiterleiste und gilt für beides. Wer keinen einträgt, bleibt anonym.
Dazu: make stream geht jetzt an den Server und beendet vorher ein laufendes
OBS. Der lokale Weg heißt make stream-local.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013XVnRop5c3or3B8xE2hpgZ
Was der Server sendet, läuft. Wer anhält, fällt aus dem Gleichlauf und
müsste den Rückstand hinterher mit erhöhtem Tempo aufholen. Statt der
Browser-Steuerung gibt es jetzt eine eigene Leiste: Lautstärke, Stumm und
Vollbild. Pausieren, Spulen und Geschwindigkeit fehlen darin.
Abgedeckt sind alle Wege zum Anhalten, weil jeder davon ein pause-Ereignis
auslöst: Rechtsklick-Menü, Bild-in-Bild, Medientasten der Tastatur. Die
Leertaste wird zusätzlich abgefangen, sie käme sonst dem Video zuvor.
Der Ton startet stumm, sonst verweigert der Browser die automatische
Wiedergabe. Ein Klick auf "Ton einschalten" gilt als Geste und schaltet ihn
frei.
Beim Tonweg zwei Fehler behoben:
- Der Loopback zum Mithören nahm das Ende der aufrufenden Shell mit. Mitten
im Film hörte dann niemand mehr etwas. setsid löst ihn davon.
- Der Lautstärkeregler fasst seit der Umstellung die neue Senke an, nicht
mehr das Ausgabegerät. Stand das auf halber Kraft, war bei "voll
aufgedreht" Schluss bei der Hälfte. Jetzt geht das Gerät auf Anschlag und
die Senke übernimmt den gewohnten Pegel.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013XVnRop5c3or3B8xE2hpgZ
Ein Zuschauer erzeugt rund zwanzig Anfragen je Sekunde. Bisher baute der
Proxy dafür jedes Mal eine neue Verbindung auf, holte die Antwort komplett
in den Speicher und schickte sie durch gzip — obwohl Videosegmente bereits
komprimiert sind. Gemessen: 47-67 % CPU für einen einzigen Zuschauer.
Jetzt ein gemeinsamer Client mit offenen Verbindungen, die Daten fließen
stückweise durch, und /stream bleibt von der Kompression verschont. Dazu
protokolliert die App die Stream-Anfragen nicht mehr einzeln; das waren
410 Zeilen je Minute bei einem Zuschauer.
Ergebnis: 11,5 % statt 47-67 %. Mit fünfzehn Zuschauern liegt die Last bei
150 % von 400 % verfügbarer Rechenzeit.
Dazu am Rand:
- hlsAlwaysRemux hält den Muxer durchgehend offen. Vorher riss er 60 s nach
dem letzten Zuschauer ab und setzte beim Neuaufbau die Zeitbasis zurück.
- hlsAllowOrigin ist veraltet und heißt jetzt hlsAllowOrigins.
- Der Player holt höchstens mit 1,1-fachem Tempo auf statt mit 1,5. Das
reicht für normale Schwankungen und bleibt unhörbar.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013XVnRop5c3or3B8xE2hpgZ