ZeasyAlexandClaude Opus 5 bc2c8f6cbe Overlay: fuenf Browser-Sources fuer OBS
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>
2026-09-18 00:13:28 +02:00
2026-09-09 20:12:26 +02:00

abdulive-toolkit

Werkzeugkasten für den Twitch-Kanal abdulive_. Ein Monorepo mit mehreren kleinen Diensten, die sich einen gemeinsamen Kern teilen: Twitch-Auth, Helix-Client, EventSub/IRC-Ingest und eine SQLite-Datenbank.

TypeScript auf Node 24, ohne Laufzeitabhängigkeiten und ohne Build-Schritt — Node führt die .ts-Dateien direkt aus, SQLite und WebSocket sind eingebaut. Betrieb über Docker Compose.

Zielgröße des Kanals: ~5–30 gleichzeitige Zuschauer. Alles hier ist auf diese Phase optimiert — nicht auf Skalierung, sondern auf Wachstum und Bindung.

Die neun Tools

# Tool Ordner Zweck Status
1 Clip-to-Shorts apps/clipper Clips → 9:16 mit Untertiteln, Upload-fertig geplant
2 Go-Live-Broadcaster apps/broadcaster Stream-Start → Discord/Bluesky/Instagram geplant
3 Raid- & Netzwerk-Tool apps/raid-scout Raid-Ziele finden, Raid-Historie führen geplant
4 Analytics-Dashboard apps/dashboard Viewer vs. Chat, Titel-Performance, Retention geplant
5 VOD-Kapitel apps/vod-chapters Szenen-/Kategoriewechsel → Timestamps geplant
6 Community-Gedächtnis apps/community Chatter-Profile, Begrüßungen, Overlay-Hinweise geplant
7 Chat steuert Dinge apps/overlay-server + apps/overlay-web Overlay, Soundboard, Minigames, Umfragen geplant
8 Punktesystem + Shop apps/loyalty Punkte mit echten Konsequenzen geplant
9 Stream-Recap apps/recap Zusammenfassung nach Streamende in Discord geplant

Dazu der Dienst, der unter allen anderen liegt:

| — | Ingest-Daemon | apps/ingest | IRC + Helix → DB, Einrichtungsseite | läuft |

Doku

Auf dem Stream-PC installieren

Eine native Windows-Anwendung. Node, ffmpeg, whisper.cpp und die Schriften sind mitgeliefert — vorausgesetzt wird nur OBS. Kein Docker, kein WSL2, nichts zu übersetzen (ADR-0007).

Ein Befehl, ohne Administratorrechte. Programm und Daten landen im Benutzerprofil.

irm https://git.zeasy.dev/ZeasyAlex/abdulive/raw/branch/main/scripts/install.ps1 | iex

Kein Netz auf dem Stream-PC? Dann das Paket von der Releases-Seite laden, entpacken und darin install.ps1 ausführen.

Der Installer lädt danach das Sprachmodell, läuft den Selbsttest, startet den Daemon und öffnet die Einrichtungsseite. Ein Befehl, und du bist da.

Dort die Twitch-Zugangsdaten eintragen. Sie werden verschlüsselt abgelegt, nicht in einer Datei im Projekt (ADR-0005).

Ausführlich: docs/05-setup.md.

Paket bauen und ausliefern

node scripts/build-package.ts --version 0.5.0

Lädt Node, ffmpeg und whisper.cpp bei ihren Herausgebern, packt alles nach dist/ und schreibt abdulive.json — das Manifest, das der Updater auf Abdus Rechner abfragt. Läuft auch in der CI unter Linux.

Auf dem Stream-PC sieht abdulive update täglich nach und legt eine neue Fassung bereit; eingespielt wird sie beim nächsten Start, nie mitten im Stream.

Aktueller Stand

Vier von sieben Scheiben des MVP „Clip-Knopf" sind gebaut: Toolchain, Einrichtung im Browser, Twitch-Auth, Datenbank, Chat-Aufnahme, OBS-Anbindung mit !clip, 9:16-Render und Untertitel. Dazu die native Auslieferung mit Installer und Updater. 79 Tests grün.

Offen: die Abnahme der OBS-Anbindung an einem laufenden OBS, dann S5 — Onboarding-Assistent und Sichtungsseite.

Details: docs/handoff.md

Tests

node --test "packages/**/*.test.ts" "apps/**/*.test.ts"
S
Description
No description provided
Readme
2.3 MiB
0 Stars 1 Watchers 0 Forks
2026-10-26 12:04:25 +00:00
Languages
TypeScript 73.9%
JavaScript 11%
HTML 8.3%
CSS 3.3%
PowerShell 2.4%
Other 1.1%