Eigenes Overlay in 5 Schritten erstellen
- Overlay auswählen das du ändern möchtest.
- Laden Sie die Quell-ZIP-Datei herunter, entpacke es und kopiere die HTML-Datei des Overlays.
- Kopie bearbeiten selbst oder bitte ein KI-Werkzeug darum.
- Kopie in OBS öffnen mit deinen SSN-Sitzungseinstellungen in der Adresse.
- Ausprobieren mit dem echten Auslöser des Overlays.
Zu änderndes Overlay auswählen
Du kannst Farben, Schriften, Layout, Grafiken und Animationen eines Overlays ändern. Die HTML-Datei ist die Seite. Die OBS-URL verweist darauf und fügt deine Sitzungs- und Anzeigeeinstellungen hinzu.

Jeder Overlay-Typ reagiert auf andere Daten. Chatseite, hervorgehobene Nachricht und Umfrage verwenden unterschiedliche Eingaben. Öffne die Designanleitung für deinen Typ:
| Design-Leitfaden | Startdateien | Was es antreibt |
|---|---|---|
| Chatten und andocken | sampleoverlay.html, dock.html, themes/* | Jede erfasste Chat-Nachricht |
| Hervorgehobene Nachrichten | featured.html, samplefeatured.html, themes/featured-styles/* | Ausgewählte Nachrichten und Löschbefehle |
| Benachrichtigungen und Ereignis-Feeds | multi-alerts.html, events.html, themes/events/index.html | Matching-Events/bezahlte Chat-Zeilen |
| Grafische Umfragen | poll.html | Einstellungen für Abstimmungen und Host-Umfragen |
| Trinkgeldgläser und Ziele | tipjar.html | Konfigurierte Support-/Anzahl-/Hype-Metrik |
| Zähler und Ranglisten | hype.html, meta.html, leaderboard.html, scoreboard.html | Zählungen, Metadaten, Aktivitäten oder Punkt-Snapshots |
| Wartelisten und Warteschlangenauslosungen | waitlist.html | Host-Warteschlange und Gewinnerstatus |
| Giveaway-Displays | giveaway.html, giveaway-obs-entries.html | Verwalteter Giveaway-Status oder Legacy-Eintrags-Feed |
| Timer | timer.html | Timer-Status und Steuerungen |
| Ticker | ticker.html | Konfigurierter Tickerinhalt |
| Wortwolken und Karten | wordcloud.html, map.html | Passende Wörter oder Ortseinträge |
| Reaktionen und Medieneffekte | reactions.html, emotes.html, content.html, gif.html, confetti.html, stickers.html, actions.html | Der spezifische Medien-/Ereignis-/Aktionsauslöser der Seite |
| Abspann | credits.html | Gesammelte Teilnehmer und Credits-Kontrollen |
| Musik- und KI-Anzeigen | spotify-overlay.html, cohost-overlay.html, bot.html, chatbot.html | Aktuelle oder Bot-/Cohost-Updates |
| Produkte und Boards | monetization.html, commerce-board.html, shop_the_stream.html | Shared-Commerce-Status |
| Spiele und Belohnungen | games/*, games/templates/*, games.html, battle.html | Spielspezifischer Chat, Geschenke und Befehle |
| Generierte KI-Overlays | aioverlay.html, aievent-overlay.html | Gespeicherte Designs und ihre konfigurierte Ereignisroute |
Möchtest du etwas Fertiges? Probiere die Overlay-Galerie oder Vorlagengalerie. Du möchtest einen Chat-Skin von StreamElements oder Streamlabs nutzen? Folge der Importanleitung. Dieser Export hat eigene Einrichtungsschritte.
Laden Sie die Dateien herunter
- Beta-Quellcode als ZIP herunterladen. Oder öffne den Beta-Repository und wähle Code → ZIP herunterladen.
- Entpacke es in einen dauerhaften Ordner, zum Beispiel
C:\SSN\social_stream-beta\. Bearbeite nicht innerhalb der ZIP-Datei. SSN muss nicht neu installiert werden. - Finde die Overlay-Datei (siehe Tabelle oben). Erstelle daneben eine Kopie, zum Beispiel
poll.html→my-poll.html. Für ein Theme wiethemes/featured-styles/featured-modern.html, lege die Kopie im selben Ordner ab. - Öffne die Kopie in einem Text- oder Codeeditor. Speichere sie als
.html, nicht.html.txt.
Ordneraufbau und Funktionsweise der Pfade
social_stream-beta/
poll.html
my-poll.html
currency.js
js/
libs/
shared/
thirdparty/
media/
sources/images/
themes/
featured-styles/
featured-modern.html
my-featured.html
docs/
event-reference.html
Ein Pfad wie ../../shared/utils/chatHtml.js ist relativ zu der Seite, die ihn lädt. Verschiebst du die Seite ins Stammverzeichnis, funktioniert der Pfad nicht mehr. Kopiere auch deine Grafiken und Schriften in den Ordner und nutze relative Pfade. Deine bearbeitete Kopie erhält spätere SSN-Korrekturen nicht automatisch.
Sitzungslink beibehalten
Starte SSN, verbinde eine Quelle und prüfe, ob das ursprüngliche Overlay funktioniert. Kopiere dann den vollständiger Link aus dem SSN-Werkzeug für dieses Overlay.
https://socialstream.ninja/poll.html?session=YOUR_SESSION&password=YOUR_PASSWORD&server2
Der Wert nach session= ist deine SSN-Sitzung. Das ist nicht dein YouTube-Kanal, Twitch-Name, Dateiname oder Umfragetitel. SSN und deine Seite müssen dieselbe Sitzung und dasselbe Passwort verwenden. Lass SSN laufen: Overlays empfangen nur Daten. Sie erfassen selbst keinen Chat.
| Regel | Warum |
|---|---|
? beginnt die Einstellungen, & verbindet den Rest | Kopieren statt neu eingeben. Schreibe innerhalb eines HTML-Attributs &. Verwende im Browser oder OBS-URL-Feld ein einfaches &. |
| Servereinstellungen beibehalten | server, server2, server3, lokale Endpunkte, Bezeichnungen und Versionswerte unterscheiden sich je nach Seite. Füge keine Serveroption hinzu, nur weil ein anderes Overlay sie verwendet. |
Behalte alles nach # | Das kann wichtig sein. AI Event Overlay verwendet zum Beispiel einen privaten #aieventauth=... -Token. |
| Beim Teilen Platzhalter verwenden | Halte echte Sitzung, Passwort und private Tokens aus Screenshots, Repositorys und KI-Prompts heraus. |
Wenn deine Kopie leer bleibt, prüfe zuerst den Originallink. Manche Seiten fragen nach fehlenden Einstellungen, andere bleiben verborgen oder leiten weiter. Die richtige Sitzung im Link erspart das Raten.
Datei in OBS öffnen
Öffne die bearbeitete Datei direkt vom Computer. Kein Server nötig.
- Ziehe deine HTML-Kopie in Chrome oder Edge. Kopiere die Adresse. Sie beginnt mit
file:///. - Kopiere aus deinem funktionierenden SSN-Overlay-Link alles ab
?weiter. Füge es am Ende der Dateiadresse ein. Dadurch bleiben Sitzung, Passwort, Einstellungen und vorhandene#-Teil. - Öffne diese zusammengesetzte Adresse zum Testen im Browser.
- Erstelle in OBS eine Browserquelle. Lass Lokale Datei deaktiviert. Füge die vollständige Adresse ein in URL und stelle Breite und Höhe ein.
Beispiel: Dieser SSN-Link…
https://socialstream.ninja/poll.html?session=YOUR_SESSION&password=YOUR_PASSWORD&server2
…wird bei einer heruntergeladenen Umfragekopie unter Windows zu:
file:///C:/SSN/social_stream-beta/my-poll.html?session=YOUR_SESSION&password=YOUR_PASSWORD&server2
Unter macOS beginnt es mit file:///Users/..., unter Linux meist file:///home/.... Das Kopieren aus dem Browser behandelt Leerzeichen und Schrägstriche für dich.
| Gut zu wissen | Einzelheiten |
|---|---|
| Das richtest du nur einmal ein | OBS speichert die Adresse. Lass den Ordner an seinem Ort und halte SSN sowie deine Chatquelle geöffnet. |
| Änderung gespeichert? | Klicke auf Cache der aktuellen Seite aktualisieren in den Quelleigenschaften. |
| Warum sollte die Option „Lokale Datei“ deaktiviert bleiben? | Im URL-Feld kannst du hinzufügen ?session=.... Die Dateiauswahl über „Lokale Datei“ fügt diese Einstellungen nicht hinzu. |
Optional: Verwenden Sie das Kontrollkästchen „Lokale Datei“ mit einem Launcher
Die OBS-Dateiauswahl wählt eine Datei, kann aber deine Einstellungen nicht ergänzen. Eine kleine Startseite kann deine bearbeitete Seite mit angehängten Einstellungen öffnen:
- Speichere den folgenden Code als
launch-my-poll.htmlnebenmy-poll.html. - Ersetze den Platzhalterlink durch deinen vollständig kopierten SSN-Link. Ändere
./my-poll.htmlin deinen Dateinamen. Lass den Link in Anführungszeichen, mit einfachem&Zeichen enthält. - Teste die Startseite per Doppelklick. Aktiviere in OBS Lokale Datei und wähle die Launcher
Mit. Es leitet mit den Einstellungen und dem Token weiter an dein Overlay:
#-Teil.
<!DOCTYPE html>
<html lang="en">
<meta charset="utf-8">
<title>My local overlay launcher</title>
<p>Opening the local overlay...</p>
<script>
var copiedLink = new URL("https://socialstream.ninja/poll.html?session=YOUR_SESSION");
var localPage = new URL("./my-poll.html", window.location.href);
localPage.search = copiedLink.search;
localPage.hash = copiedLink.hash;
window.location.replace(localPage.href);
</script>
</html>
Lege bei einem Theme in einem Unterordner die Startseite neben die Theme-Kopie. Halte sie geheim, da sie deinen Verbindungslink enthält. Ein eigenständiger Export mit bereits enthaltenen Einstellungen hat stattdessen eigene Anweisungen.
OBS erklärt Datei-/URL-Modi, Größen, eigenes CSS und Aktualisierung in seiner Browser-Quellenreferenz.
Design ändern oder KI darum bitten
| Ich möchte … | So geht's |
|---|---|
| Nur CSS ändern | Behalte den gehosteten Link und verwende in OBS Eigenes CSS -Feld. Es betrifft nur diese OBS-Quelle, nicht einen normalen Browser. |
| Meine bearbeitete HTML-Kopie umgestalten | Füge deine Stile nach den vorhandenen hinzu oder verlinke danach eine lokale CSS-Datei. |
Verwende &css= oder &b64css= | Nur manche Seiten unterstützen das. poll.htmlliest zum Beispiel keines von beiden. Prüfe zuerst den Code der Seite. |
| HTML-Layout ändern | Behalte IDs und Klassen, die Skripte verwenden. Wenn ein Skript ein Element bei jeder Aktualisierung neu aufbaut, platziere dauerhafte Grafiken außerhalb davon oder füge sie dem Renderer hinzu. |
| Gemeinsame CSS- oder Skriptdatei bearbeiten | Kopiere sie und verweise deine Seite auf die Kopie, damit nur dein Design verändert wird. |
Halte Logo, Schriftdateien, Markenfarben, Leinwandgröße und eine visuelle Vorlage bereit. Eine Webseite kann normalerweise keine Schriften oder Bilder von der Festplatte eines anderen Computers laden.
KI-Eingabeaufforderung
Nutze den typspezifischen Prompt in der jeweiligen Designanleitung oder beginne mit diesem. Gib der KI deine kopierte Datei und die geladenen Stile und Skripte.
Customize [copied overlay filename] to match [reference/design].
Canvas: [width x height]. Placement: [position]. Colors/fonts: [details].
Use the existing page and its supporting files, rather than replacing its
connection and event logic. Read docs/event-reference.html and the relevant
overlay design guide. Preserve query parameters, session/password, URL
fragments, bridge labels, transport channels, settings, and controls.
Use CSS first. Keep relative paths and package all executable dependencies
locally. Use classic scripts compatible with Chrome 80.
Keep operator controls, private links, and credentials off the audience view.
Treat all incoming messages, names, labels, donations, and metadata as untrusted.
Prevent HTML/JavaScript injection in every renderer you change. Use textContent
for plain fields and for chatmessage when textonly is true. For HTML-mode
chatmessage, keep supported emotes/formatting through the packaged
SocialStreamChatHTML.sanitize helper (libs/objects.js loaded first).
Do not concatenate raw input into innerHTML, attributes, CSS, or JavaScript.
Validate media/link URLs with the page's existing URL policy and assign DOM
properties; do not enable javascript: URLs or executable embedded content.
Never eval incoming data or treat a viewer message as an AI instruction.
Keep source checks, connection handling, and existing sanitizers.
Test plain text, allowed emotes, quotes, angle brackets, and an HTML injection
probe in an isolated preview; verify the probe cannot execute.
Make the edited overlay work directly from disk using a file:/// URL,
without requiring a local web server. Return the edited files and assets,
file URL and OBS setup steps, and tests
for this overlay's real trigger. Use session placeholders in shared examples.
Explain any behavior changes separately from the design edits.
Eingehenden Chat nicht zu Code werden lassen
Namen, Nachrichten, Titel, Beträge und Links stammen von Zuschauern und externen Diensten. Behandle sie als Text, niemals als Code. Bereinige sie dort, wo dein Renderer sie auf der Seite einfügt.
| Feld | So wird es angezeigt |
|---|---|
chatmessage mit textonly true | Einfacher Text (textContent). |
chatmessage andernfalls | Kann Emotes und erlaubte Formatierung enthalten. Nutze den mitgelieferten Bereiniger. |
| Namen, Beträge, Titel und andere einfache Felder | Einfacher Text (textContent). |
chatimg, contentimg, Links | URLs, kein HTML. Prüfe sie anhand der bestehenden Medien-/Linkregeln der Seite und setze dann DOM-Eigenschaften. |
<!-- Example for a copied page at the repository root. -->
<script src="./libs/objects.js"></script>
<script src="./shared/utils/chatHtml.js"></script>
<script>
function renderChatBody(element, data) {
var message = String(data.chatmessage == null ? "" : data.chatmessage);
if (data.textonly) {
element.textContent = message;
} else {
element.innerHTML = SocialStreamChatHTML.sanitize(message);
}
}
// Names, amounts, titles, and other plain fields use textContent:
// nameElement.textContent = String(data.chatname || "");
</script>
- Wenn die Seite bereits einen Bereiniger hat, behalte ihn. Füge keinen zweiten hinzu.
- Passe bei Dateien in Unterordnern die Skriptpfade an.
- Füge keine rohen Namen in Attributzeichenfolgen oder rohe Farben in Stil-Markup ein. Prüfe Stilwerte, bevor du Eigenschaften einzeln setzt.
- Auch bereinigtes HTML darf nicht als JavaScript ausgeführt oder als KI-Anweisung verwendet werden.
Weitere Hintergründe: OWASP-Anleitung zu sicheren Ausgabepunkten und HTML-Bereinigung.
Renderer sicher testen
Führe diese Tests in einer privaten lokalen Vorschau aus, nicht im öffentlichen Chat.
- Verwende einen Namen wie
Guest <b>One</b>. Die Klammern sollten als Text erscheinen. - Senden
chatmessage: "<b>Hello</b>"mittextonly: true, dann false. Einmal sollten die Tags als Text erscheinen, einmal fetter Text. - Prüfe, ob ein unterstütztes Emote und eine reine Bildnachricht weiterhin funktionieren.
- Lass die KI einen harmlosen Test durchführen, zum Beispiel
<img src=x onerror="window.__ssnInjectionProbe=1">. Es darf nicht ausgeführt werden, den Marker setzen oder Ereignisattribute hinterlassen. Teste auch einen Link mit einem Skript-URL-Schema.
Ein erfolgreicher Test deckt nur die geprüften Pfade ab. Konzentriere dich auf die Renderer und Felder, die dein Design verändert hat.
Schrittweise testen
| Testen | So geht's |
|---|---|
| Layout | Nutze den Vorschau-/Demomodus der Seite, falls vorhanden, oder erfundene lokale Beispiele. Teste lange Namen und Nachrichten, fehlende Avatare, leere Daten und die erwartete Zeilenanzahl. |
| SSN-Übertragung | Lass SSN aktiv und nutze Testnachricht erstellen mit derselben Sitzung. Der übliche Erweiterungs-API-Modus benötigt Fernsteuerung der Erweiterung über API (remote API control of extension) aktiviert. Nutze eine Testumgebung: Testnachrichten können deine Automatisierungen auslösen. |
| Der echte Auslöser | Hebe eine Dock-Nachricht für eine hervorgehobene Karte hervor, stimme in einer Umfrage ab, ziehe einen Gewinnspielgewinner, ändere den Lauftext oder starte einen Timer. Normaler Chat testet nicht alles. |
| Echte Erfassung | Prüfe, ob eine echte Nachricht oder ein echtes Ereignis sowohl das Original als auch die Kopie erreicht. Ein künstliches Ereignis bestätigt nur die Anzeige. |
| OBS | Prüfe endgültige Größe, Transparenz, Animationen, Ton, Schriften und Ebenen. Teste Ein-/Ausblenden, Löschen/Zurücksetzen und Aktualisieren. OBS und dein Browser teilen weder Anmeldungen noch gespeicherte Daten. |
demo oder preview aus dem Link, bevor du Live-Daten erwartest.Dateien, die du deiner KI geben solltest
Gib der KI die eigene Overlay-Datei, die geladenen CSS-/JS-Dateien und diese Dateien. Die Ereignisreferenz allein erklärt weder die Umfragesteuerung noch den Layoutcode jedes Overlays.
| Datei | Wofür es gedacht ist |
|---|---|
docs/event-reference.html | Offizielle Felder, benannte Ereignisse, Metadaten, Medien und Spendenwerte. |
docs/customoverlays.md | Eigene Empfänger und Verbindungsbeispiele. |
| Kompatibilität von Ereignissen und Meldungen | Welche Ereignisse und Felder jede Quelle sendet. |
Anleitung für Testnachrichten und createtestmessage.html | Beispieldaten und Übertragungsmodi. |
libs/objects.js und shared/utils/chatHtml.js | Der mitgelieferte Bereiniger für die Anzeige. |
shared/utils/chatBadges.js und shared/utils/contentImage.js | Vorhandene Verarbeitung von Abzeichen und Bildern. |
js/transport-dedupe.js, js/local-server-url.js, shared/overlay-control-transport.js | Vorhandene Verbindungsunterstützung, sofern deine Seite diese Dateien lädt. |
currency.js | Lasse hasDonation für die Anzeige und nutze einen gültigen numerischen USD-Wert für donoValue, einschließlich Null. |
| Event Flow und Befehle und API | Verwende vorhandene Steuerelemente, wenn das Design einen Auslöser benötigt. |
Probleme beheben
| Problem | Versuche Folgendes |
|---|---|
| Datei nicht gefunden | Ziehe die HTML-Datei erneut in deinen Browser und kopiere die Adresse. Prüfe, ob der Name auf .html endet, nicht auf .html.txt. |
| Skript, Schriftart oder Bild fehlen | Lass den entpackten Ordner unverändert, mit deiner Kopie neben dem Original. Prüfe, ob hinzugefügte Grafiken und Schriften an den von der Seite erwarteten Stellen liegen. |
| Leere Anzeige oder „Warten“ | Prüfe Sitzung, Passwort, die vollständigen ? und # -Teile, ob SSN läuft, die Funktion aktiviert ist und die richtigen Eingaben ankommen. Vergleiche mit dem ursprünglichen SSN-Link. |
| Sieht in OBS anders aus als im Browser | Prüfe Breite/Höhe, altes eigenes CSS, Schriften, Cache und Browserspeicher. Nach dem Speichern aktualisieren. |
| Logo verschwindet bei Aktualisierung | Das Skript baut möglicherweise seinen Container neu auf. Platziere dauerhafte Dekoration außerhalb oder ändere die Darstellungsvorlage. |
| Daten werden zurückgesetzt oder Aktionen doppelt ausgeführt | Prüfe Einstellungen zum Aktualisieren und Entladen, doppelte Overlay- oder Steuerungskopien sowie die eigene Duplikat- und Zustandsverwaltung der Seite. |
Sonderfall: Seiten, die separate Datendateien lesen
Die Karte lädt lokale JSON-Dateien mit fetch(), was Browser beim Öffnen von der Festplatte blockieren können. Nutze für eine einfache Kartenumgestaltung den gehosteten Link mit eigenem CSS in OBS. Bitte bei einer bearbeiteten Kopie die KI, die Kartendaten in die Seite einzubetten, damit sie lokal geöffnet werden kann. Hosting ist eine fortgeschrittene Option für Seiten, die es wirklich benötigen, kein normaler Einrichtungsschritt.
Behebe zuerst das kleinste bestätigte Problem. Eine Umgestaltung sollte keine Änderungen an Erfassungsskripten oder neue Ereignisfelder benötigen. Wenn du einen öffentlichen Fork teilst, füge seine Assets hinzu und lasse private Startseiten weg.