Concevez vos propres superpositions de flux social

Téléchargez, personnalisez, connectez et testez les conceptions de superposition locales dans OBS, avec des guides pour chaque famille de superpositions.

Créer votre superposition en 5 étapes

Téléchargez les fichiersChanger le designOuvrir dans OBS
  1. Choisir la superposition que vous souhaitez modifier.
  2. Téléchargez le ZIP source, décompressez-le et copiez le fichier HTML de cette superposition.
  3. Modifier la copie vous-même, ou demandez-le à un outil d'IA.
  4. Ouvrir votre copie dans OBS avec les réglages de votre session SSN ajoutés à son adresse.
  5. Tester avec le vrai déclencheur de la superposition.
Vous voulez seulement changer les couleurs ou polices ? Inutile de télécharger. Gardez le lien hébergé habituel et collez le CSS dans le champ CSS personnalisé de la source navigateur OBS.

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.

Choisissez une superposition de travail avant de modifier son apparence.
Partez d'une superposition qui fonctionne déjà.

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 conceptionDémarrage des fichiersCe qui le motive
Chat et Docksampleoverlay.html, dock.html, themes/*Chaque message de discussion capturé
Messages mis en avantfeatured.html, samplefeatured.html, themes/featured-styles/*Messages sélectionnés et commandes claires
Alertes et flux d'événementsmulti-alerts.html, events.html, themes/events/index.htmlÉvénements correspondants/lignes de chat payantes
Sondages graphiquespoll.htmlVotes et paramètres de sondage de l'hôte
Pots de pourboires et objectifstipjar.htmlMétrique support/compte/Hype configurée
Compteurs et classementshype.html, meta.html, leaderboard.html, scoreboard.htmlDécomptes, métadonnées, activités ou instantanés ponctuels
Listes d'attente et tirages au sortwaitlist.htmlFile d'attente des hôtes et état du gagnant
Présentoirs cadeauxgiveaway.html, giveaway-obs-entries.htmlÉtat du cadeau géré ou flux d'entrée hérité
Minuteriestimer.htmlÉtat et commandes de la minuterie
Tickersticker.htmlContenu du ticker configuré
Nuages de mots et carteswordcloud.html, map.htmlMots correspondants ou entrées de lieu
Réactions et effets médiatiquesreactions.html, emotes.html, content.html, gif.html, confetti.html, stickers.html, actions.htmlLe déclencheur média/événement/action spécifique à la page
Génériquecredits.htmlParticipants collectés et contrôles des crédits
Écrans de musique et d'IAspotify-overlay.html, cohost-overlay.html, bot.html, chatbot.htmlMises à jour en cours de lecture ou de bot/cohost
Produits et planchesmonetization.html, commerce-board.html, shop_the_stream.htmlÉtat du commerce partagé
Jeux et récompensesgames/*, games/templates/*, games.html, battle.htmlChat, cadeaux et commandes spécifiques au jeu
Superpositions d'IA généréesaioverlay.html, aievent-overlay.htmlConceptions 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

  1. 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.
  2. 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.
  3. 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 comme themes/featured-styles/featured-modern.html, gardez la copie dans le même dossier.
  4. Ouvrez la copie dans un éditeur de texte ou de code. Enregistrez-la en .html, non .html.txt.
Gardez tout le dossier décompressé. Un fichier HTML peut charger scripts, styles, polices, images, audio ou données de dossiers voisins. Déplacer la page casse ces liens. La vue GitHub ou « Enregistrer la page » du navigateur ne récupère pas tout.
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èglePourquoi
? commence les réglages, & relie le resteCopiez-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 serveurserver, 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 partageN'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.

  1. Glissez votre copie HTML dans Chrome ou Edge. Copiez son adresse. Elle commence par file:///.
  2. 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 # .
  3. Ouvrez cette adresse combinée dans votre navigateur pour la tester.
  4. 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 à savoirDétails
Une seule configuration nécessaireOBS 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 :

  1. Enregistrez le code ci-dessous sous launch-my-poll.html à côté de my-poll.html.
  2. Remplacez le lien d'exemple par votre lien SSN complet copié. Remplacez ./my-poll.html par votre nom de fichier. Gardez le lien entre guillemets, avec de simples caractères & .
  3. 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 CSSGardez 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éeAjoutez 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 HTMLGardez 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.
N'acceptez pas une simple maquette. Un design qui fonctionne uniquement avec des messages d'exemple codés en dur n'est pas terminé. Gardez l'original et comparez les deux avec les mêmes entrées de test.

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.

ChampComment l'afficher
chatmessage avec textonly trueTexte brut (textContent).
chatmessage sinonPeut contenir des émoticônes et du formatage autorisé. Utilisez l'assainisseur fourni.
Noms, montants, titres et autres champs simplesTexte brut (textContent).
chatimg, contentimg, liensDes 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>" avec textonly: 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

TestComment
DispositionUtilisez 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 SSNGardez 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éclencheurMettez 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éelleVérifiez qu'un vrai message ou événement atteint l'original et la copie. Un événement fictif prouve seulement que l'affichage fonctionne.
OBSVé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.
L'actualisation peut perdre des données. Certaines pages conservent les données en mémoire. Consultez le guide du type avant d'activer l'actualisation automatique ou l'arrêt quand la source est masquée. Retirez 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.htmlChamps officiels, événements nommés, métadonnées, médias et valeurs de don.
docs/customoverlays.mdRécepteurs personnalisés et exemples de connexion.
Compatibilité des événements et alertesQuels événements et champs chaque source envoie.
Guide des messages de test et createtestmessage.htmlDonnées d'exemple et modes de transmission.
libs/objects.js et shared/utils/chatHtml.jsL'assainisseur d'affichage fourni.
shared/utils/chatBadges.js et shared/utils/contentImage.jsGestion existante des badges et images.
js/transport-dedupe.js, js/local-server-url.js, shared/overlay-control-transport.jsPrise en charge des connexions existantes lorsque votre page les charge.
currency.jsGardez hasDonation pour l'affichage et utilisez une valeur numérique valide en USD pour donoValue, dont zéro.
Event Flow et Commandes et APIRéutilisez les commandes existantes quand le design nécessite un déclencheur.

Résoudre les problèmes

ProblèmeÀ essayer
Fichier introuvableGlissez à 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 manquantGardez 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 navigateurVérifiez largeur, hauteur, ancien CSS personnalisé, polices, cache et stockage du navigateur. Actualisez après l'enregistrement.
Le logo disparaît à la mise à jourLe 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 foisVé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.