Leo & Beani's Stream Tools
Überblick über alle Funktionen der Stream-Tools – mit Beispielen und klaren Beschreibungen.
Basis-Dateien für Twitch-Login und Startseite.
Einstiegsseite der Stream Tools. Zeigt das Streamtools-Branding mit Hintergrundbild und lädt die Twitch-OAuth-Logik.
lib/oAuth2.php ein (Session/Token-Prüfung)assets/StreamTools.jpeg// Nach Aufruf von index.php wird bei fehlendem Login // zu Twitch OAuth weitergeleitet (über lib/oAuth2.php). include(__DIR__ . '/lib/oAuth2.php');
Zentrale Twitch-Authentifizierung. Verwaltet Access Token, Validierung, Logout und Broadcaster-ID für alle anderen Seiten.
$_SESSION['access_token'], token_expires, authenticated_broadcaster_id// Nach ?auth=reauth wird zur Twitch Authorize-URL weitergeleitet. // Nach Rückkehr: Token tauschen, speichern, getUserInfo für Broadcaster-ID. $AUTH_URL = "https://id.twitch.tv/oauth2/authorize"; $TOKEN_URL = "https://id.twitch.tv/oauth2/token"; $VALIDATE_URL = "https://id.twitch.tv/oauth2/validate";
Seiten, die als OBS-Overlay oder eigenständige Tools genutzt werden.
Twitch-Chat-Anbindung mit Bot-Befehlen. Steuert Szenen und lädt Overlays (Clips, Previously, Raid-Wheel, Countdown) in ein iframe. Optional OBS Browser Source / obsstudio-API.
OBS-Einbindung: Wird OBS.php als Browser-Quelle in OBS verwendet, muss der Quelle in OBS die benötigte Seitenberechtigung erteilt werden, damit die obsstudio-API (z. B. Szenenwechsel, aktuelle Szene) verfügbar ist. Ohne diese Berechtigung steht window.obsstudio nicht zur Verfügung.
Ohne Twitch-Anmeldung: Ist noch keine Session vorhanden, erscheint eine Meldung mit Link „Jetzt anmelden“ und die Seite lädt nach 15 Sekunden automatisch neu – praktisch, wenn die Browser-Source vor dem Login geöffnet wurde und nach dem Anmelden in anderem Tab beim nächsten Reload durchstarten soll.
Link für OBS Browser-Quelle (in OBS: Quelle hinzufügen → Browser):
wss://irc-ws.chat.twitch.tv, JOIN mit OAuthircMessageParser.js geparst (Tags, Bot-Befehle)channel.chat.message) mit passendem command_filter existiert, wird diese ausgeführt (Platzhalter {user_name}, {message.text}, {command_params}). Sonst Fallback: bekannte Befehle wie !OBS <Szenenname>, !clear, !previously, !clips, !raidwheel, !countdown [Sekunden], !say <Text> (Berechtigung pro Befehl im Panel).api/obs-control.php (GET, broadcaster_id). Steuer-Panel obs-control-panel.php sendet Befehle per POST (nur eingeloggt, pro Streamer getrennt).!OBS "in Game" → Szenenwechsel (obsstudio.setCurrentScene) !countdown 60 → countdown.php?t=60 im iframe !clips → clips.php im iframe !say Hallo → Sprachausgabe (SpeechSynthesis)
obs-control-panel.php // Steuer-Panel (Twitch-Login), sendet an api/obs-control.php api/obs-control.php (GET) // ?broadcaster_id=… → liefert nächsten Befehl (OBS pollt alle 2 s) api/obs-control.php (POST) // action=… & params=… (Session erforderlich, pro Streamer)
Webbasiertes Steuer-Panel für die Stream Tools. Zeigt Verbindungsstatus (Twitch, OBS.php, Chat, In OBS, Stream live) und Buttons für Overlay-Aktionen. Optional Einladungsmodus per ?invite=TOKEN für Gäste ohne Twitch-Login.
!echo) festlegen, Aktion z. B. „Chat-Nachricht senden“ mit Platzhaltern {user_name}, {message.text}, {command_params}. Wenn keine Regeln vorhanden sind: Button „Standard-Konfiguration wiederherstellen“ legt die sechs Standard-Chat-Befehle an.!poll und danach der Option (z. B. !poll ja, !poll 1). Beliebig viele Antwortoptionen; pro Option ein Wert (Label + Wert für !poll). Es zählt die letzte Stimme pro Nutzer. Nach Ablauf wird das Ergebnis automatisch im Overlay angezeigt. Overlay: poll.php?broadcaster_id=… als Browser-Source.obs-control-panel.php // Nach Twitch-Login (oAuth2). Einladung für Gäste: obs-control-panel.php?invite=TOKEN
Zeigt Twitch-Clips des Kanals in einem Vollbild-iframe. Clip-URLs werden per Helix/API geladen; ein Clip wird zufällig oder sequenziell abgespielt, inkl. Overlay-Text (Clip-Titel, Ersteller).
broadcaster_id abrufenrandojs.js für Zufallsauswahl// Aufruf z. B. von OBS.php per !clips clips.php?broadcaster_id=' . $BROADCASTER . '
Countdown-Overlay in Sekunden. Parameter t legt die Dauer fest. Optik: dunkler Hintergrund, Partikel-Canvas, große Zahl, Apple-ähnliches Design.
?t=60 – Countdown von 60 Sekunden (Standard 60, Minimum 1)countdown.php?t=10
// Wird von OBS.php bei !countdown 10 geladen
Chat-Umfragen mit einheitlichem Befehl !poll und Option (z. B. !poll ja, !poll 1). Das Overlay erscheint als Bauchbinde (untere Leiste wie bei Gameinfo): Frage links, Optionen als Pills mit grün hervorgehobenem Befehl, rechts die verbleibende Zeit (z. B. „noch 1 Min“). Nach Ablauf wird automatisch das Ergebnis mit Balken und Stimmenzahl angezeigt.
!poll <Option> (Option = Wert oder Label, z. B. !poll 1 oder !poll Pizza). Pro Nutzer zählt die letzte abgegebene Stimme.?broadcaster_id=DEINE_TWITCH_ID – erforderlichapi/obs-poll.php?broadcaster_id=... // GET: aktueller Poll (status active|ended|none, poll mit question/options/ends_at bzw. results) api/obs-poll.php (POST) action=create // question, duration_seconds, options (JSON), optional invite_token für Gäste api/obs-poll.php (POST) action=vote // broadcaster_id, user_id, command (Option) – von OBS.php bei !poll <option> api/obs-poll.php (POST) action=end // Poll sofort beenden (Session oder invite_token)
Zufallsauswahl eines Follower/Viewers als „Gewinner“ für Raid- oder Giveaway-Overlays. Zeigt Profilbild und Namen mit Glow-Effekt. Optional nur Follower (all_followers-Parameter).
$implicit_user (oAuth2)wait steuert Verhalten und Buttons: wait nicht gesetzt → Buttons sichtbar, Start per Klick. wait=0 → keine Buttons, kein Auto-Spin (nur laden). wait=N (Sekunden) → keine Buttons, Auto-Spin nach N Sekunden. reset_label und start_label für Button-Beschriftung (wenn Buttons sichtbar).raid.php?broadcaster_id=...&all_followers // Ohne all_followers: nur Follower; mit: alle berücksichtigen raid.php?broadcaster_id=...&wait=5 // Keine Buttons, Rad startet nach 5 Sekunden raid.php?broadcaster_id=...&wait=0 // Keine Buttons, kein Auto-Spin (Start von außen z. B. erneut aufrufen mit wait=5) raid.php?broadcaster_id=...&reset_label=Neu&start_label=Drehen // Eigene Button-Beschriftungen (wenn ohne wait aufgerufen)
„Previously on …“-Overlay: Graustufen-Video/Inhalt mit 3D-Text-Intro („previously“). Wird per !previously im Chat in OBS.php geladen.
Seite für OBS: zeigt Infos zum aktuell gestreamten Spiel. Zwei Darstellungen: Fullscreen (zentriert, großes Cover, IGDB-Infos) und Bauchbinde (kompakte untere Leiste mit Cover + Spielname).
game-info.php // Darstellung: Fullscreen (Standard) game-info.php?view=bauchbinde // Darstellung: Bauchbinde (untere Leiste) game-info.php?broadcaster_id=… // anderer Kanal (mit Anmeldung) game-info.php?game_id=509658 // Test ohne Stream (Twitch-Game-ID, z. B. 509658 = Just Chatting)
Kollaboratives Zeichen-Overlay für den Stream. Streamer und eingeladene Gäste zeichnen gemeinsam auf einer Fläche; in OBS wird das Overlay transparent ohne Toolbar eingebunden und sekündlich aktualisiert.
?overlay=1): Für OBS als Browser-Quelle – keine Toolbar, transparenter Hintergrund, Strokes werden live synchronisiert.?invite=TOKEN): Gast zeichnet über Einladungslink direkt im Whiteboard des Broadcasters, ohne Twitch-Login.whiteboard.php?invite=TOKEN zum Mitzeichnen ohne Twitch-Login.whiteboard.php // Zeichenseite mit Toolbar (Broadcaster) whiteboard.php?overlay=1&broadcaster_id=… // OBS-Overlay ohne Toolbar whiteboard.php?invite=TOKEN // Gast-Modus via Einladungslink
api/whiteboard.php?broadcaster_id=… // GET: Strokes abrufen api/whiteboard.php?invite=TOKEN // GET: broadcaster_id + Strokes für Gäste api/whiteboard.php // POST: Stroke hinzufügen oder clear (Session oder invite=TOKEN) api/whiteboard-invite.php // create / list / revoke Einladungslinks
Synchronisierter Latenztest und Pre-Flight-Checkliste mit OBS-Anbindung.
Hauptseite für den Latenztest: Mikrofon-Beep in konfigurierbarem Intervall, synchrone Start/Stop-Steuerung über Session-Code, Pre-Flight-Checkliste (Twitch, OBS Audio Sources), OBS-Szenenbild im Hintergrund.
?session=CODEapi/latency-session.php)latency-test.php?session=ABC123
// Öffnet Seite und tritt Session ABC123 bei
JSON-API für synchrone Latenztest-Sessions. Sessions werden als JSON-Dateien in www/sessions/ gespeichert. Alte Sessions (>1 h) werden automatisch gelöscht.
GET api/latency-session.php?action=create // Response: {"success":true,"session_code":"A1B2C3","is_host":true} GET api/latency-session.php?action=sync&session_code=A1B2C3&client_id=... // Response: status, last_action, interval, clients_count, ...
OBS-WebSocket-Demo, JSON-Extraktion und JavaScript-Helfer.
Einfache Testseite: Verbindung zu OBS WebSocket (localhost:4455), Identify (op 1), GetInputList und für jede Audio-Input GetInputVolume. Zeigt Ergebnisse im Seiten-Output. Nutzt älteres Protokoll (op 6).
Lädt JSON von einer URL und extrahiert Werte über einen Pfad (Punkt-Notation). Optionaler Filter (key:value) schränkt gefundene Knoten ein.
url – URL der JSON-Ressourceextract – Pfad z. B. data.0.id (Komma als Dezimaltrenner wird zu Punkt)filter – optional, z. B. type:userjson2string.php?url=https://api.example.com/data.json&extract=data,0,name
// Gibt den Wert data[0].name aus (kommasepariert bei mehreren Treffern)
Gemeinsam genutzte Skripte.