Commit Graph

55 Commits

Author SHA1 Message Date
team3
9fdfe27fb9 update 2026-10-07 16:57:36 +02:00
team3
e415c3ac0d update 2026-10-07 15:47:07 +02:00
team3
2f771a9c30 update 2026-10-07 15:41:41 +02:00
team3
b65f4d75f4 update 2026-10-01 00:45:19 +02:00
team3
bd1694528a update 2026-10-01 00:09:16 +02:00
team3
8ddd8208f5 update 2026-09-30 19:53:27 +02:00
team3
09ae21c4b2 update 2026-09-30 15:15:00 +02:00
team3
817f39a42c update 2026-09-30 14:53:23 +02:00
team3
fd7893b5d2 update 2026-09-30 14:31:50 +02:00
team3
624df7e7ee update 2026-09-30 01:34:44 +02:00
team3
ae5b1d0b1d update 2026-09-30 01:24:49 +02:00
team3
70b37054ba update 2026-09-30 01:16:47 +02:00
team3
c589e389df update 2026-09-30 00:59:59 +02:00
team3
7bf9667007 update 2026-09-29 13:47:36 +02:00
team3
be59afd5e2 update 2026-09-29 01:18:06 +02:00
team3
997c681103 update 2026-09-29 01:01:15 +02:00
team3
f80b8c5826 update 2026-09-29 00:54:58 +02:00
team3
f7c9017946 update 2026-09-19 13:32:35 +02:00
team3
a90044b0a7 update 2026-09-18 23:47:25 +02:00
team3
db77c1f985 update 2026-09-18 22:12:01 +02:00
team3
33b3975b61 update 2026-09-17 19:10:10 +02:00
team3
ea54a86db4 update 2026-09-17 15:40:28 +02:00
team3
a1684cf54f update 2026-09-17 12:14:40 +02:00
team3
b42cf64782 update 2026-09-16 17:55:23 +02:00
team3
cb78225e86 update 2026-09-16 17:00:35 +02:00
team3
bfaf0313c1 update 2026-09-16 15:03:56 +02:00
team3
a639e40a23 update 2026-09-16 13:21:50 +02:00
team3
90fffbe077 update 2026-09-16 12:09:38 +02:00
team3
aa5c64ae23 update 2026-09-10 18:00:51 +02:00
Team3
7191388787 update 2026-09-09 19:57:45 +02:00
team3
d51c160ce6 update 2026-09-09 18:27:21 +02:00
team3
3dc091d04a update 2026-09-09 18:15:10 +02:00
team3
847b747870 update 2026-09-09 17:58:52 +02:00
team3
2bd03000e8 update 2026-09-09 10:01:58 +02:00
team3
446edc85fb update 2026-09-08 23:56:34 +02:00
team3
00cb299f31 update 2026-09-08 23:50:25 +02:00
team3
08c2e8f885 update 2026-09-08 23:39:04 +02:00
team3
13df86e9fc update 2026-09-08 17:57:51 +02:00
team3
4de5018409 Klebende Reiterleiste und Zurück-nach-oben
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
2026-09-08 14:49:14 +02:00
team3
9840230250 Benutzer, Sammlungen, Wünsche und zwei Kartenansichten
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
2026-09-03 19:30:48 +02:00
team3
8bd6a4e6b1 Zufällige Reihenfolge als Standard
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
2026-09-02 19:49:47 +02:00
team3
7cf7144d6d Rad-Markierung in Gruen
Rot ist die Akzentfarbe und steht sonst fuer Warnungen. Gruen sagt hier
besser, was gemeint ist: der Film ist schon dabei.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013XVnRop5c3or3B8xE2hpgZ
2026-09-02 19:43:07 +02:00
team3
5777dd5908 Vorschlag umschaltbar, Wertungen einzeln löschbar
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
2026-09-02 19:36:53 +02:00
team3
b356a16529 README: BBR auf dem sendenden Rechner
Ohne die Einstellung ruckelt der Stream, und die Ursache ist von außen nicht
zu erkennen: Es sieht nach zu wenig Bandbreite aus, ist aber der
Stau-Algorithmus, der auf den vollen Modempuffer hereinfällt.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013XVnRop5c3or3B8xE2hpgZ
2026-08-31 20:47:59 +02:00
team3
3ebcde7234 Senden mit 30 Bildern und 6000 kbit/s
Mit 60 Bildern und 9000 kbit/s warf OBS abends 45 % der Bilder weg, weil der
Upload sie nicht mehr durchbrachte: gemessen nur 11-12 Mbit/s gegen 25-37
zur Mittagszeit. Rendering und Encoding lagen dabei bei 0 % Verlust, die
Maschine war also unschuldig.

Filme laufen ohnehin mit 24 Bildern, da bringen 60 nichts. Das Keyframe-
Intervall geht auf 30 mit, sonst kann MediaMTX keine Segmente von einer
Sekunde mehr schneiden.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013XVnRop5c3or3B8xE2hpgZ
2026-08-31 20:36:54 +02:00
team3
b9dbd5e753 Genre-Badges alphabetisch
Nach Häufigkeit sortiert wanderten sie bei jedem Reiterwechsel an eine
andere Stelle. Alphabetisch findet man ein Genre immer dort, wo man es
zuletzt gesehen hat.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013XVnRop5c3or3B8xE2hpgZ
2026-08-31 13:54:11 +02:00
team3
bbd1270fd9 Ein Namensfeld für alles, oben rechts
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
2026-08-31 13:48:40 +02:00
team3
56c3f10026 Stream lässt sich nicht mehr anhalten
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
2026-08-31 13:32:43 +02:00
team3
af66ae6e1c Stream: Rechenlast des Proxys senken
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
2026-08-31 13:19:02 +02:00
team3
f5395735a5 update 2026-08-31 12:28:34 +02:00