Crie sua própria sobreposição em 5 etapas
- Escolha a sobreposição que você quer alterar.
- Baixe o ZIP de origem, descompacte e copie o arquivo HTML dessa sobreposição.
- Edite a cópia você mesmo ou peça a uma ferramenta de IA.
- Abra sua cópia no OBS com as configurações da sua sessão SSN adicionadas ao endereço.
- Teste com o gatilho real da sobreposição.
Escolha a sobreposição a alterar
Você pode mudar cores, fontes, layout, arte e movimento de uma sobreposição. A Arquivo HTML é a página. O URL OBS aponta para ela e adiciona a sessão e as configurações de exibição.

Cada tipo de sobreposição escuta coisas diferentes. Uma página de chat, uma de mensagens destacadas e uma enquete não usam a mesma entrada. Abra o guia de design da que você usa:
| Guia de design | Iniciando arquivos | O que o move |
|---|---|---|
| Bate-papo e Dock | sampleoverlay.html, dock.html, themes/* | Cada mensagem de bate-papo capturada |
| Mensagens em destaque | featured.html, samplefeatured.html, themes/featured-styles/* | Mensagens selecionadas e comandos de limpeza |
| Alertas e feeds de eventos | multi-alerts.html, events.html, themes/events/index.html | Eventos correspondentes / linhas de bate-papo pago |
| Enquetes gráficas | poll.html | Votos mais configurações de enquete do anfitrião |
| Frascos de gorjetas e metas | tipjar.html | Métrica de suporte/contagem/Hype configurada |
| Contadores e classificações | hype.html, meta.html, leaderboard.html, scoreboard.html | Contagens, metadados, atividades ou instantâneos de pontos |
| Listas de espera e sorteios de filas | waitlist.html | Fila do host e estado do vencedor |
| Expositores de brindes | giveaway.html, giveaway-obs-entries.html | Estado do sorteio gerenciado ou feed de entrada herdado |
| Temporizadores | timer.html | Estado e controles do temporizador |
| Relógios | ticker.html | Conteúdo do ticker configurado |
| Nuvens de palavras e mapas | wordcloud.html, map.html | Palavras correspondentes ou entradas de localização |
| Reações e efeitos da mídia | reactions.html, emotes.html, content.html, gif.html, confetti.html, stickers.html, actions.html | O gatilho de mídia/evento/ação específico da página |
| Créditos | credits.html | Participantes coletados e controles de créditos |
| Exibições de música e IA | spotify-overlay.html, cohost-overlay.html, bot.html, chatbot.html | Atualizações em execução ou de bot/cohost |
| Produtos e placas | monetization.html, commerce-board.html, shop_the_stream.html | Estado de comércio compartilhado |
| Jogos e recompensas | games/*, games/templates/*, games.html, battle.html | Bate-papo, presentes e comandos específicos do jogo |
| Sobreposições de IA geradas | aioverlay.html, aievent-overlay.html | Projetos salvos e sua rota de evento configurada |
Quer algo pronto? Experimente a Galeria de overlays ou Galeria de modelos. Vai usar um visual de chat do StreamElements ou Streamlabs? Siga o guia de importação. Essa exportação tem suas próprias etapas de configuração.
Baixe os arquivos
- Baixe o ZIP do código beta. Ou abra o repositório beta e escolha Código → Baixar ZIP.
- Descompacte em uma pasta que você manterá, como
C:\SSN\social_stream-beta\. Não edite dentro do ZIP. Não é preciso reinstalar o SSN. - Encontre o arquivo da sobreposição (tabela acima). Faça uma cópia ao lado do original, como
poll.html→my-poll.html. Para um tema comothemes/featured-styles/featured-modern.html, mantenha a cópia na mesma pasta. - Abra a cópia em um editor de texto ou código. Salve como
.html, não.html.txt.
Como é a pasta e como funcionam os caminhos
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
Um caminho como ../../shared/utils/chatHtml.js é relativo à página que o carrega. Mover essa página para a raiz quebra o caminho. Copie também sua arte e fontes para a pasta e use caminhos relativos. A cópia editada não receberá futuras correções do SSN automaticamente.
Mantenha seu link de sessão
Inicie o SSN, conecte uma fonte e confira se a sobreposição original funciona. Depois copie o link completo da ferramenta SSN dessa sobreposição.
https://socialstream.ninja/poll.html?session=YOUR_SESSION&password=YOUR_PASSWORD&server2
O valor após session= é sua sessão SSN. Não é seu canal do YouTube, nome da Twitch, nome de arquivo ou título de enquete. SSN e a página precisam usar a mesma sessão e senha. Mantenha o SSN ativo: sobreposições só recebem dados, não capturam chat.
| Regra | Por quê |
|---|---|
? inicia as configurações, & une o restante | Copie, não digite de novo. Dentro de um atributo HTML, escreva &. No campo URL do navegador ou OBS, use um &. |
| Mantenha as configurações do servidor | server, server2, server3, endpoints locais, rótulos e valores de versão variam por página. Não adicione uma opção de servidor só porque outra sobreposição a usa. |
Mantenha tudo depois de # | Pode ser importante. AI Event Overlay, por exemplo, usa um token privado #aieventauth=... . |
| Use marcadores ao compartilhar | Não inclua sua sessão real, senha ou tokens privados em capturas, repositórios ou prompts de IA. |
Se a cópia ficar vazia, confira primeiro o link original. Algumas páginas pedem as configurações ausentes; outras ficam ocultas ou redirecionam. Colocar a sessão correta no link evita adivinhações.
Abra seu arquivo no OBS
Abra o arquivo editado direto do computador. Não precisa de servidor.
- Arraste sua cópia HTML para Chrome ou Edge. Copie o endereço. Começa com
file:///. - Do link de sobreposição SSN que funciona, copie tudo a partir de
?em diante. Cole no final do endereço do arquivo. Isso mantém sessão, senha, configurações e qualquer fragmento#. - Abra esse endereço combinado no navegador para testar.
- No OBS, adicione uma Fonte de navegador. Deixe Arquivo local desmarcado. Cole o endereço completo em URL e defina largura e altura.
Exemplo: este link do SSN…
https://socialstream.ninja/poll.html?session=YOUR_SESSION&password=YOUR_PASSWORD&server2
…vira isto para uma cópia de enquete baixada no Windows:
file:///C:/SSN/social_stream-beta/my-poll.html?session=YOUR_SESSION&password=YOUR_PASSWORD&server2
No macOS começa com file:///Users/..., no Linux geralmente file:///home/.... Copiar do navegador resolve espaços e barras para você.
| Bom saber | Detalhes |
|---|---|
| Você só configura uma vez | O OBS salva o endereço. Mantenha a pasta no lugar e deixe SSN e a fonte de chat ativos. |
| Salvou uma alteração? | Clique em Atualizar cache da página atual nas propriedades de origem. |
| Por que deixar o arquivo local desmarcado? | O campo URL permite adicionar ?session=.... Escolher o arquivo com Arquivo local não adiciona essas configurações. |
Opcional: use a caixa de seleção Arquivo local com um iniciador
O seletor de arquivos do OBS escolhe o arquivo, mas não adiciona suas configurações. Uma pequena página iniciadora pode abrir a página editada com as configurações:
- Salve o código abaixo como
launch-my-poll.htmlao lado demy-poll.html. - Substitua o link de exemplo pelo link SSN completo copiado. Altere
./my-poll.htmlpara o nome do seu arquivo. Mantenha o link entre aspas, com caracteres simples&. - Clique duas vezes no iniciador para testar. No OBS, marque Arquivo local e escolha o lançador. Abre sua sobreposição com as configurações e a 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>
Para um tema em uma subpasta, coloque o iniciador ao lado da cópia do tema. Mantenha-o privado porque contém seu link de conexão. Uma exportação independente que já inclui as configurações segue suas próprias instruções.
O OBS explica os modos arquivo/URL, tamanhos, CSS personalizado e atualização na Referência da fonte do navegador.
Mude o design ou peça à IA
| Quero… | Faça isto |
|---|---|
| Mudar apenas CSS | Mantenha o link hospedado e use o campo CSS personalizado do OBS. Só afeta essa fonte do OBS, não um navegador comum. |
| Mudar o estilo da minha cópia HTML editada | Adicione seus estilos depois dos existentes ou vincule uma folha de estilos local depois deles. |
Use &css= ou &b64css= | Só algumas páginas aceitam. poll.html, por exemplo, não lê nenhum dos dois. Confira primeiro o código da página. |
| Mudar o layout HTML | Mantenha os IDs e classes usados pelos scripts. Se um script reconstrói um elemento a cada atualização, coloque a arte permanente fora dele ou adicione ao renderizador. |
| Editar uma folha de estilos ou script compartilhado | Copie e aponte sua página para a cópia para mudar apenas seu design. |
Prepare seu logotipo, arquivos de fontes, cores da marca, tamanho da tela e uma referência visual. Uma página web geralmente não consegue carregar fontes ou imagens do disco de outro computador.
Solicitação de IA
Use o prompt específico de cada guia de design ou comece com este. Forneça à IA o arquivo copiado e os estilos e scripts carregados.
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.
Impeça que o chat recebido vire código
Nomes, mensagens, títulos, valores e links vêm de espectadores e serviços externos. Trate-os como texto, nunca como código. Limpe-os onde o renderizador os coloca na página.
| Campo | Como exibir |
|---|---|
chatmessage com textonly true | Texto simples (textContent). |
chatmessage caso contrário | Pode conter emotes e formatação permitida. Use o sanitizador incluído. |
| Nomes, valores, títulos e outros campos simples | Texto simples (textContent). |
chatimg, contentimg, links | URLs, não HTML. Valide com as regras de mídia/links existentes na página e depois defina as propriedades 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 a página já tiver um sanitizador, mantenha-o. Não adicione outro.
- Para arquivos em subpastas, ajuste os caminhos dos scripts.
- Não cole nomes brutos em strings de atributos nem cores brutas na marcação de estilos. Valide os valores de estilo antes de definir uma propriedade por vez.
- HTML limpo também não é seguro para executar como JavaScript nem para usar como instrução de IA.
Mais informações: Guia da OWASP sobre destinos seguros e sanitização de HTML.
Como testar o renderizador com segurança
Execute estes testes em uma prévia local privada, não no chat público.
- Use um nome como
Guest <b>One</b>. Os sinais devem aparecer como texto. - Enviar
chatmessage: "<b>Hello</b>"comtextonly: true, depois false. Um deve mostrar as tags como texto; o outro deve mostrar texto em negrito. - Confira se um emote compatível e uma mensagem só com imagem continuam funcionando.
- Peça à IA para testar uma sonda inofensiva como
<img src=x onerror="window.__ssnInjectionProbe=1">. Não deve executar, definir o marcador nem deixar atributos de evento. Teste também um link com esquema de script.
Uma verificação bem-sucedida cobre apenas os caminhos testados. Concentre-se nos renderizadores e campos que seu design alterou.
Teste uma parte por vez
| Teste | Como |
|---|---|
| Layout | Use o modo de prévia ou demo da página, se houver, ou exemplos locais fictícios. Teste nomes e mensagens longos, avatares ausentes, dados vazios e a quantidade esperada de linhas. |
| Entrega do SSN | Mantenha o SSN ativo e use Criar mensagem de teste com a mesma sessão. O modo comum de API da extensão precisa de controle remoto da extensão por API ativado. Use uma configuração de teste: mensagens de teste podem acionar suas automações. |
| O gatilho real | Destaque uma mensagem do Dock para um cartão de destaque, vote numa enquete, escolha um vencedor, mude o texto do ticker ou inicie um cronômetro. O chat comum não testa tudo. |
| Captura real | Confira se uma mensagem ou evento real chega ao original e à cópia. Um evento simulado só prova que a exibição funciona. |
| OBS | Confira tamanho final, transparência, animações, áudio, fontes e camadas. Teste mostrar/ocultar, limpar/redefinir e atualizar. OBS e seu navegador não compartilham logins nem armazenamento salvo. |
demo ou preview do link antes de esperar dados ao vivo.Arquivos para fornecer à IA
Forneça à IA o arquivo da sobreposição e os CSS/JS que ele carrega, além destes. A referência de eventos sozinha não explica os controles de uma enquete nem o código de layout de cada sobreposição.
| Arquivo | Para que serve |
|---|---|
docs/event-reference.html | Campos oficiais, eventos nomeados, metadados, mídia e valores de doação. |
docs/customoverlays.md | Receptores personalizados e exemplos de conexão. |
| Compatibilidade de eventos e alertas | Quais eventos e campos cada fonte envia. |
Guia de mensagens de teste e createtestmessage.html | Dados de exemplo e modos de entrega. |
libs/objects.js e shared/utils/chatHtml.js | O sanitizador de exibição incluído. |
shared/utils/chatBadges.js e shared/utils/contentImage.js | Tratamento existente de distintivos e imagens. |
js/transport-dedupe.js, js/local-server-url.js, shared/overlay-control-transport.js | Suporte de conexão existente quando sua página os carrega. |
currency.js | Mantenha hasDonation para exibição e use um valor numérico válido em USD para donoValue, incluindo zero. |
| Event Flow e Comandos e API | Reutilize os controles existentes quando o design precisar de um gatilho. |
Resolver problemas
| Problema | Tente isto |
|---|---|
| Arquivo não encontrado | Arraste o HTML para o navegador de novo e copie o endereço. Confira se o nome termina em .html, não em .html.txt. |
| Script, fonte ou imagem ausente | Mantenha a pasta descompactada como está, com sua cópia ao lado do original. Confira se a arte e as fontes adicionadas estão onde a página espera. |
| Tela vazia ou “aguardando” | Confira a sessão, a senha e as partes completas ? e # , se o SSN está ativo, a função está ligada e a entrada correta está chegando. Compare com o link SSN original. |
| A aparência difere entre OBS e navegador | Confira largura e altura, CSS personalizado antigo, fontes, cache e armazenamento do navegador. Atualize após salvar. |
| O logotipo desaparece ao atualizar | O script pode estar reconstruindo o contêiner. Coloque a decoração permanente fora dele ou atualize o modelo de renderização. |
| Os dados são reiniciados ou as ações acontecem duas vezes | Confira as configurações de atualização e descarregamento, cópias duplicadas da sobreposição ou dos controles e o tratamento de duplicatas e estado da página. |
Caso especial: páginas que leem arquivos de dados separados
O mapa carrega arquivos JSON locais com fetch(), que os navegadores podem bloquear ao abrir pelo disco. Para uma mudança simples no estilo do mapa, use o link hospedado com CSS personalizado do OBS. Para uma cópia editada, peça à IA para colocar os dados do mapa na página para abrir pelo disco. Hospedar é uma opção avançada para páginas que realmente precisam, não uma etapa normal.
Corrija primeiro o menor problema confirmado. Uma mudança visual não deveria exigir alterações nos scripts de captura nem novos campos de evento. Se compartilhar um fork público, inclua seus recursos e deixe os iniciadores privados de fora.