No description
  • Rust 70.6%
  • TypeScript 19.6%
  • JavaScript 5.7%
  • CSS 2.9%
  • Makefile 1.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-07-16 01:25:45 +02:00
.cursor Refresh branding and update app icons 2026-07-13 11:51:47 +02:00
.forgejo/workflows Add Forgejo Actions CI and Windows AMD64 release workflows. 2026-07-12 00:19:14 +02:00
.vscode Initialisiere Streamertool als Tauri-App mit Overlay-Server. 2026-07-12 00:07:05 +02:00
docs Revert "chore: recover orphaned changes for #85" 2026-07-15 23:12:26 +02:00
extensions Revert "chore: recover orphaned changes for #85" 2026-07-15 23:12:26 +02:00
overlays feat(ui): configure raid templates and viewer tiers 2026-07-16 00:25:44 +02:00
public Refresh branding and update app icons 2026-07-13 11:51:47 +02:00
scripts test: add HTTP and realtime integration coverage (#14) 2026-07-12 08:01:58 +02:00
src Merge pull request 'feat: konfigurierbare Raid-Alerts mit Viewer-Tiers' (#99) from agent/issue-82-raid-alert-konfiguration-mit-raider-info into main 2026-07-16 01:25:45 +02:00
src-tauri Merge pull request 'feat: konfigurierbare Raid-Alerts mit Viewer-Tiers' (#99) from agent/issue-82-raid-alert-konfiguration-mit-raider-info into main 2026-07-16 01:25:45 +02:00
.gitignore Add Makefile for test/run/ci/build/release and forge docs. 2026-07-12 00:13:57 +02:00
AGENTS.md Refresh branding and update app icons 2026-07-13 11:51:47 +02:00
index.html Refresh branding and update app icons 2026-07-13 11:51:47 +02:00
Makefile feat(alerts): add viewer-tiered raid presentation 2026-07-16 00:23:18 +02:00
package-lock.json Initialisiere Streamertool als Tauri-App mit Overlay-Server. 2026-07-12 00:07:05 +02:00
package.json feat(alerts): add viewer-tiered raid presentation 2026-07-16 00:23:18 +02:00
README.md Implement overlay event queue and Twitch catalog 2026-07-15 20:44:16 +02:00
tsconfig.json Initialisiere Streamertool als Tauri-App mit Overlay-Server. 2026-07-12 00:07:05 +02:00
tsconfig.node.json Initialisiere Streamertool als Tauri-App mit Overlay-Server. 2026-07-12 00:07:05 +02:00
vite.config.ts Initialisiere Streamertool als Tauri-App mit Overlay-Server. 2026-07-12 00:07:05 +02:00

Streamertool

Desktop-App (Tauri 2 + React) für Streamer-Overlays in OBS. Zentraler Event-Bus, lokaler Overlay-Server (HTTP + WebSocket + SSE), Twitch Chat + EventSub (Follow/Sub/Raid), ZIP-Extensions, SQLite.

Voraussetzungen

  • Node.js + npm
  • Rust (stable) + Tauri-Systemabhängigkeiten

Start

make install   # oder: npm install
make run       # Tauri Dev

Make-Targets

Target Beschreibung
make test TypeScript-Check + cargo test
make run App starten (tauri dev)
make ci Install + Tests + Checks (ohne volle Bundles)
make build Release-Bundles für macOS ARM64 und Windows AMD64
make release Wie build, Artefakte nach release/

Windows-Cross-Compile von macOS braucht cargo-xwin (make setup-windows-cross).

Admin-UI startet im Fenster. Overlay-Server default: http://127.0.0.1:19850

Architektur und Sicherheit

Die Admin-UI erhält die lokale Serveradresse und ihren Admin-Token über einen kleinen, typisierten Tauri-IPC-Bootstrap. Fachliche Funktionen laufen über die gemeinsame Axum-API; OBS-Overlays empfangen Events per WebSocket oder SSE. Auch lokale /api/*-Aufrufe benötigen einen Bearer-Token, während /health und lokale Overlay-Auslieferung gezielt öffentlich bleiben.

Multi-PC / LAN

Für OBS auf einem zweiten Rechner: unter Einstellungen → Server LAN-Bind aktivieren, Token kopieren, Browser Source mit der Overlay-URL (inkl. Token) auf dem OBS-PC anlegen. Ausführliche Anleitung: docs/multi-pc.md.

OBS

  1. Twitch unter Verbindungen konfigurieren und verbinden (siehe unten)
  2. Unter Overlays die URL von Twitch Alerts (oder Twitch Chat) kopieren
  3. In OBS eine Browser Source mit dieser URL anlegen (transparenter Hintergrund)

Twitch (Chat + EventSub)

Für IRC-Chat reicht der Channel-Name; optional Access Token für authentifizierten Chat.

Für EventSub (alle von Twitch dokumentierten Channel-, Moderations-, Chat-, Community-, Stream- und User-Ereignisse):

  1. In der Twitch Developer Console eine App anlegen
  2. OAuth Redirect URL setzen: http://127.0.0.1:19850/api/twitch/oauth/callback (Port ggf. anpassen)
  3. In Streamertool unter Verbindungen: Client ID + Client Secret eintragen
  4. Mit Twitch anmelden (OAuth) oder Access/Refresh Token manuell eintragen
  5. Channel setzen und Verbinden

Die OAuth-Anmeldung fordert die benötigten, überwiegend lesenden Scopes gesammelt an. Nach einem Update der Event-Abdeckung muss die Twitch-Anmeldung einmal erneuert werden.

Die kompatiblen Kurztypen twitch.follow, twitch.subscribe, twitch.cheer und twitch.raid bleiben erhalten. Weitere EventSub-Typen werden verlustfrei als twitch.eventsub.<Twitch-Typ> publiziert, zum Beispiel twitch.eventsub.channel.poll.begin. App-, Organisations- oder Extension-spezifische Events, die nicht mit dem Channel-Token abonnierbar sind, stehen ebenfalls im Event-Katalog für Konfiguration und manuelle Tests bereit. Unter Alerts → Twitch-Event manuell auslösen kann jeder Twitch-Eventtyp mit editierbarem JSON-Payload über den normalen Event-Bus getestet werden.

Twitch Alerts ist ein gebündeltes, vertrauenswürdiges Builtin-Overlay und standardmäßig aktiv. Die Kategorien Follows, Abos, Bits und Raids lassen sich einzeln deaktivieren.

Streamer.Bot

  1. In Streamer.Bot unter Servers/Clients → WebSocket Server den Server aktivieren (Standard: 127.0.0.1:8080)
  2. Optional: WebSocket-Passwort setzen (Authentication)
  3. In Streamertool unter Verbindungen: Host, Port und ggf. Passwort eintragen
  4. Verbinden

Event-Typen auf dem Bus: streamerbot.<Source>.<Type> (z. B. streamerbot.Twitch.ChatMessage), plus Lifecycle-Events streamerbot.connected, streamerbot.disconnected, streamerbot.reconnecting, streamerbot.error und Action-Events streamerbot.action.completed / streamerbot.action.failed.

YouTube / YouTube Music

Unter Verbindungen → YouTube / YouTube Music das Bookmarklet kopieren, als Browser-Lesezeichen speichern und im geöffneten YouTube- bzw. YouTube-Music-Tab anklicken. Alternativ kann das mitgelieferte Tampermonkey-Userscript automatisch starten. Kein YouTube-OAuth erforderlich.

Event-Typen auf dem Bus: youtube.play, youtube.pause, youtube.position. Vollständige Einrichtung und Endpoint-Konfiguration: docs/youtube.md.

Actions auslösen:

curl -X POST http://127.0.0.1:19850/api/connectors/streamerbot/action \
  -H 'Authorization: Bearer <access-token>' \
  -H 'Content-Type: application/json' \
  -d '{"name":"My Action","args":{"key":"value"}}'

Realtime-Endpunkte:

  • WS /ws/events und WS /ws/overlay/:id
  • SSE /sse/events und SSE /sse/overlay/:id

Overlay-WebSockets verwenden ein Register/Delivery/Ack-Protokoll. Alle publizierten Events laufen durch eine globale Backend-FIFO; ein Event wird erst nach Ack, Listener-Timeout, Unsubscribe oder Disconnect freigegeben. Die Queue ist in der App unter Event-Queue sichtbar und steuerbar.

Wichtige Admin-Endpunkte:

  • GET /api/overlay-types Overlay- und Modul-Contributions samt JSON Schemas
  • GET|PUT|PATCH /api/overlays/:id/config revisionierte Instanz- und Modul-Config
  • GET /api/event-queue aktueller Event, Deliveries und wartende Events
  • POST /api/event-queue/current/ack und POST /api/event-queue/:id/discard

CI / Release (Forgejo Actions)

Workflows liegen unter .forgejo/workflows/ und laufen auf dem Label docker (wie forgecli).

Workflow Trigger Inhalt
ci.yml Push/PR auf main make ci (Typecheck, Tests, Frontend-Build, cargo check)
release.yml Tag (beliebig) Windows AMD64 NSIS via cargo-xwin, Upload als Forgejo-Release

Release anstoßen (bevorzugt):

forge release create 0.1.0 -t "Streamertool 0.1.0" -n "…" --wait-for-ci
# oder Tag pushen: git tag v0.1.0 && git push origin v0.1.0

macOS-Artefakte fehlen bewusst, bis ein Mac-Runner verfügbar ist. Lokal weiter: make release (macOS + Windows).

Extensions

Ausführliche Doku: docs/extensions.md.

Kurzablauf:

cp -r extensions/_template extensions/my-extension
# … Code anpassen …
make sign-extension DIR=extensions/my-extension   # optional, für verified
cd extensions/my-extension && zip -r ../my-extension.zip manifest.json manifest.sig overlay assets

ZIP in der App unter Erweiterungen installieren. Trust-Status (Verifiziert / Nicht signiert) wird in der UI angezeigt.

OpenAI-kompatibel

Unter Einstellungen baseUrl, apiKey, model setzen. Endpoint: POST /api/ai/chat.