Crea la tua sovrimpressione in 5 passaggi
- Scegli la sovrimpressione che vuoi modificare.
- Scarica lo ZIP sorgente, estrailo e copia il file HTML di quella sovrimpressione.
- Modifica la copia da solo oppure chiedilo a uno strumento IA.
- Apri la copia in OBS con le impostazioni della sessione SSN aggiunte all'indirizzo.
- Provalo con il trigger reale della sovrimpressione.
Scegli la sovrimpressione da modificare
Puoi cambiare colori, caratteri, layout, grafica e animazioni di una sovrimpressione. La File HTML è la pagina. Il URL OBS punta a essa e aggiunge sessione e impostazioni di visualizzazione.

Ogni tipo di sovrimpressione ascolta dati diversi. Una pagina chat, una di messaggi in evidenza e un sondaggio non usano gli stessi input. Apri la guida al design di quella che usi:
| Guida alla progettazione | Avvio dei file | Cosa lo spinge |
|---|---|---|
| Chatta e Dock | sampleoverlay.html, dock.html, themes/* | Ogni messaggio di chat catturato |
| Messaggi in primo piano | featured.html, samplefeatured.html, themes/featured-styles/* | Messaggi selezionati e comandi di cancellazione |
| Avvisi e feed di eventi | multi-alerts.html, events.html, themes/events/index.html | Eventi corrispondenti/righe di chat a pagamento |
| Sondaggi grafici | poll.html | Voti più impostazioni del sondaggio dell'ospite |
| Barattoli e obiettivi | tipjar.html | Metrica di supporto/conteggio/Hype configurata |
| Contatori e classifiche | hype.html, meta.html, leaderboard.html, scoreboard.html | Conteggi, metadati, attività o istantanee dei punti |
| Liste d'attesa e sorteggio delle code | waitlist.html | Coda dell'host e stato del vincitore |
| Display omaggio | giveaway.html, giveaway-obs-entries.html | Stato giveaway gestito o feed di voci legacy |
| Temporizzatori | timer.html | Stato e controlli del timer |
| Ticker | ticker.html | Contenuto del ticker configurato |
| Nuvole di parole e mappe | wordcloud.html, map.html | Parole o voci di posizione corrispondenti |
| Reazioni ed effetti mediatici | reactions.html, emotes.html, content.html, gif.html, confetti.html, stickers.html, actions.html | Il media/evento/attivatore specifico della pagina |
| Ringraziamenti | credits.html | Partecipanti raccolti e controlli dei crediti |
| Musica e display AI | spotify-overlay.html, cohost-overlay.html, bot.html, chatbot.html | Aggiornamenti in riproduzione o bot/cohost |
| Prodotti e tavole | monetization.html, commerce-board.html, shop_the_stream.html | Stato del commercio condiviso |
| Giochi e premi | games/*, games/templates/*, games.html, battle.html | Chat, regali e comandi specifici del gioco |
| Sovrapposizioni AI generate | aioverlay.html, aievent-overlay.html | Disegni salvati e relativo percorso di eventi configurato |
Vuoi qualcosa di pronto? Prova la Galleria degli overlay oppure Galleria dei template. Vuoi usare un tema chat di StreamElements o Streamlabs? Segui la guida all'importazione. Quell'esportazione include i propri passaggi di configurazione.
Scaricare i file
- Scarica il codice beta in ZIP. Oppure apri il archivio beta e scegli Codice → Scarica ZIP.
- Estrailo in una cartella che conserverai, come
C:\SSN\social_stream-beta\. Non modificare dentro lo ZIP. Non devi reinstallare SSN. - Trova il file della sovrimpressione (tabella sopra). Crea una copia accanto all'originale, come
poll.html→my-poll.html. Per un tema comethemes/featured-styles/featured-modern.html, mantieni la copia nella stessa cartella. - Apri la copia in un editor di testo o codice. Salvala come
.html, no.html.txt.
Struttura della cartella e funzionamento dei percorsi
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 percorso come ../../shared/utils/chatHtml.js è relativo alla pagina che lo carica. Spostare la pagina nella radice rompe il percorso. Copia anche grafica e caratteri nella cartella e usa percorsi relativi. La copia modificata non riceverà automaticamente le future correzioni SSN.
Mantieni il link della sessione
Avvia SSN, collega una sorgente e verifica che la sovrimpressione originale funzioni. Poi copia il link completo dallo strumento SSN di quella sovrimpressione.
https://socialstream.ninja/poll.html?session=YOUR_SESSION&password=YOUR_PASSWORD&server2
Il valore dopo session= è la sessione SSN. Non è il canale YouTube, il nome Twitch, il nome del file o il titolo del sondaggio. SSN e la pagina devono usare la stessa sessione e password. Mantieni SSN attivo: le sovrimpressioni ricevono solo dati, non catturano la chat.
| Regola | Perché |
|---|---|
? inizia le impostazioni, & unisce il resto | Copiali senza riscriverli. Dentro un attributo HTML scrivi &. Nel campo URL del browser o di OBS, usa un semplice &. |
| Mantieni le impostazioni del server | server, server2, server3, gli endpoint locali, le etichette e i valori di versione variano per pagina. Non aggiungere un'opzione server solo perché un'altra sovrimpressione la usa. |
Mantieni tutto dopo # | Può essere importante. AI Event Overlay, per esempio, usa un token privato #aieventauth=... . |
| Usa segnaposto quando condividi | Non includere sessione reale, password o token privati in schermate, repository o prompt IA. |
Se la copia resta vuota, controlla prima il link originale. Alcune pagine chiedono le impostazioni mancanti; altre restano nascoste o reindirizzano. Inserire la sessione corretta nel link evita tentativi alla cieca.
Apri il file in OBS
Apri il file modificato direttamente dal computer. Non serve un server.
- Trascina la copia HTML in Chrome o Edge. Copia l'indirizzo. Inizia con
file:///. - Dal link funzionante della sovrimpressione SSN, copia tutto da
?in poi. Incollalo alla fine dell'indirizzo del file. Così conservi sessione, password, impostazioni e ogni frammento#. - Apri l'indirizzo combinato nel browser per provarlo.
- In OBS, aggiungi una Sorgente browser. Lascia File locale deselezionato. Incolla l'indirizzo completo in URL e imposta larghezza e altezza.
Esempio: questo link SSN…
https://socialstream.ninja/poll.html?session=YOUR_SESSION&password=YOUR_PASSWORD&server2
…diventa questo per una copia di sondaggio scaricata su Windows:
file:///C:/SSN/social_stream-beta/my-poll.html?session=YOUR_SESSION&password=YOUR_PASSWORD&server2
Su macOS inizia con file:///Users/..., su Linux di solito file:///home/.... Copiare dal browser gestisce spazi e barre per te.
| Da sapere | Dettagli |
|---|---|
| Devi configurarlo solo una volta | OBS salva l'indirizzo. Non spostare la cartella e mantieni attivi SSN e la sorgente chat. |
| Hai salvato una modifica? | Fai clic su Aggiorna cache della pagina corrente nelle proprietà della fonte. |
| Perché lasciare il file locale deselezionato? | Il campo URL permette di aggiungere ?session=.... Scegliere il file con File locale non aggiunge queste impostazioni. |
Facoltativo: utilizzare la casella di controllo File locale con un launcher
Il selettore file di OBS sceglie il file ma non aggiunge le impostazioni. Una piccola pagina di avvio può aprire la pagina modificata con le impostazioni incluse:
- Salva il codice seguente come
launch-my-poll.htmlaccanto amy-poll.html. - Sostituisci il link segnaposto con il link SSN completo copiato. Cambia
./my-poll.htmlcon il nome del file. Mantieni il link tra virgolette, con semplici caratteri&. - Fai doppio clic sul launcher per provarlo. In OBS, seleziona File locale e scegli il lanciatore. Apre la sovrimpressione con le impostazioni e la parte
#.
<!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>
Per un tema in una sottocartella, metti il launcher accanto alla copia del tema. Mantienilo privato perché contiene il link di connessione. Un'esportazione autonoma che include già le impostazioni segue le proprie istruzioni.
OBS spiega modalità file/URL, dimensioni, CSS personalizzato e aggiornamento nel suo Riferimento alla sorgente del browser.
Cambia il design o chiedilo all'IA
| Voglio… | Fai così |
|---|---|
| Modificare solo CSS | Mantieni il link ospitato e usa il campo CSS personalizzato di OBS. Influisce solo su quella sorgente OBS, non su un browser normale. |
| Cambiare lo stile della mia copia HTML modificata | Aggiungi i tuoi stili dopo quelli esistenti oppure collega dopo un foglio di stile locale. |
Usa &css= oppure &b64css= | Solo alcune pagine lo supportano. poll.html, per esempio, non legge nessuno dei due. Controlla prima il codice della pagina. |
| Modificare il layout HTML | Mantieni ID e classi usati dagli script. Se uno script ricrea un elemento a ogni aggiornamento, metti la grafica permanente fuori da esso o aggiungila al renderer. |
| Modificare un foglio di stile o script condiviso | Copialo e fai puntare la pagina alla copia, così cambia solo il tuo design. |
Prepara logo, file dei caratteri, colori del marchio, dimensioni dell'area e un riferimento visivo. Una pagina web normalmente non può caricare caratteri o immagini dal disco di un altro computer.
Richiesta IA
Usa il prompt specifico di ogni guida al design o inizia con questo. Dai all'IA il file copiato e gli stili e script che carica.
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.
Evita che la chat in arrivo diventi codice
Nomi, messaggi, titoli, importi e link provengono da spettatori e servizi esterni. Trattali come testo, mai come codice. Ripuliscili dove il renderer li inserisce nella pagina.
| Campo | Come mostrarlo |
|---|---|
chatmessage con textonly true | Testo semplice (textContent). |
chatmessage altrimenti | Può contenere emote e formattazione consentita. Usa il sanitizzatore incluso. |
| Nomi, importi, titoli e altri campi semplici | Testo semplice (textContent). |
chatimg, contentimg, link | URL, non HTML. Validali con le regole media/link esistenti della pagina, poi imposta le proprietà 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>
- Se la pagina ha già un sanitizzatore, mantienilo. Non aggiungerne un secondo.
- Per i file nelle sottocartelle, correggi i percorsi degli script.
- Non incollare nomi grezzi nelle stringhe degli attributi né colori grezzi nel markup di stile. Valida i valori di stile prima di impostarli una proprietà alla volta.
- L'HTML ripulito non è comunque sicuro da eseguire come JavaScript o da usare come istruzione per l'IA.
Altre informazioni: Guida OWASP a destinazioni sicure e sanitizzazione HTML.
Come testare il renderer in sicurezza
Esegui queste prove in un'anteprima locale privata, non in una chat pubblica.
- Usa un nome come
Guest <b>One</b>. Le parentesi angolari devono apparire come testo. - Invia
chatmessage: "<b>Hello</b>"contextonly: true, poi false. Uno deve mostrare i tag come testo; l'altro deve mostrare testo in grassetto. - Verifica che un'emote supportata e un messaggio con sola immagine continuino a funzionare.
- Chiedi all'IA di provare una sonda innocua come
<img src=x onerror="window.__ssnInjectionProbe=1">. Non deve eseguire codice, impostare il marcatore né lasciare attributi di evento. Prova anche un link con schema script.
Una verifica riuscita copre solo i percorsi testati. Concentrati sui renderer e sui campi modificati dal design.
Provala una parte alla volta
| Prova | Come |
|---|---|
| Layout | Usa il modo anteprima o demo della pagina, se presente, o esempi locali fittizi. Prova nomi e messaggi lunghi, avatar mancanti, dati vuoti e il numero previsto di righe. |
| Consegna SSN | Mantieni SSN attivo e usa Crea messaggio di prova con la stessa sessione. La normale modalità API dell'estensione richiede controllo API remoto dell'estensione attivo. Usa una configurazione di prova: i messaggi di test possono attivare le automazioni. |
| Il trigger reale | Metti in evidenza un messaggio del Dock, vota in un sondaggio, scegli un vincitore, cambia il testo del ticker o avvia un timer. La chat normale non testa tutto. |
| Cattura reale | Verifica che un messaggio o evento reale raggiunga sia l'originale sia la copia. Un evento simulato dimostra solo che la visualizzazione funziona. |
| OBS | Controlla dimensioni finali, trasparenza, animazioni, audio, caratteri e livelli. Prova mostra/nascondi, cancella/reimposta e aggiorna. OBS e il browser non condividono accessi né dati salvati. |
demo oppure preview dal link prima di attendere dati dal vivo.File da dare all'IA
Dai all'IA il file della sovrimpressione e i CSS/JS che carica, oltre a questi. Il riferimento eventi da solo non spiega i controlli di un sondaggio né il codice di layout di ogni sovrimpressione.
| Fascicolo | A cosa serve |
|---|---|
docs/event-reference.html | Campi ufficiali, eventi con nome, metadati, media e valori delle donazioni. |
docs/customoverlays.md | Ricevitori personalizzati ed esempi di connessione. |
| Compatibilità di eventi e avvisi | Quali eventi e campi invia ogni sorgente. |
Guida al messaggio di prova e createtestmessage.html | Dati di esempio e modalità di consegna. |
libs/objects.js e shared/utils/chatHtml.js | Il sanitizzatore di visualizzazione incluso. |
shared/utils/chatBadges.js e shared/utils/contentImage.js | Gestione esistente di badge e immagini. |
js/transport-dedupe.js, js/local-server-url.js, shared/overlay-control-transport.js | Supporto di connessione esistente quando la pagina li carica. |
currency.js | Mantieni hasDonation per la visualizzazione e usa un valore numerico valido in USD per donoValue, compreso zero. |
| Event Flow e Comandi e API | Riutilizza i controlli esistenti quando il design richiede un trigger. |
Risolvere i problemi
| Problema | Prova così |
|---|---|
| File non trovato | Trascina di nuovo l'HTML nel browser e copia l'indirizzo. Verifica che il nome finisca in .html, non .html.txt. |
| Scrittura, carattere o immagine mancanti | Mantieni la cartella estratta com'è, con la copia accanto all'originale. Verifica che grafica e caratteri aggiunti siano dove la pagina li cerca. |
| Visualizzazione vuota o “in attesa” | Controlla la sessione, la password e le parti complete ? e # , che SSN sia attivo, la funzione abilitata e arrivi l'input corretto. Confronta con il link SSN originale. |
| L'aspetto è diverso in OBS e nel browser | Controlla larghezza, altezza, vecchio CSS personalizzato, caratteri, cache e memoria del browser. Aggiorna dopo aver salvato. |
| Il logo scompare all'aggiornamento | Lo script potrebbe ricreare il contenitore. Metti la decorazione permanente fuori da esso o aggiorna il modello di rendering. |
| I dati si azzerano o le azioni avvengono due volte | Controlla le impostazioni di aggiornamento e scaricamento, le copie duplicate della sovrimpressione o dei controlli e la gestione di duplicati e stato della pagina. |
Caso speciale: pagine che leggono file di dati separati
La mappa carica file JSON locali con fetch(), che i browser possono bloccare aprendo dal disco. Per un semplice cambio di stile della mappa, usa il link ospitato con CSS personalizzato di OBS. Per una copia modificata, chiedi all'IA di inserire i dati della mappa nella pagina per aprirla dal disco. L'hosting è un'opzione avanzata per pagine che ne hanno davvero bisogno, non un passaggio normale.
Correggi prima il più piccolo problema confermato. Un cambio di stile non dovrebbe richiedere modifiche agli script di cattura né nuovi campi evento. Se condividi un fork pubblico, includi le risorse ed escludi i launcher privati.