- Rust 70.6%
- TypeScript 19.6%
- JavaScript 5.7%
- CSS 2.9%
- Makefile 1.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| .cursor | ||
| .forgejo/workflows | ||
| .vscode | ||
| docs | ||
| extensions | ||
| overlays | ||
| public | ||
| scripts | ||
| src | ||
| src-tauri | ||
| .gitignore | ||
| AGENTS.md | ||
| index.html | ||
| Makefile | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
| tsconfig.node.json | ||
| vite.config.ts | ||
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
- Twitch unter Verbindungen konfigurieren und verbinden (siehe unten)
- Unter Overlays die URL von Twitch Alerts (oder Twitch Chat) kopieren
- 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):
- In der Twitch Developer Console eine App anlegen
- OAuth Redirect URL setzen:
http://127.0.0.1:19850/api/twitch/oauth/callback(Port ggf. anpassen) - In Streamertool unter Verbindungen: Client ID + Client Secret eintragen
- Mit Twitch anmelden (OAuth) oder Access/Refresh Token manuell eintragen
- 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
- In Streamer.Bot unter Servers/Clients → WebSocket Server den Server aktivieren (Standard:
127.0.0.1:8080) - Optional: WebSocket-Passwort setzen (Authentication)
- In Streamertool unter Verbindungen: Host, Port und ggf. Passwort eintragen
- 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/eventsundWS /ws/overlay/:idSSE /sse/eventsundSSE /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 SchemasGET|PUT|PATCH /api/overlays/:id/config– revisionierte Instanz- und Modul-ConfigGET /api/event-queue– aktueller Event, Deliveries und wartende EventsPOST /api/event-queue/current/ackundPOST /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.