Выберите наложение, дизайн которого хотите изменить.
Вы можете изменить цвета, шрифты, макет, оформление и движение существующей страницы. HTML-файл — страница; тот URL-адрес OBS указывает на него и предоставляет настройки сеанса и дисплея. Для небольшого изменения стиля используйте OBS Custom CSS на размещенной странице. Для более глубоких изменений загрузите исходный код и запустите собственную копию.

В этих руководствах рассматриваются семейства наложений, включая их темы. Выберите получателя для используемой вами функции: страница чата, страница выбранных сообщений и опрос не все используют одинаковые входные данные.
| Руководство по проектированию | Стартовые файлы | Что движет этим |
|---|---|---|
| Чат и док | sampleoverlay.html, dock.html, themes/* | Каждое захваченное сообщение чата |
| Выбранные сообщения | featured.html, samplefeatured.html, themes/featured-styles/* | Выбранные сообщения и команды очистки |
| Оповещения и ленты событий | multi-alerts.html, events.html, themes/events/index.html | Соответствующие события/строки платного чата |
| Графические опросы | poll.html | Голоса плюс настройки опроса хоста |
| Баночки и ворота для наконечников | tipjar.html | Настроенная метрика поддержки/количества/ажиотажа |
| Счетчики и рейтинги | hype.html, meta.html, leaderboard.html, scoreboard.html | Подсчеты, метаданные, активность или снимки точек. |
| Списки ожидания и розыгрыши очередей | waitlist.html | Очередь хоста и состояние победителя |
| Витрины с подарками | giveaway.html, giveaway-obs-entries.html | Управляемый фид бесплатных объявлений или устаревший фид записей. |
| Таймеры | timer.html | Состояние таймера и элементы управления |
| Тикеры | ticker.html | Настроенное содержимое тикера |
| Облака слов и карты | wordcloud.html, map.html | Соответствующие слова или записи о местоположении. |
| Реакции и эффекты СМИ | reactions.html, emotes.html, content.html, gif.html, confetti.html, stickers.html, actions.html | Триггер для конкретного медиа/события/действия на странице. |
| Титры | credits.html | Контроль количества участников и кредитов |
| Музыка и AI-дисплеи | spotify-overlay.html, cohost-overlay.html, bot.html, chatbot.html | Обновления текущего воспроизведения или ботов/соведущих |
| Изделия и доски | monetization.html, commerce-board.html, shop_the_stream.html | Состояние совместной торговли |
| Игры и награды | games/*, games/templates/*, games.html, battle.html | Чат, подарки и команды, специфичные для игры. |
| Сгенерированные наложения ИИ | aioverlay.html, aievent-overlay.html | Сохраненные проекты и настроенный маршрут событий. |
Для готового дизайна запустите в Галерея оверлеев или Галерея шаблонов. Для существующего оформления чата StreamElements/Streamlabs следуйте инструкциям руководство по импорту. Импортированный автономный HTML-код имеет свои собственные инструкции по экспорту/настройке.
1. Загрузите сами файлы.
- Скачать исходники beta в ZIPили откройте бета-репозиторий и выберите Код → Скачать ZIP.
- Распакуйте ZIP-архив в папку, которую вы сможете сохранить, например
C:\SSN\social_stream-beta\. Не редактируйте содержимое сжатого архива. Это исходные файлы страниц; редактирование отдельной копии не требует переустановки SSN. - Найдите файл, показанный в таблице выше. Дублируйте его рядом с оригиналом: например
poll.htmlстановитсяmy-poll.html. Дляthemes/featured-styles/featured-modern.html, сохраните копиюthemes/featured-styles/. - Откройте копию в текстовом редакторе или редакторе кода. Предоставьте вашему инструменту искусственного интеллекта доступ к этому файлу и необходимым стилям/скриптам. Сохранить HTML как
.html, не.html.txt.
Сохраните извлеченную структуру папок. Рядом с одним загруженным HTML-файлом могут быть загружены сценарии, таблицы стилей, шрифты, изображения, аудио или JSON. Просмотр страницы GitHub и страница «Сохранить» в браузере не являются надежным комплексным пакетом. В каждом руководстве по типам указаны полезные файлы, но полностью извлеченная папка — это самый простой способ сохранить зависимости.
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
Ссылка, например ../../shared/utils/chatHtml.js относится к странице, которая его загружает. Перемещение этой страницы в корень нарушает путь. Также скопируйте в проект локальные изображения и шрифты, а затем используйте относительные URL-адреса. Храните загруженные версии вместе; ваша отредактированная копия не будет автоматически получать будущие исправления SSN.
2. Сохраните настройки сеанса и подключения.
Запустите SSN, подключите источник и убедитесь, что исходное наложение работает. Скопируйте полная сгенерированная ссылка из соответствующего инструмента SSN. Значение после session= идентифицирует ваш сеанс SSN; это не канал YouTube, имя пользователя Twitch, имя файла или заголовок опроса.
https://socialstream.ninja/poll.html?session=YOUR_SESSION&password=YOUR_PASSWORD&server2
В примере используются заполнители. SSN и страница должны использовать один и тот же фактический сеанс и любой настроенный пароль. Изменение имени файла не меняет сеанс. Продолжайте работу SSN и захвата: оверлей получает данные; он не записывает чат платформы сам по себе.
?запускает запрос; последующие настройки используйте&. Копируйте значения вместо их повторного ввода. В атрибуте источника HTML напишите&; в поле URL-адреса браузера/OBS используйте обычный амперсанд.- Сохранить настройки транспорта:
server,server2,server3локальные конечные точки, метки и значения версий зависят от страницы. Не добавляйте флаг сервера только потому, что его поддерживает другое наложение. - Сохраните также фрагменты: все после
#может иметь значение. Например, AI Event Overlay использует частное#aieventauth=...отображать жетон. - Используйте заполнители в общих примерах. Держите ссылку на реальный сеанс, пароль и токены частного отображения подальше от общедоступных снимков экрана, репозиториев и примеров подсказок ИИ.
Если копия остается пустой, сначала проверьте исходную сгенерированную ссылку. На некоторых страницах запрашиваются недостающие настройки; другие остаются скрытыми или перенаправляются. Явное предоставление правильного сеанса позволяет избежать использования значений по умолчанию для конкретной страницы.
3. Откройте файл в OBS.
Откройте отредактированный HTML прямо со своего компьютера. Нет сервера для установки или запуска.
- Перетащите скопированный HTML-файл в Chrome или Edge. Скопируйте его полный адрес из адресной строки; это начинается с
file:///. - Скопируйте все из
?и далее в рабочей ссылке наложения SSN и добавьте ее в конец адреса этого файла. При этом сохраняется ваш сеанс, пароль, другие настройки и любые#окончание. - Откройте объединенный адрес в браузере, чтобы проверить его.
- В OBS добавьте Источник «Браузер». Оставьте Локальный файл снимите флажок и вставьте полный адрес в URL. Установите ширину и высоту вашего дизайна.
Например, эта ссылка SSN:
https://socialstream.ninja/poll.html?session=YOUR_SESSION&password=YOUR_PASSWORD&server2
становится этим адресом для загруженной копии опроса в Windows:
file:///C:/SSN/social_stream-beta/my-poll.html?session=YOUR_SESSION&password=YOUR_PASSWORD&server2
Используйте фактический адрес файла и скопированные настройки. На macOS адрес начинается с file:///Users/...; в Linux это обычно начинается с file:///home/.... При копировании адреса браузера пробелы и косые черты обрабатываются автоматически.
Настройте это один раз. OBS сохраняет адрес вместе с источником. Сохраните загруженную папку в том же месте и оставьте SSN и источник чата включенными при использовании наложения. После сохранения изменения дизайна используйте Обновить кэш текущей страницы в свойствах источника.
Зачем оставлять локальный файл неотмеченным? Поле URL позволяет указать ?session=.... Выбор HTML с помощью средства выбора файлов не добавляет эти настройки.
Необязательно: используйте флажок «Локальный файл» с помощью панели запуска.
Средство выбора файлов OBS выбирает файл; он не добавляет сгенерированные вами настройки запроса. Для немодифицированного приемника на основе запросов небольшая локальная программа запуска может перейти на отредактированную страницу с прикрепленными настройками:
- Сохраните следующее как
launch-my-poll.htmlрядом сmy-poll.html. - Замените размещенный URL-адрес заполнителя на полную скопированную ссылку SSN. Изменить
./my-poll.htmlна фактическое отредактированное имя файла. Сохраняйте ссылку внутри кавычек, обычными&символы. - Дважды щелкните программу запуска, чтобы проверить ее. В OBS выберите Локальный файл и выберите пусковая установка. Он перенаправляется на локальное наложение с запросом и фрагментом.
<!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>
Для вложенной темы поместите панель запуска рядом с копией темы. Держите программу запуска конфиденциальной, поскольку она содержит ссылку для подключения. Загруженный автономный экспорт, в который уже внедрена его конфигурация, вместо этого следует собственным инструкциям по экспорту.
OBS документирует режимы файлов/URL-адресов, размеры, пользовательский CSS и элементы управления обновлением в файле Ссылка на исходный код браузера.
4. Измените дизайн или попросите это сделать ИИ.
Для изменения только CSS сохраните размещенную ссылку и используйте OBS. Собственный CSS поле. Оно применяется только к этому источнику, поэтому обычный браузер, открывающий тот же URL-адрес, не будет отображать эти переопределения. Для отредактированного файла HTML добавьте переопределения после существующих стилей или свяжите после них локальную таблицу стилей. Предоставьте свой логотип, файлы шрифтов, фирменные цвета, размер холста и визуальную ссылку.
Некоторые страницы поддерживают &css= или &b64css=; поддержка указана за страницу. poll.html, например, не читает ни того, ни другого. Прежде чем использовать параметры URL, проверьте парсер страницы. Веб-страница обычно не может загрузить произвольный шрифт или изображение с локального диска другого компьютера.
При изменении разметки сохраняйте идентификаторы/классы, на которые ссылаются скрипты. Если JavaScript перестраивает элемент при каждом обновлении, постоянная иллюстрация должна находиться за пределами этого элемента или воссоздаваться средством рендеринга. Скопируйте общую таблицу стилей/скрипт и измените ссылку на свою страницу, если вы хотите, чтобы изменения затронули только ваш дизайн.
Используйте подсказку для конкретного типа в приведенных выше руководствах или начните с этой общей подсказки:
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.
В руководствах по типам описывается реальный механизм сохранения. Не принимайте дизайн, который работает только потому, что в нем жестко запрограммированы примеры сообщений. Сохраните копию исходного файла и сравните отредактированное изображение, используя те же тестовые входные данные.
5. Не допускайте, чтобы входящий чат превращался в код
Сообщения, имена, заголовки, суммы, метаданные и медиа-ссылки могут исходить от зрителей или внешних служб. Дезинфекция в том месте, где пользовательский модуль рендеринга вставляет их. Строка, полученная через SSN, не является разрешением на ее выполнение. Используйте простой текст DOM для простых полей; используйте упакованное дезинфицирующее средство для поддерживаемого HTML-кода тела сообщения. См. Объяснение OWASP о безопасных приемниках и очистке HTML..
В SSN, textonly применяется только к chatmessage. Если это правда, отображать это тело как обычный текст. В противном случае он может содержать эмоции и разрешенное форматирование. Отобразить другие обычные поля как текст; медиа-поля, такие как chatimg и contentimg — это URL-адреса/данные, а не фрагменты HTML.
<!-- 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>
Сохраните существующее эквивалентное дезинфицирующее средство, а не добавляйте второе. Для вложенных файлов настройте относительные пути к скриптам. Создавайте аватары и ссылки с помощью свойств DOM после проверки URL-адреса в соответствии с существующей политикой мультимедиа/ссылок страницы. Не интерполируйте необработанные имена в строки атрибутов или необработанные цвета в разметку стиля; проверяйте стили перед установкой отдельных свойств. Очистка HTML не делает строку безопасной для выполнения в качестве инструкции JavaScript или AI.
Проверьте рендерер в изолированном предварительном просмотре.
- Используйте простое имя, например
Guest <b>One</b>: скобки должны оставаться текстовыми. - Попробуйте
chatmessage: "<b>Hello</b>"сtextonly: true, то неверно. Литеральная разметка и разрешенное форматированное содержимое должны иметь соответствующие пути. - Проверьте поддерживаемый смайлик и сообщение, содержащее только изображение, чтобы изменения безопасности не удалили эти функции.
- Попросите ИИ проверить безвредный зонд, например
<img src=x onerror="window.__ssnInjectionProbe=1">в измененном рендерере. Он не должен выполняться, устанавливать маркер или оставлять атрибуты исполняемого события. Также проверьте ссылку на схему сценария. Запускайте зонды локально, а не в публичном чате.
Проходящий зонд проверяет только используемые пути. Держите тесты сосредоточенными на средствах визуализации и полях, измененных дизайном.
6. Проверьте макет, подключение и OBS отдельно.
- Планировка: используйте документированный режим предварительного просмотра/демонстрации страницы, если таковой имеется, или вымышленные местные образцы. Проверьте длинные имена/сообщения, отсутствующие аватары, пустые данные и ожидаемое количество строк.
- Доставка SSN: оставьте SSN активным и используйте Создать тестовое сообщение с той же сессии. Обычный режим приема Extension API требует удалённое управление расширением через API включено. Используйте изолированную тестовую установку; представленные тесты могут активировать настроенную автоматизацию.
- Фактический триггер: разместить сообщение в Dock для избранной карточки, отправить голосование за опрос, выбрать победителя для розыгрыша призов, изменить текст тикера или запустить таймер для таймера. Обычный чат не является универсальным тестом.
- Реальный захват: подтвердить, что фактическое исходное сообщение/событие достигает исходной и отредактированной страницы. Фокальное событие подтверждает рендеринг, а не захват платформы.
- OBS: проверьте исходный код на его окончательный размер, прозрачность, анимацию, звук, шрифты и слои. Упражнение: отображение/скрытие, очистка/сброс и обновление. Браузер и OBS имеют отдельное хранилище и сеансы; логин браузера или localStorage не передаются автоматически.
Для страниц, которые собирают данные в памяти, выгрузка или обновление могут потерять состояние. Проверьте руководство по типам, прежде чем включать автоматическое обновление или выключение при скрытии. Дисплеи, управляемые хостом, имеют различное поведение при восстановлении. Удалить demo/preview перед ожиданием живых данных.
Полезные файлы и ссылки для вашего ИИ.
docs/event-reference.html: канонические поля, именованные события, метаданные, медиа и суммы пожертвований.docs/customoverlays.md: пользовательские приемники и примеры подключения.- Совместимость событий и уведомлений: какие события/поля проект может ожидать от источника.
- Руководство по тестовому сообщению и
createtestmessage.html: примеры полезных данных и режимов доставки. libs/objects.jsиshared/utils/chatHtml.js: пакетная очистка дисплея.shared/utils/chatBadges.jsиshared/utils/contentImage.js: обработка существующих значков и изображений.js/transport-dedupe.js,js/local-server-url.js, иshared/overlay-control-transport.js: существующая транспортная поддержка при загрузке вашей страницы.currency.js: сохранитьhasDonationдля отображения и соблюдения действительного числового значения доллара США.donoValue, включая ноль.- Event Flow и Команды и API: повторно использовать существующие элементы управления, когда проекту требуется триггер.
Укажите фактический источник наложения и ссылки на него CSS/JS, а также эту документацию. Ссылка на событие сама по себе не описывает состояние управления опросом или частную структуру рендеринга каждого наложения.
Когда копирование не работает
| Симптом | Проверьте |
|---|---|
| Файл не найден | Снова перетащите HTML-код в браузер и скопируйте его текущий адрес файла. Убедитесь, что имя файла заканчивается на .html, а не на .html.txt. |
| Отсутствует шрифт, шрифт или изображение. | Сохраняйте структуру извлеченных папок нетронутой, располагая отредактированную копию рядом с оригиналом. Убедитесь, что все добавленные изображения и шрифты находятся в ожидаемых папках. |
| Пустой или «ожидающий» дисплей. | Проверьте сеанс, пароль, полный запрос/фрагмент, рабочее состояние SSN, включенную функцию и соответствующие входные данные. Сравните исходный сгенерированный URL. |
| Работает в браузере, в OBS отличается. | Проверьте ширину/высоту, старый пользовательский CSS, наличие шрифтов, кеширование и другое хранилище браузера. Обновить после сохранения. |
| Логотип исчезает при обновлении. | Средство визуализации может заменить свой контейнер. Разместите постоянное украшение снаружи или обновите шаблон рендеринга. |
| Состояние сбрасывается или действия срабатывают дважды. | Проверьте настройки обновления/выгрузки, дублирующиеся экземпляры вывода/управления, а также существующее поведение дедупликации/состояния страницы. |
Особый случай: страницы, которые считывают отдельные файлы данных.
Карта читает локальные файлы JSON с помощью fetch(), который браузер может заблокировать при открытии с диска. Для простого изменения стиля карты используйте ее размещенную ссылку с пользовательским CSS OBS. Для отредактированной копии HTML попросите свой ИИ включить необходимые данные карты на страницу, чтобы она открывалась непосредственно с диска. Хостинг — это расширенный вариант для страницы, которая в нем особенно нуждается, а не обычный этап настройки этих наложений.
Остановитесь на самой незначительной подтвержденной проблеме. Рестайлинг не должен требовать изменения сценариев захвата или изобретения новых полей событий. Если вы делитесь общедоступным форком, включите его вспомогательные ресурсы и не допускайте использования частных лаунчеров в этой загрузке.