Créer votre superposition en 5 étapes
- Choisir la superposition que vous souhaitez modifier.
- Téléchargez le ZIP source, décompressez-le et copiez le fichier HTML de cette superposition.
- Modifier la copie vous-même, ou demandez-le à un outil d'IA.
- Ouvrir votre copie dans OBS avec les réglages de votre session SSN ajoutés à son adresse.
- Tester avec le vrai déclencheur de la superposition.
Choisir la superposition à modifier
Vous pouvez modifier les couleurs, polices, disposition, images et animations d'une superposition. La Fichier HTML est la page. Le URL OBS pointe vers elle et ajoute votre session et les réglages d'affichage.

Chaque type de superposition écoute des données différentes. Une page de chat, une page de messages en avant et un sondage n'utilisent pas les mêmes entrées. Ouvrez le guide du type utilisé :
| Guide de conception | Démarrage des fichiers | Ce qui le motive |
|---|---|---|
| Chat et Dock | sampleoverlay.html, dock.html, themes/* | Chaque message de discussion capturé |
| Messages mis en avant | featured.html, samplefeatured.html, themes/featured-styles/* | Messages sélectionnés et commandes claires |
| Alertes et flux d'événements | multi-alerts.html, events.html, themes/events/index.html | Événements correspondants/lignes de chat payantes |
| Sondages graphiques | poll.html | Votes et paramètres de sondage de l'hôte |
| Pots de pourboires et objectifs | tipjar.html | Métrique support/compte/Hype configurée |
| Compteurs et classements | hype.html, meta.html, leaderboard.html, scoreboard.html | Décomptes, métadonnées, activités ou instantanés ponctuels |
| Listes d'attente et tirages au sort | waitlist.html | File d'attente des hôtes et état du gagnant |
| Présentoirs cadeaux | giveaway.html, giveaway-obs-entries.html | État du cadeau géré ou flux d'entrée hérité |
| Minuteries | timer.html | État et commandes de la minuterie |
| Tickers | ticker.html | Contenu du ticker configuré |
| Nuages de mots et cartes | wordcloud.html, map.html | Mots correspondants ou entrées de lieu |
| Réactions et effets médiatiques | reactions.html, emotes.html, content.html, gif.html, confetti.html, stickers.html, actions.html | Le déclencheur média/événement/action spécifique à la page |
| Générique | credits.html | Participants collectés et contrôles des crédits |
| Écrans de musique et d'IA | spotify-overlay.html, cohost-overlay.html, bot.html, chatbot.html | Mises à jour en cours de lecture ou de bot/cohost |
| Produits et planches | monetization.html, commerce-board.html, shop_the_stream.html | État du commerce partagé |
| Jeux et récompenses | games/*, games/templates/*, games.html, battle.html | Chat, cadeaux et commandes spécifiques au jeu |
| Superpositions d'IA générées | aioverlay.html, aievent-overlay.html | Conceptions enregistrées et leur itinéraire d'événements configuré |
Vous voulez quelque chose de prêt ? Essayez la Galerie d’incrustations ou Galerie de modèles. Vous importez un habillage de chat StreamElements ou Streamlabs ? Suivez le guide d'importation. Cette exportation possède ses propres étapes de configuration.
Téléchargez les fichiers
- Télécharger le ZIP du code bêta. Ou ouvrez le dépôt bêta et choisissez Code → Télécharger le code postal.
- Décompressez-le dans un dossier que vous conserverez, comme
C:\SSN\social_stream-beta\. Ne modifiez pas dans le ZIP. Il n'est pas nécessaire de réinstaller SSN. - Trouvez le fichier de votre superposition (tableau ci-dessus). Faites une copie à côté de l'original, comme
poll.html→my-poll.html. Pour un thème commethemes/featured-styles/featured-modern.html, gardez la copie dans le même dossier. - Ouvrez la copie dans un éditeur de texte ou de code. Enregistrez-la en
.html, non.html.txt.
Structure du dossier et fonctionnement des chemins
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
Un chemin comme ../../shared/utils/chatHtml.js est relatif à la page qui le charge. Déplacer cette page à la racine casse le chemin. Copiez aussi vos images et polices dans le dossier et utilisez des chemins relatifs. Votre copie modifiée ne recevra pas automatiquement les futures corrections SSN.
Garder votre lien de session
Lancez SSN, connectez une source et vérifiez la superposition originale. Copiez ensuite le lien complet depuis l'outil SSN de cette superposition.
https://socialstream.ninja/poll.html?session=YOUR_SESSION&password=YOUR_PASSWORD&server2
La valeur après session= est votre session SSN. Ce n'est pas votre chaîne YouTube, nom Twitch, nom de fichier ou titre de sondage. SSN et la page doivent utiliser la même session et le même mot de passe. Gardez SSN actif : les superpositions reçoivent seulement les données, elles ne capturent pas le chat.
| Règle | Pourquoi |
|---|---|
? commence les réglages, & relie le reste | Copiez-les sans les retaper. Dans un attribut HTML, écrivez &. Dans le champ URL du navigateur ou d'OBS, utilisez un simple &. |
| Garder les réglages du serveur | server, server2, server3, les adresses locales, les étiquettes et les versions varient selon la page. N'ajoutez pas une option de serveur simplement parce qu'une autre superposition l'utilise. |
Gardez tout après # | Cela peut compter. AI Event Overlay, par exemple, utilise un jeton privé #aieventauth=... . |
| Utiliser des valeurs fictives lors du partage | N'incluez pas votre vraie session, mot de passe ou jetons privés dans les captures, dépôts ou prompts d'IA. |
Si votre copie reste vide, vérifiez d'abord le lien original. Certaines pages demandent les réglages manquants ; d'autres restent masquées ou redirigent. Mettre la bonne session dans le lien évite les suppositions.
Ouvrir votre fichier dans OBS
Ouvrez le fichier modifié directement depuis votre ordinateur. Aucun serveur nécessaire.
- Glissez votre copie HTML dans Chrome ou Edge. Copiez son adresse. Elle commence par
file:///. - Depuis votre lien de superposition SSN fonctionnel, copiez tout à partir de
?et tout ce qui suit. Collez-le à la fin de l'adresse du fichier. Cela conserve session, mot de passe, réglages et tout fragment#. - Ouvrez cette adresse combinée dans votre navigateur pour la tester.
- Dans OBS, ajoutez une Source navigateur. Laissez Fichier local décoché. Collez l'adresse complète dans URL et définissez la largeur et la hauteur.
Exemple : ce lien SSN…
https://socialstream.ninja/poll.html?session=YOUR_SESSION&password=YOUR_PASSWORD&server2
…devient ceci pour une copie de sondage téléchargée sous Windows :
file:///C:/SSN/social_stream-beta/my-poll.html?session=YOUR_SESSION&password=YOUR_PASSWORD&server2
Sous macOS, elle commence par file:///Users/..., sous Linux généralement file:///home/.... Copier depuis le navigateur gère les espaces et les barres obliques pour vous.
| Bon à savoir | Détails |
|---|---|
| Une seule configuration nécessaire | OBS enregistre l'adresse. Gardez le dossier à sa place et laissez SSN et votre source de chat actifs. |
| Une modification enregistrée ? | Cliquez sur Actualiser le cache de la page actuelle dans les propriétés source. |
| Pourquoi laisser la case Fichier local décochée ? | Le champ URL permet d'ajouter ?session=.... Choisir le fichier avec Fichier local n'ajoute pas ces réglages. |
Facultatif : cochez la case Fichier local avec un lanceur
Le sélecteur de fichiers OBS choisit un fichier, mais ne peut pas ajouter vos réglages. Une petite page de lancement peut ouvrir votre page modifiée avec ces réglages :
- Enregistrez le code ci-dessous sous
launch-my-poll.htmlà côté demy-poll.html. - Remplacez le lien d'exemple par votre lien SSN complet copié. Remplacez
./my-poll.htmlpar votre nom de fichier. Gardez le lien entre guillemets, avec de simples caractères&. - Double-cliquez sur le lanceur pour le tester. Dans OBS, cochez Fichier local et choisissez le lanceur. Il ouvre votre superposition avec les réglages et la partie
#.
<!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>
Pour un thème dans un sous-dossier, placez le lanceur à côté de la copie du thème. Gardez-le privé, car il contient votre lien de connexion. Une exportation autonome incluant déjà ses réglages suit ses propres instructions.
OBS explique les modes fichier/URL, les dimensions, le CSS personnalisé et l'actualisation dans sa Référence de la source du navigateur.
Modifier le design ou le demander à l'IA
| Je souhaite… | Procédez ainsi |
|---|---|
| Modifier uniquement le CSS | Gardez le lien hébergé et utilisez le champ CSS personnalisé d'OBS. Il n'affecte que cette source OBS, pas un navigateur classique. |
| Changer le style de ma copie HTML modifiée | Ajoutez vos styles après ceux existants ou liez une feuille de style locale après eux. |
Utilisez &css= ou &b64css= | Seules certaines pages le prennent en charge. poll.html, par exemple, ne lit aucun des deux. Vérifiez d'abord le code de la page. |
| Modifier la disposition HTML | Gardez les identifiants et classes utilisés par les scripts. Si un script reconstruit un élément à chaque mise à jour, placez le décor permanent à l'extérieur ou ajoutez-le au moteur de rendu. |
| Modifier une feuille de style ou un script partagé | Copiez-le et faites pointer votre page vers la copie pour ne modifier que votre design. |
Préparez votre logo, fichiers de police, couleurs, dimensions du canevas et une référence visuelle. Une page web ne peut généralement pas charger des polices ou images depuis le disque d'un autre ordinateur.
Invite IA
Utilisez le prompt propre à chaque guide de design ou commencez avec celui-ci. Donnez à l'IA le fichier copié et les styles et scripts chargés.
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.
Empêcher le chat entrant de devenir du code
Noms, messages, titres, montants et liens viennent de spectateurs et de services externes. Traitez-les comme du texte, jamais comme du code. Nettoyez-les là où le moteur de rendu les place sur la page.
| Champ | Comment l'afficher |
|---|---|
chatmessage avec textonly true | Texte brut (textContent). |
chatmessage sinon | Peut contenir des émoticônes et du formatage autorisé. Utilisez l'assainisseur fourni. |
| Noms, montants, titres et autres champs simples | Texte brut (textContent). |
chatimg, contentimg, liens | Des URL, pas du HTML. Vérifiez-les selon les règles médias/liens existantes de la page, puis définissez les propriétés DOM. |
<!-- 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>
- Si la page possède déjà un assainisseur, gardez-le. N'en ajoutez pas un second.
- Pour les fichiers dans des sous-dossiers, corrigez les chemins des scripts.
- N'insérez pas de noms bruts dans des chaînes d'attributs ni de couleurs brutes dans le balisage de style. Validez les valeurs de style avant de les affecter propriété par propriété.
- Le HTML nettoyé ne peut toujours pas être exécuté comme JavaScript ou utilisé comme instruction pour l'IA en toute sécurité.
Pour en savoir plus : Guide OWASP des points d'insertion sûrs et de l'assainissement HTML.
Tester le moteur de rendu en sécurité
Exécutez ces tests dans un aperçu local privé, pas dans un chat public.
- Utilisez un nom comme
Guest <b>One</b>. Les chevrons doivent apparaître comme du texte. - Envoyer
chatmessage: "<b>Hello</b>"avectextonly: true, puis false. L'un doit afficher les balises comme du texte ; l'autre doit afficher du texte en gras. - Vérifiez qu'une émoticône prise en charge et un message contenant seulement une image fonctionnent toujours.
- Demandez à l'IA de tester une sonde inoffensive comme
<img src=x onerror="window.__ssnInjectionProbe=1">. La sonde ne doit pas s'exécuter, définir le marqueur ni laisser d'attributs d'événement. Testez aussi un lien utilisant un schéma de script.
Une sonde réussie ne couvre que les chemins testés. Concentrez-vous sur les moteurs de rendu et champs modifiés par votre design.
Tester une partie à la fois
| Test | Comment |
|---|---|
| Disposition | Utilisez le mode aperçu ou démo de la page s'il existe, ou des exemples locaux fictifs. Testez les noms et messages longs, les avatars manquants, les données vides et le nombre prévu de lignes. |
| Transmission SSN | Gardez SSN actif et utilisez Créer un message de test (Create Test Message) avec la même session. Le mode habituel API d'extension nécessite contrôle distant de l’extension par API (remote API control of extension) activé. Utilisez une configuration de test : les messages de test peuvent déclencher vos automatisations. |
| Le vrai déclencheur | Mettez un message du Dock en avant, votez à un sondage, tirez un gagnant, changez le texte du bandeau ou démarrez un minuteur. Le chat ordinaire ne teste pas tout. |
| Capture réelle | Vérifiez qu'un vrai message ou événement atteint l'original et la copie. Un événement fictif prouve seulement que l'affichage fonctionne. |
| OBS | Vérifiez taille finale, transparence, animations, audio, polices et calques. Essayez afficher/masquer, effacer/réinitialiser et actualiser. OBS et votre navigateur ne partagent ni connexions ni données stockées. |
demo ou preview du lien avant d'attendre des données en direct.Fichiers à fournir à votre IA
Fournissez à l'IA le fichier de la superposition et les CSS/JS chargés, ainsi que ceux-ci. La référence des événements seule n'explique pas les commandes d'un sondage ni le code de disposition de chaque superposition.
| Fichier | À quoi cela sert |
|---|---|
docs/event-reference.html | Champs officiels, événements nommés, métadonnées, médias et valeurs de don. |
docs/customoverlays.md | Récepteurs personnalisés et exemples de connexion. |
| Compatibilité des événements et alertes | Quels événements et champs chaque source envoie. |
Guide des messages de test et createtestmessage.html | Données d'exemple et modes de transmission. |
libs/objects.js et shared/utils/chatHtml.js | L'assainisseur d'affichage fourni. |
shared/utils/chatBadges.js et shared/utils/contentImage.js | Gestion existante des badges et images. |
js/transport-dedupe.js, js/local-server-url.js, shared/overlay-control-transport.js | Prise en charge des connexions existantes lorsque votre page les charge. |
currency.js | Gardez hasDonation pour l'affichage et utilisez une valeur numérique valide en USD pour donoValue, dont zéro. |
| Event Flow et Commandes et API | Réutilisez les commandes existantes quand le design nécessite un déclencheur. |
Résoudre les problèmes
| Problème | À essayer |
|---|---|
| Fichier introuvable | Glissez à nouveau le HTML dans le navigateur et copiez son adresse. Vérifiez que le nom finit par .html et non .html.txt. |
| Script, police ou image manquant | Gardez le dossier décompressé tel quel, avec la copie à côté de l'original. Vérifiez que les images et polices ajoutées se trouvent aux emplacements attendus. |
| Affichage vide ou « en attente » | Vérifiez la session, le mot de passe et les parties complètes ? et # , que SSN fonctionne, que la fonction est activée et que la bonne entrée arrive. Comparez avec le lien SSN original. |
| Le rendu diffère entre OBS et le navigateur | Vérifiez largeur, hauteur, ancien CSS personnalisé, polices, cache et stockage du navigateur. Actualisez après l'enregistrement. |
| Le logo disparaît à la mise à jour | Le script reconstruit peut-être son conteneur. Placez le décor permanent à l'extérieur ou modifiez le modèle de rendu. |
| Les données se réinitialisent ou les actions se produisent deux fois | Vérifiez les réglages d'actualisation et de déchargement, les copies en double de la superposition ou des commandes, et la gestion des doublons et de l'état par la page. |
Cas particulier : pages lisant des fichiers de données séparés
La carte charge les fichiers JSON locaux avec fetch(), que les navigateurs peuvent bloquer lors d'une ouverture depuis le disque. Pour changer simplement le style de la carte, utilisez son lien hébergé avec le CSS personnalisé d'OBS. Pour une copie modifiée, demandez à l'IA d'intégrer les données de carte à la page pour l'ouvrir depuis le disque. L'hébergement est une option avancée réservée aux pages qui en ont besoin, pas une étape habituelle.
Corrigez d'abord le plus petit problème confirmé. Un changement de style ne devrait pas nécessiter de modifier les scripts de capture ou d'ajouter des champs d'événement. Si vous partagez un fork public, incluez ses ressources et excluez les lanceurs privés.