Einblendungen, Chat, Statusleiste, Effekte, Pausenbild. Kein Build, kein Framework - OBS laedt die Dateien direkt, und jede Zwischenstufe waere ein Ding, das mitten im Stream kaputtgehen kann. Server-Sent Events statt WebSocket, entgegen der Skizze in chat-control.md: Node bringt einen WebSocket-*Client* mit, aber keinen Server, `EventSource` verbindet sich von allein neu, und die Richtung stimmt - das Overlay hoert nur zu. Gegen die tote Browser-Source nach einem Neustart stehen drei Dinge: der eingebaute Reconnect, ein Herzschlag als echtes Ereignis (ein SSE-Kommentar haelt die Verbindung offen, ist im Browser aber unsichtbar), und ein Zustands-Schnappschuss beim Verbinden. Abos, Raids, Bits und Loeschungen kommen ueber IRC-USERNOTICE und CLEARCHAT herein; das wurde bisher weggeworfen. Follows fehlen weiter, die gibt es nur ueber EventSub. GIFs im Chat: Twitch schickt dafuer einen Tag `gifs`, den wir nicht kannten. gifs=0-22|Pnd7qLFuGCOntZcNKB|https://media0.giphy.com/media/.../giphy.gif PRIVMSG #abdulive_ :[Idk GIF by Respective] Der Nachrichtentext ist nur ein Platzhalter, der Bereich markiert ihn. Ausgewertet wird er jetzt; ohne das stand woertlich "[Idk GIF by Respective]" im Bild. Gefunden wurde der Tag durch einen Rohmitschnitt - in 3094 Nachrichten aus acht grossen Kanaelen war kein einziges GIF, weil die Adresse eben nicht im Text steht. Zwei Fehler, die beim Durchklicken im Browser aufgefallen sind: - Die Aufraeumfunktion im Chat zaehlte Zeilen, die erst nach der Ausblend-Animation aus dem DOM verschwinden, und lief in eine Endlosschleife. In OBS waere die Quelle beim vierzehnten Chatbeitrag eingefroren. - Der Bereichsparser der GIFs war zu nachsichtig: `-1-4` zerfaellt beim Trennen in ['', '1', '4'], und `Number('')` ist 0 - der Bereich saehe gueltig aus und wuerde den falschen Textteil ersetzen. Auf der Uebersichtsseite steht fuer jede Einblendung, jede Chat-Variante und jeden Effekt ein Knopf. Ohne den liesse sich eine Raid-Einblendung nur pruefen, indem man auf einen echten Raid wartet. Was einen Zustand setzt, ist waehrend eines Streams gesperrt; "Stand zuruecksetzen" ausdruecklich nicht, sonst kaeme man aus einem erfundenen Zustand nicht mehr heraus. build-package.ts nimmt jetzt auch html/css/js mit - sonst liefert das Paket 404 statt Overlay. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
scripts
Befehle der Anwendung ruft man ueber abdulive.cmd <name> auf (im Repo:
node apps/cli/main.ts <name>). Daneben stehen hier die Skripte fuer
Paketbau, Installation und Start.
| Skript | Wo | Zweck |
|---|---|---|
build-package.ts |
Entwicklungsrechner / CI | Baut dist/abdulive-<version>-win-x64.zip samt Updater-Manifest |
install.ps1 |
Stream-PC | Installiert Programm, Daten und Autostart. Ohne Administratorrechte |
uninstall.ps1 |
Stream-PC | Entfernt Programm und Autostart. -AuchDaten loescht auch Datenbank, Clips und Modell |
uninstall.ps1 |
Stream-PC | Entfernt Programm und Autostart. -AuchDaten loescht auch Datenbank, Clips und Modell |
launcher.ps1 |
Stream-PC | Vom Aufgabenplaner gestartet: Update anwenden, dann Daemon starten |
check-env |
Stream-PC | Prueft ffmpeg, whisper-cli, Schriften, Sprachmodell, Verzeichnisse, OBS |
auth |
Stream-PC | OAuth-Flow fuer Broadcaster- und Bot-Token |
db:migrate |
Stream-PC | Migrationen anwenden |
calibrate |
Stream-PC | Facecam-Crop einmessen, schreibt config/layout.yaml |
sources |
Stream-PC | Listet die OBS-Quellen der laufenden Szene und sagt, welche im 9:16-Ausschnitt landen |
backup.ps1 |
Stream-PC | VACUUM INTO aus %LOCALAPPDATA%\abdulive\db, 30 Generationen |
update |
Stream-PC | Neue Fassung pruefen und bereitlegen; eingespielt wird beim naechsten Start |