Створіть власний оверлей за 5 кроків
- Виберіть оверлей який хочете змінити.
- Завантажити вихідний файл ZIP, розпакуйте та скопіюйте HTML-файл оверлею.
- Змініть копію самостійно або попросіть інструмент ШІ.
- Відкрийте копію в OBS з налаштуваннями сесії SSN, доданими до адреси.
- Перевірте зі справжнім тригером оверлею.
Виберіть оверлей для зміни
Можна змінювати кольори, шрифти, компонування, графіку й рух оверлею. Сторінка Файл HTML — сама сторінка. Файл URL-адреса OBS указує на неї та додає налаштування сесії й відображення.

Кожен тип оверлею слухає різні дані. Сторінка чату, виділеного повідомлення та опитування використовують різні вхідні дані. Відкрийте посібник із дизайну свого типу:
| Керівництво з проектування | Запуск файлів | Що рухає цим |
|---|---|---|
| Чат і док | 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 |
| Лічильники та рейтинги | 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 | Контроль зібраних учасників і кредитів |
| Дисплеї музики та штучного інтелекту | 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 | Ігровий чат, подарунки та команди |
| Створено AI накладання | aioverlay.html, aievent-overlay.html | Збережені проекти та їх налаштований маршрут події |
Потрібне готове рішення? Спробуйте Галерея оверлеїв або Галерея шаблонів. Хочете перенести оформлення чату StreamElements чи Streamlabs? Дотримуйтеся посібник з імпорту. Такий експорт має власні кроки налаштування.
Завантажте файли
- Завантажити код beta у ZIP. Або відкрийте бета-репозиторій і виберіть Код → Завантажити ZIP.
- Розпакуйте в постійну теку, наприклад
C:\SSN\social_stream-beta\. Не редагуйте всередині ZIP. Перевстановлювати SSN не потрібно. - Знайдіть файл оверлею (див. таблицю вище). Створіть копію поруч з оригіналом, наприклад
poll.html→my-poll.html. Для теми на кшталтthemes/featured-styles/featured-modern.html, тримайте копію в тій самій теці. - Відкрийте копію в текстовому редакторі чи редакторі коду. Збережіть як
.html, ні.html.txt.
Будова теки й робота шляхів
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 задається відносно сторінки, що його завантажує. Переміщення сторінки в корінь ламає шлях. Скопіюйте графіку й шрифти до теки та використовуйте відносні шляхи. Змінена копія не отримує майбутніх виправлень SSN автоматично.
Збережіть посилання сесії
Запустіть SSN, підключіть джерело й перевірте початковий оверлей. Потім скопіюйте повне посилання з інструмента SSN для цього оверлею.
https://socialstream.ninja/poll.html?session=YOUR_SESSION&password=YOUR_PASSWORD&server2
Значення після session= — ваша сесія SSN. Це не канал YouTube, ім'я Twitch, ім'я файлу чи назва опитування. SSN і сторінка мають використовувати одну сесію та пароль. Залиште SSN запущеним: оверлеї лише отримують дані, а не захоплюють чат самі.
| Правило | Чому |
|---|---|
? починає налаштування, & з'єднує решту | Копіюйте, не передруковуйте. Усередині атрибута HTML пишіть &. У браузері або полі URL OBS використовуйте звичайний &. |
| Збережіть налаштування сервера | server, server2, server3, локальні кінцеві точки, мітки й версії відрізняються між сторінками. Не додавайте параметр сервера лише тому, що його використовує інший оверлей. |
Збережіть усе після # | Це може бути важливо. Наприклад, AI Event Overlay використовує приватний #aieventauth=... . |
| Використовуйте заповнювачі під час публікації | Не включайте справжню сесію, пароль і приватні токени до знімків екрана, репозиторіїв і промптів ШІ. |
Якщо копія порожня, спочатку перевірте початкове посилання. Одні сторінки запитують відсутні налаштування, інші приховуються чи перенаправляють. Правильна сесія в посиланні позбавляє здогадок.
Відкрийте файл в OBS
Відкрийте змінений файл безпосередньо з комп'ютера. Сервер не потрібен.
- Перетягніть копію HTML у Chrome чи Edge. Скопіюйте адресу. Вона починається з
file:///. - Із робочого посилання оверлею SSN скопіюйте все починаючи з
?і далі. Вставте це в кінець адреси файлу. Так збережуться сесія, пароль, налаштування та будь-які#. - Відкрийте отриману адресу в браузері для перевірки.
- В OBS додайте Джерело браузера (Browser Source). Залиште Локальний файл вимкненим. Вставте повну адресу до 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 та джерело чату запущеними. |
| Зберегли зміну? | Натисніть Оновити кеш поточної сторінки (Refresh cache of current page) у властивостях джерела. |
| Чому не відмічено позначку «Локальний файл»? | Поле URL дозволяє додати ?session=.... Вибір через «Локальний файл» не додає цих налаштувань. |
Додатково: використовуйте прапорець «Локальний файл» із засобом запуску
Діалог вибору файлу OBS вибирає файл, але не додає налаштувань. Невелика сторінка-запускач може відкрити змінену сторінку з налаштуваннями:
- Збережіть код нижче як
launch-my-poll.htmlпоруч ізmy-poll.html. - Замініть посилання-заповнювач повним скопійованим посиланням 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 та оновлення в Посилання на джерело браузера.
Змінити дизайн самостійно або з ШІ
| Я хочу… | Що зробити |
|---|---|
| Змінити лише CSS | Збережіть розміщене посилання та використовуйте в OBS Власний CSS . Це впливає лише на це джерело OBS, не на звичайний браузер. |
| Змінити оформлення моєї HTML-копії | Додайте стилі після наявних або підключіть після них локальний файл стилів. |
Використовуйте &css= або &b64css= | Це підтримують лише деякі сторінки. poll.html, наприклад, не читає жодного з них. Спочатку перевірте код сторінки. |
| Змінити структуру HTML | Збережіть ID та класи, які використовують скрипти. Якщо скрипт перебудовує елемент під час кожного оновлення, розмістіть постійну графіку поза ним або додайте до функції відтворення. |
| Змінити спільний файл стилів або скрипт | Скопіюйте його й укажіть копію на своїй сторінці, щоб змінювався лише ваш дизайн. |
Підготуйте логотип, файли шрифтів, фірмові кольори, розмір полотна й візуальний зразок. Вебсторінка зазвичай не може завантажувати шрифти чи зображення з диска іншого комп'ютера.
Підказка AI
Використовуйте промпт для потрібного типу з посібника з дизайну або почніть із цього. Передайте ШІ копію файлу й завантажувані стилі та скрипти.
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.
Не дозволяйте вхідному чату ставати кодом
Імена, повідомлення, заголовки, суми й посилання надходять від глядачів і зовнішніх сервісів. Вважайте їх текстом, ніколи кодом. Очищуйте там, де відтворення розміщує їх на сторінці.
| Поле | Як показати |
|---|---|
chatmessage з textonly true | Звичайний текст (textContent). |
chatmessage інакше | Може містити емоути й дозволене форматування. Використовуйте вбудований санітайзер. |
| Імена, суми, заголовки та інші звичайні поля | Звичайний текст (textContent). |
chatimg, contentimg, посилання | URL, не HTML. Перевірте їх за наявними правилами сторінки для медіа й посилань, потім задайте властивості 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>
- Якщо на сторінці вже є санітайзер, збережіть його. Не додавайте другий.
- Для файлів у підтеках виправте шляхи до скриптів.
- Не вставляйте необроблені імена в рядки атрибутів або кольори в розмітку стилів. Перевіряйте значення стилів перед установленням кожної властивості окремо.
- Навіть очищений HTML небезпечно виконувати як JavaScript або використовувати як інструкцію для ШІ.
Докладніше: Посібник OWASP із безпечних приймачів даних та очищення HTML.
Як безпечно перевірити відтворення
Запускайте їх у приватному локальному попередньому перегляді, не в публічному чаті.
- Використовуйте ім'я на кшталт
Guest <b>One</b>. Дужки мають відобразитися як текст. - Надіслати
chatmessage: "<b>Hello</b>"зtextonly: true, потім false. В одному випадку теги мають відобразитися як текст, в іншому — як жирний текст. - Перевірте, що підтримуваний емоут і повідомлення лише із зображенням і далі працюють.
- Попросіть ШІ перевірити нешкідливий тест, наприклад
<img src=x onerror="window.__ssnInjectionProbe=1">. Він не має виконуватися, встановлювати маркер чи залишати атрибути подій. Також перевірте посилання зі скриптовою схемою URL.
Успішна перевірка охоплює лише перевірені шляхи. Зосередьтеся на функціях відтворення та полях, змінених вашим дизайном.
Перевіряйте по одній частині
| Перевірка | Як |
|---|---|
| Компонування | Використовуйте режим попереднього перегляду/демо сторінки, якщо він є, або вигадані локальні приклади. Перевірте довгі імена й повідомлення, відсутні аватари, порожні дані та очікувану кількість рядків. |
| Доставлення SSN | Залиште SSN увімкненим і використовуйте Створити тестове повідомлення із тією самою сесією. Звичайному режиму API розширення потрібен віддалене керування розширенням через API увімкненим. Використовуйте тестову конфігурацію: тестові повідомлення можуть запускати автоматизації. |
| Справжній тригер | Виведіть повідомлення з Dock для картки, проголосуйте в опитуванні, виберіть переможця розіграшу, змініть рухомий рядок або запустіть таймер. Звичайний чат перевіряє не все. |
| Справжнє захоплення | Перевірте, що справжнє повідомлення чи подія надходить і до оригіналу, і до копії. Штучна подія підтверджує лише роботу відображення. |
| OBS | Перевірте підсумковий розмір, прозорість, анімації, звук, шрифти й шари. Спробуйте показ/приховування, очищення/скидання та оновлення. OBS і браузер не діляться входами й збереженими даними. |
demo або preview із посилання, перш ніж очікувати живі дані.Файли, які потрібно передати ШІ
Передайте ШІ сам файл оверлею, завантажувані CSS/JS і ці файли. Лише довідка подій не пояснює керування опитуванням чи код компонування кожного оверлею.
| Файл | Для чого це |
|---|---|
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 для відображення та використовуйте допустиме числове значення USD donoValue, включаючи нуль. |
| Потоки подій і Команди й API | Використовуйте наявні елементи керування, якщо дизайну потрібен тригер. |
Усунення несправностей
| Проблема | Що спробувати |
|---|---|
| Файл не знайдено | Знову перетягніть HTML у браузер і скопіюйте адресу. Переконайтеся, що ім'я закінчується на .html, а не .html.txt. |
| Відсутній сценарій, шрифт або зображення | Збережіть розпаковану теку як є, з копією поруч з оригіналом. Переконайтеся, що додані зображення та шрифти розташовані там, де сторінка їх очікує. |
| Порожній екран або «очікування» | Перевірте сесію, пароль, повні ? і # частини, роботу SSN, увімкнення функції та надходження правильних даних. Порівняйте з початковим посиланням SSN. |
| В OBS виглядає інакше, ніж у браузері | Перевірте ширину/висоту, старий користувацький CSS, шрифти, кеш і сховище браузера. Оновіть після збереження. |
| Логотип зникає під час оновлення | Скрипт може перебудовувати контейнер. Розмістіть постійні прикраси поза ним або змініть шаблон відтворення. |
| Дані скидаються або дії виконуються двічі | Перевірте налаштування оновлення та вивантаження, дублікати оверлею чи керування, а також обробку дублікатів і стану самою сторінкою. |
Особливий випадок: сторінки, які читають окремі файли даних
Карта завантажує локальні JSON-файли через fetch(), що браузери можуть блокувати під час відкриття з диска. Для простої зміни оформлення карти використовуйте розміщене посилання та власний CSS в OBS. Для зміненої копії попросіть ШІ вбудувати дані карти в сторінку, щоб вона відкривалася з диска. Хостинг — розширений варіант для сторінок, яким він справді потрібен, а не звичайний крок.
Спочатку виправте найменшу підтверджену проблему. Зміна оформлення не має вимагати змін скриптів захоплення чи нових полів подій. Публікуючи форк, додайте ресурси, але виключіть приватні запускачі.