Diseña tus propias superposiciones de Social Stream

Descargue, personalice, conecte y pruebe diseños de superposiciones locales en OBS, con guías para cada familia de superposiciones.

Crea tu propia superposición en 5 pasos

Descargar los archivosCambiar el diseñoAbrir en OBS
  1. Elige la superposición que quieras cambiar.
  2. Descargar el ZIP fuente, descomprímelo y copia el archivo HTML de esa superposición.
  3. Edita la copia por tu cuenta o pídeselo a una herramienta de IA.
  4. Abre tu copia en OBS con los ajustes de tu sesión SSN añadidos a su dirección.
  5. Pruébalo con el disparador real de la superposición.
¿Solo quieres nuevos colores o fuentes? No hace falta descargar. Conserva el enlace alojado normal y pega CSS en el campo CSS personalizado de la fuente de navegador de OBS.

Elige qué superposición cambiar

Puedes cambiar colores, fuentes, diseño, imágenes y movimiento de una superposición. La archivo HTML es la página. El URL de OBS apunta a ella y añade tu sesión y los ajustes de visualización.

Elija una superposición funcional antes de cambiar su apariencia.
Empieza con una superposición que ya funcione.

Cada tipo de superposición escucha cosas distintas. Una página de chat, una de mensajes destacados y una encuesta no usan las mismas entradas. Abre la guía de diseño de la que usas:

Guía de diseñoIniciar archivos¿Qué lo impulsa?
Chat y acoplamientosampleoverlay.html, dock.html, themes/*Cada mensaje de chat capturado
Mensajes destacadosfeatured.html, samplefeatured.html, themes/featured-styles/*Mensajes seleccionados y comandos claros
Alertas y feeds de eventosmulti-alerts.html, events.html, themes/events/index.htmlEventos coincidentes/filas de chat pagado
Encuestas gráficaspoll.htmlVotos más configuración de encuesta del anfitrión
Frascos de propinas y porteríastipjar.htmlMétrica de soporte/recuento/exageración configurada
Contadores y clasificacioneshype.html, meta.html, leaderboard.html, scoreboard.htmlRecuentos, metadatos, actividad o instantáneas de puntos
Listas de espera y sorteos de colaswaitlist.htmlCola de host y estado de ganador
Expositores de obsequiosgiveaway.html, giveaway-obs-entries.htmlEstado de sorteo administrado o feed de entrada heredado
Temporizadorestimer.htmlEstado y controles del temporizador
Teletiposticker.htmlContenido del ticker configurado
Nubes de palabras y mapaswordcloud.html, map.htmlPalabras coincidentes o entradas de ubicación
Reacciones y efectos mediáticosreactions.html, emotes.html, content.html, gif.html, confetti.html, stickers.html, actions.htmlEl desencadenante de acción/evento/medio específico de la página
Créditoscredits.htmlParticipantes recaudados y controles de créditos
Pantallas de música e IAspotify-overlay.html, cohost-overlay.html, bot.html, chatbot.htmlActualizaciones en reproducción o de bot/coanfitrión
Productos y tablerosmonetization.html, commerce-board.html, shop_the_stream.htmlEstado de comercio compartido
Juegos y recompensasgames/*, games/templates/*, games.html, battle.htmlChat, regalos y comandos específicos del juego
Superposiciones de IA generadasaioverlay.html, aievent-overlay.htmlDiseños guardados y su ruta de evento configurada

¿Quieres algo ya preparado? Prueba la Galería de superposiciones o Galería de plantillas. ¿Traes un diseño de chat de StreamElements o Streamlabs? Sigue la guía de importación. Esa exportación incluye sus propios pasos de configuración.

Descargar los archivos

  1. Descargar el ZIP del código beta. O abre el repositorio beta y elige Código → Descargar ZIP.
  2. Descomprímelo en una carpeta que vayas a conservar, como C:\SSN\social_stream-beta\. No edites dentro del ZIP. No necesitas reinstalar SSN.
  3. Busca el archivo de tu superposición (tabla anterior). Haz una copia junto al original, como poll.html → my-poll.html. Para un tema como themes/featured-styles/featured-modern.html, conserva la copia en la misma carpeta.
  4. Abre la copia en un editor de texto o código. Guárdala como .html, no .html.txt.
Conserva toda la carpeta descomprimida. Un archivo HTML puede cargar scripts, estilos, fuentes, imágenes, audio o datos de carpetas cercanas. Mover la página rompe esos enlaces. La vista de página de GitHub o «Guardar página» del navegador no descargan todo.
Cómo es la carpeta y cómo funcionan las rutas
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

Una ruta como ../../shared/utils/chatHtml.js es relativa a la página que lo carga. Mover esa página a la raíz rompe la ruta. Copia también tus imágenes y fuentes a la carpeta y usa rutas relativas. Tu copia editada no recibirá automáticamente las futuras correcciones de SSN.

Conserva tu enlace de sesión

Inicia SSN, conecta una fuente y comprueba que funcione la superposición original. Luego copia el enlace completo desde la herramienta SSN de esa superposición.

https://socialstream.ninja/poll.html?session=YOUR_SESSION&password=YOUR_PASSWORD&server2

El valor después de session= es tu sesión SSN. No es tu canal de YouTube, nombre de Twitch, archivo ni título de encuesta. SSN y la página deben usar la misma sesión y contraseña. Mantén SSN activo: las superposiciones solo reciben datos, no capturan chat.

ReglaPor qué
? inicia los ajustes, & une el restoCopia, no vuelvas a escribirlos. Dentro de un atributo HTML escribe &. En el cuadro de URL del navegador o de OBS, usa un &.
Conserva los ajustes del servidorserver, server2, server3, los endpoints locales, las etiquetas y los valores de versión varían según la página. No añadas una opción de servidor solo porque otra superposición la usa.
Conserva todo lo que va después de #Puede ser importante. AI Event Overlay, por ejemplo, usa un token privado #aieventauth=... .
Usa marcadores al compartirNo incluyas tu sesión real, contraseña ni tokens privados en capturas, repositorios ni prompts de IA.

Si tu copia queda vacía, comprueba primero el enlace original. Algunas páginas solicitan los ajustes que faltan; otras permanecen ocultas o redirigen. Poner la sesión correcta en el enlace evita adivinar.

Abre tu archivo en OBS

Abre el archivo editado directamente desde tu equipo. No necesitas servidor.

  1. Arrastra tu copia HTML a Chrome o Edge. Copia su dirección. Empieza por file:///.
  2. Del enlace de superposición SSN que funciona, copia todo desde ? en adelante. Pégalo al final de la dirección del archivo. Así conservas sesión, contraseña, ajustes y cualquier fragmento # .
  3. Abre esa dirección combinada en el navegador para probarla.
  4. En OBS, añade una Fuente de navegador (Browser Source). Deja Archivo local (Local file) sin marcar. Pega la dirección completa en URL y configura el ancho y el alto.

Ejemplo: este enlace de SSN…

https://socialstream.ninja/poll.html?session=YOUR_SESSION&password=YOUR_PASSWORD&server2

…se convierte en esto para una copia de encuesta descargada en Windows:

file:///C:/SSN/social_stream-beta/my-poll.html?session=YOUR_SESSION&password=YOUR_PASSWORD&server2

En macOS empieza por file:///Users/..., en Linux normalmente file:///home/.... Copiar desde el navegador resuelve por ti los espacios y las barras.

Conviene saberDetalles
Solo tienes que configurarlo una vezOBS guarda la dirección. No muevas la carpeta y mantén SSN y tu fuente de chat activos.
¿Has guardado un cambio?Haz clic en Actualizar la caché de la página actual en las propiedades de origen.
¿Por qué dejar el archivo local sin marcar?El campo URL permite añadir ?session=.... Elegir el archivo con Archivo local no añade esos ajustes.
Opcional: use la casilla de verificación Archivo local con un iniciador

El selector de archivos de OBS elige el archivo, pero no puede añadir tus ajustes. Una pequeña página lanzadora puede abrir tu página editada con los ajustes incluidos:

  1. Guarda el código siguiente como launch-my-poll.html junto a my-poll.html.
  2. Sustituye el enlace de ejemplo por tu enlace SSN completo copiado. Cambia ./my-poll.html por el nombre de tu archivo. Mantén el enlace entre comillas, con caracteres simples & .
  3. Haz doble clic en el lanzador para probarlo. En OBS, marca Archivo local (Local file) y elige el lanzador. Abre tu superposición con los ajustes y 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>

Para un tema en una subcarpeta, coloca el lanzador junto a la copia del tema. Mantén privado el lanzador, porque contiene tu enlace de conexión. Una exportación independiente que ya incluya sus ajustes sigue sus propias instrucciones.

OBS explica los modos archivo/URL, los tamaños, el CSS personalizado y la actualización en su Referencia de fuente del navegador.

Cambia el diseño o pídeselo a una IA

Quiero…Haz esto
Cambiar solo CSSConserva el enlace alojado y usa el campo CSS personalizado de OBS. Solo afecta a esa fuente OBS, no a un navegador normal.
Cambiar el estilo de mi copia HTML editadaAñade tus estilos después de los existentes o enlaza después una hoja de estilos local.
Usa &css= o &b64css=Solo algunas páginas lo admiten. poll.html, por ejemplo, no lee ninguno. Comprueba primero el código de la página.
Cambiar el diseño HTMLConserva los identificadores y clases que usan los scripts. Si un script reconstruye un elemento en cada actualización, coloca el arte permanente fuera de él o añádelo al renderizador.
Editar una hoja de estilos o script compartidoCópialo y apunta tu página a la copia para que solo cambie tu diseño.

Prepara tu logotipo, archivos de fuentes, colores de marca, tamaño del lienzo y una referencia visual. Una página web normalmente no puede cargar fuentes ni imágenes desde el disco de otro ordenador.

Aviso de IA

Usa el prompt específico de cada guía de diseño o empieza con este. Da a la IA el archivo copiado y los estilos y scripts que carga.

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.
No aceptes una simulación. Un diseño que solo funciona con mensajes de ejemplo fijos no está terminado. Conserva el archivo original y compara ambos con las mismas entradas de prueba.

Evita que el chat entrante se convierta en código

Los nombres, mensajes, títulos, importes y enlaces provienen de espectadores y servicios externos. Trátalos como texto, nunca como código. Límpialos donde el renderizador los coloca en la página.

CampoCómo mostrarlo
chatmessage con textonly trueTexto simple (textContent).
chatmessage en otro casoPuede contener emotes y formato permitido. Usa el saneador incluido.
Nombres, importes, títulos y otros campos simplesTexto simple (textContent).
chatimg, contentimg, enlacesURL, no HTML. Valídalas con las reglas de medios/enlaces existentes en la página y luego asigna las propiedades del 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 página ya tiene un saneador, consérvalo. No añadas otro.
  • Para archivos en subcarpetas, corrige las rutas de los scripts.
  • No pegues nombres sin tratar en cadenas de atributos ni colores sin tratar en código de estilos. Valida los valores de estilo antes de asignarlos propiedad a propiedad.
  • El HTML limpiado tampoco es seguro para ejecutarlo como JavaScript ni para usarlo como instrucción de IA.

Más información: Guía de OWASP sobre destinos seguros y saneamiento de HTML.

Cómo probar el renderizador con seguridad

Ejecuta estas pruebas en una vista previa local privada, no en un chat público.

  • Usa un nombre como Guest <b>One</b>. Los signos deben mostrarse como texto.
  • Enviar chatmessage: "<b>Hello</b>" con textonly: true, y luego false. Una debe mostrar las etiquetas como texto; la otra debe mostrar texto en negrita.
  • Comprueba que sigan funcionando un emote compatible y un mensaje que solo tenga imagen.
  • Pide a la IA que pruebe una sonda inofensiva como <img src=x onerror="window.__ssnInjectionProbe=1">. No debe ejecutarse, activar el marcador ni dejar atributos de evento. Prueba también un enlace con esquema de script.

Una prueba superada solo cubre los caminos que probaste. Céntrate en los renderizadores y campos que cambió tu diseño.

Pruébala por partes

PruebaCómo
DiseñoUsa el modo de vista previa o demo de la página, si existe, o ejemplos locales ficticios. Prueba nombres y mensajes largos, avatares ausentes, datos vacíos y el número esperado de filas.
Entrega de SSNMantén SSN activo y usa Crear mensaje de prueba (Create Test Message) con la misma sesión. El modo habitual de API de extensión necesita control remoto de la extensión mediante API (remote API control of extension) activado. Usa una configuración de prueba: los mensajes de prueba pueden disparar tus automatizaciones.
El disparador realDestaca un mensaje del Dock para una tarjeta destacada, vota en una encuesta, elige un ganador, cambia el texto del ticker o inicia un temporizador. El chat normal no prueba todo.
Captura realComprueba que un mensaje o evento real llegue tanto al original como a tu copia. Un evento simulado solo demuestra que la visualización funciona.
OBSComprueba el tamaño final, la transparencia, animaciones, audio, fuentes y capas. Prueba mostrar/ocultar, borrar/restablecer y actualizar. OBS y tu navegador no comparten inicios de sesión ni almacenamiento guardado.
Actualizar puede perder datos. Algunas páginas conservan los datos en memoria. Consulta la guía del tipo antes de activar la actualización automática o el cierre al ocultar. Quita demo o preview del enlace antes de esperar datos en directo.

Archivos que dar a tu IA

Da a la IA el archivo de la superposición y los CSS/JS que carga, además de estos. La referencia de eventos por sí sola no explica los controles de una encuesta ni el código de diseño de cada superposición.

ArchivoPara qué sirve
docs/event-reference.htmlCampos oficiales, eventos con nombre, metadatos, medios y valores de donación.
docs/customoverlays.mdReceptores personalizados y ejemplos de conexión.
Compatibilidad de eventos y alertasQué eventos y campos envía cada fuente.
Guía de mensajes de prueba y createtestmessage.htmlDatos de ejemplo y modos de entrega.
libs/objects.js y shared/utils/chatHtml.jsEl saneador de visualización incluido.
shared/utils/chatBadges.js y shared/utils/contentImage.jsGestión existente de insignias e imágenes.
js/transport-dedupe.js, js/local-server-url.js, shared/overlay-control-transport.jsSoporte de conexión existente cuando tu página los carga.
currency.jsMantén hasDonation para mostrarlo y usa un valor numérico válido en USD para donoValue, incluido cero.
Event Flow y Comandos y APIReutiliza los controles existentes cuando el diseño necesite un disparador.

Solucionar problemas

ProblemaPrueba esto
Archivo no encontradoArrastra de nuevo el HTML al navegador y copia su dirección. Comprueba que el nombre termine en .html, no en .html.txt.
Falta escritura, fuente o imagenConserva la carpeta descomprimida tal como está, con tu copia junto al original. Comprueba que las imágenes y fuentes añadidas estén donde la página espera encontrarlas.
Pantalla vacía o «en espera»Comprueba la sesión, la contraseña y las partes completas ? y # , que SSN esté activo, la función activada y llegue la entrada correcta. Compara con el enlace SSN original.
Se ve distinto en OBS y en el navegadorComprueba ancho y alto, CSS personalizado anterior, fuentes, caché y almacenamiento del navegador. Actualiza después de guardar.
El logotipo desaparece al actualizarEl script puede estar reconstruyendo su contenedor. Coloca la decoración permanente fuera de él o actualiza la plantilla de renderizado.
Los datos se reinician o las acciones se ejecutan dos vecesComprueba los ajustes de actualización y descarga, las copias duplicadas de la superposición o los controles y la gestión de duplicados y estado de la página.
Caso especial: páginas que leen archivos de datos separados

El mapa carga archivos JSON locales con fetch(), que los navegadores pueden bloquear al abrir desde el disco. Para un cambio de estilo sencillo del mapa, usa su enlace alojado con CSS personalizado de OBS. Para una copia editada, pide a la IA que incluya los datos del mapa en la página para abrirla desde el disco. Alojarla es una opción avanzada para páginas que realmente lo necesitan, no un paso habitual.

Corrige primero el problema confirmado más pequeño. Un cambio de estilo no debería necesitar modificar scripts de captura ni añadir campos de evento. Si compartes un fork público, incluye sus recursos y excluye los lanzadores privados.