Zaprojektuj własne nakładki do strumieni społecznościowych

Pobieraj, dostosowuj, łącz i testuj lokalne projekty nakładek w OBS, wraz z przewodnikami dla każdej rodziny nakładek.

Stwórz własną nakładkę w 5 krokach

Pobierz plikiZmień projektOtwarte w OBS
  1. Wybierz nakładkę którą chcesz zmienić.
  2. Pobierz źródłowy plik ZIP, rozpakuj i skopiuj plik HTML tej nakładki.
  3. Edytuj kopię samodzielnie lub poproś narzędzie AI.
  4. Otwórz kopię w OBS z ustawieniami sesji SSN dodanymi do adresu.
  5. Przetestuj z rzeczywistym wyzwalaczem nakładki.
Chcesz tylko nowe kolory lub czcionki? Pomiń pobieranie. Zachowaj zwykły hostowany link i wklej CSS w źródle przeglądarkowym OBS do pola Własny CSS .

Wybierz nakładkę do zmiany

Możesz zmieniać kolory, czcionki, układ, grafikę i animacje nakładki. Strona Plik HTML to strona. Plik Adres URL OBS wskazuje go i dodaje ustawienia sesji oraz wyświetlania.

Wybierz działającą nakładkę przed zmianą jej wyglądu.
Zacznij od nakładki, która już działa.

Każdy typ nakładki nasłuchuje czegoś innego. Strona czatu, wyróżnionej wiadomości i ankieta nie używają tych samych danych. Otwórz poradnik projektu dla używanego typu:

Przewodnik projektowyUruchamianie plikówCo nim kieruje
Czat i dokowaniesampleoverlay.html, dock.html, themes/*Każda przechwycona wiadomość na czacie
Wyróżnione wiadomościfeatured.html, samplefeatured.html, themes/featured-styles/*Wybrane komunikaty i jasne polecenia
Alerty i kanały zdarzeńmulti-alerts.html, events.html, themes/events/index.htmlPasujące wydarzenia / płatne wiersze czatu
Sondaże graficznepoll.htmlGłosy i ustawienia ankiety hosta
Słoiki na napiwki i bramkitipjar.htmlSkonfigurowane wskaźniki wsparcia/liczby/szumu
Liczniki i rankingihype.html, meta.html, leaderboard.html, scoreboard.htmlLiczniki, metadane, działania lub migawki punktów
Listy oczekujących i losowania kolejekwaitlist.htmlKolejka hostów i stan zwycięzcy
Prezentacje prezentówgiveaway.html, giveaway-obs-entries.htmlZarządzany stan rozdania lub kanał zgłoszeniowy starszej wersji
Timerytimer.htmlStan timera i elementy sterujące
Tickeryticker.htmlSkonfigurowana zawartość tickera
Chmury słów i mapywordcloud.html, map.htmlPasujące słowa lub wpisy lokalizacji
Reakcje i efekty medialnereactions.html, emotes.html, content.html, gif.html, confetti.html, stickers.html, actions.htmlWyzwalacz mediów/wydarzeń/akcji specyficzny dla strony
Napisy końcowecredits.htmlKontrola zebranych uczestników i kredytów
Wyświetlacze muzyczne i AIspotify-overlay.html, cohost-overlay.html, bot.html, chatbot.htmlAktualizacje teraz odtwarzane lub boty/współhosty
Wyroby i płytymonetization.html, commerce-board.html, shop_the_stream.htmlStan wspólnego handlu
Gry i nagrodygames/*, games/templates/*, games.html, battle.htmlCzat specyficzny dla gry, prezenty i polecenia
Wygenerowane nakładki AIaioverlay.html, aievent-overlay.htmlZapisane projekty i skonfigurowana dla nich trasa wydarzenia

Chcesz coś gotowego? Wypróbuj Galeria nakładek lub Galeria szablonów. Chcesz użyć skórki czatu StreamElements lub Streamlabs? Postępuj według przewodnik importowania. Ten eksport ma własne kroki konfiguracji.

Pobierz pliki

  1. Pobierz źródła beta w ZIP. Lub otwórz repozytorium wersji beta i wybierz Kod → Pobierz ZIP.
  2. Rozpakuj do folderu, który zachowasz, np. C:\SSN\social_stream-beta\. Nie edytuj wewnątrz ZIP-a. Nie trzeba ponownie instalować SSN.
  3. Znajdź plik nakładki (zobacz tabelę powyżej). Zrób kopię obok oryginału, np. poll.html → my-poll.html. Dla motywu takiego jak themes/featured-styles/featured-modern.html, trzymaj kopię w tym samym folderze.
  4. Otwórz kopię w edytorze tekstu lub kodu. Zapisz jako .html, nie .html.txt.
Zachowaj cały rozpakowany folder. Jeden plik HTML może ładować skrypty, style, czcionki, obrazy, dźwięk i dane z sąsiednich folderów. Przeniesienie strony psuje te odwołania. Widok strony GitHub ani „Zapisz stronę” w przeglądarce nie pobierze wszystkiego.
Jak wygląda folder i jak działają ścieżki
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

Ścieżka taka jak ../../shared/utils/chatHtml.js jest względna wobec strony, która ją ładuje. Przeniesienie strony do katalogu głównego psuje ścieżkę. Skopiuj też własne grafiki i czcionki do folderu i używaj ścieżek względnych. Edytowana kopia nie otrzyma automatycznie przyszłych poprawek SSN.

Zachowaj link sesji

Uruchom SSN, podłącz źródło i sprawdź działanie oryginalnej nakładki. Następnie skopiuj pełny link z narzędzia SSN dla tej nakładki.

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

Wartość po session= to Twoja sesja SSN. Nie jest to kanał YouTube, nazwa Twitch, nazwa pliku ani tytuł ankiety. SSN i strona muszą mieć tę samą sesję i hasło. Pozostaw SSN uruchomione: nakładki tylko odbierają dane. Same nie przechwytują czatu.

ZasadaDlaczego
? rozpoczyna ustawienia, & łączy pozostałeKopiuj, nie przepisuj. W atrybucie HTML zapisz &. W przeglądarce lub polu URL OBS użyj zwykłego &.
Zachowaj ustawienia serweraserver, server2, server3, lokalne adresy usług, etykiety i wersje różnią się między stronami. Nie dodawaj parametru serwera tylko dlatego, że używa go inna nakładka.
Zachowaj wszystko po #To może mieć znaczenie. AI Event Overlay używa na przykład prywatnego #aieventauth=... .
Używaj wartości zastępczych przy udostępnianiuNie umieszczaj prawdziwej sesji, hasła ani prywatnych tokenów na zrzutach, w repozytoriach i promptach AI.

Jeśli kopia jest pusta, najpierw sprawdź oryginalny link. Niektóre strony pytają o brakujące ustawienia, inne pozostają ukryte lub przekierowują. Właściwa sesja w linku eliminuje zgadywanie.

Otwórz plik w OBS

Otwórz edytowany plik prosto z komputera. Serwer nie jest potrzebny.

  1. Przeciągnij kopię HTML do Chrome lub Edge. Skopiuj adres. Zaczyna się od file:///.
  2. Z działającego linku nakładki SSN skopiuj wszystko od ? . Wklej na końcu adresu pliku. Zachowuje to sesję, hasło, ustawienia i wszelkie # .
  3. Otwórz połączony adres w przeglądarce, aby przetestować.
  4. W OBS dodaj Źródło przeglądarki. Pozostaw Plik lokalny odznaczone. Wklej pełny adres do URL i ustaw szerokość oraz wysokość.

Przykład: ten link SSN…

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

…staje się tym dla pobranej kopii ankiety w Windows:

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

Na macOS zaczyna się od file:///Users/..., na Linuksie zwykle file:///home/.... Kopiowanie z przeglądarki obsługuje za Ciebie spacje i ukośniki.

Warto wiedziećSzczegóły
Konfigurujesz to tylko razOBS zapisuje adres. Zostaw folder na miejscu i utrzymuj SSN oraz źródło czatu uruchomione.
Zmiana zapisana?Kliknij Odśwież pamięć podręczną bieżącej strony we właściwościach źródłowych.
Dlaczego pozostawić plik lokalny niezaznaczony?Pole URL pozwala dodać ?session=.... Wybranie pliku przez Plik lokalny nie dodaje tych ustawień.
Opcjonalnie: użyj pola wyboru Plik lokalny w programie uruchamiającym

Selektor pliku w OBS wybiera plik, ale nie dodaje ustawień. Mała strona startowa może otworzyć edytowaną stronę z dołączonymi ustawieniami:

  1. Zapisz poniższy kod jako launch-my-poll.html obok my-poll.html.
  2. Zastąp link zastępczy pełnym skopiowanym linkiem SSN. Zmień ./my-poll.html na nazwę swojego pliku. Zachowaj link w cudzysłowie, ze zwykłym & znaki.
  3. Kliknij dwukrotnie plik startowy, aby przetestować. W OBS zaznacz Plik lokalny i wybierz program uruchamiający. Przekieruje do nakładki z ustawieniami i tokenem # .
<!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>

Dla motywu w podfolderze umieść plik startowy obok kopii motywu. Zachowaj go prywatnie, bo zawiera link połączenia. Samodzielny eksport z gotowymi ustawieniami ma własne instrukcje.

OBS opisuje tryby pliku/URL, rozmiary, własny CSS i odświeżanie w Odniesienie do źródła przeglądarki.

Zmień projekt lub poproś o to AI

Chcę…Zrób to
Zmień tylko CSSZachowaj hostowany link i użyj w OBS Własny CSS . Wpływa to tylko na to źródło OBS, nie zwykłą przeglądarkę.
Zmień wygląd mojej edytowanej kopii HTMLDodaj swoje style po istniejących lub podłącz po nich lokalny arkusz stylów.
Użyj &css= lub &b64css=Obsługują to tylko niektóre strony. poll.htmlna przykład nie odczytuje żadnego z nich. Najpierw sprawdź kod strony.
Zmień układ HTMLZachowaj identyfikatory i klasy używane przez skrypty. Jeśli skrypt przebudowuje element przy każdej aktualizacji, umieść stałą grafikę poza nim lub dodaj ją do renderera.
Edytuj współdzielony arkusz stylów lub skryptSkopiuj go i skieruj stronę na kopię, aby zmienić tylko Twój projekt.

Przygotuj logo, pliki czcionek, kolory marki, rozmiar płótna i wzór wizualny. Strona internetowa zwykle nie może ładować czcionek ani obrazów z dysku innego komputera.

Podpowiedź AI

Użyj promptu dla danego typu z jego poradnika projektu lub zacznij od tego. Daj AI skopiowany plik oraz ładowane style i skrypty.

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.
Nie akceptuj pozornego rozwiązania. Projekt działający tylko ze sztywno wpisanymi przykładami nie jest gotowy. Zachowaj oryginalny plik i porównaj oba z tymi samymi danymi testowymi.

Nie pozwól, by przychodzący czat stał się kodem

Nazwy, wiadomości, tytuły, kwoty i linki pochodzą od widzów i zewnętrznych usług. Traktuj je jako tekst, nigdy kod. Oczyszczaj tam, gdzie renderer wstawia je na stronę.

PoleJak wyświetlić
chatmessage z textonly trueZwykły tekst (textContent).
chatmessage w przeciwnym razieMoże zawierać emotki i dozwolone formatowanie. Użyj dołączonego mechanizmu oczyszczania.
Nazwy, kwoty, tytuły i inne pola tekstoweZwykły tekst (textContent).
chatimg, contentimg, linkiAdresy URL, nie HTML. Sprawdź je według istniejących reguł strony dla mediów/linków, a następnie ustaw właściwości 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>
  • Jeśli strona ma już mechanizm oczyszczania, zachowaj go. Nie dodawaj drugiego.
  • Dla plików w podfolderach popraw ścieżki skryptów.
  • Nie wklejaj surowych nazw do ciągów atrybutów ani surowych kolorów do znaczników stylów. Sprawdzaj wartości stylu przed ustawianiem każdej właściwości osobno.
  • Nawet oczyszczonego HTML nie można bezpiecznie uruchamiać jako JavaScript ani traktować jako instrukcji dla AI.

Więcej informacji: Poradnik OWASP o bezpiecznych miejscach zapisu i oczyszczaniu HTML.

Jak bezpiecznie testować renderer

Uruchamiaj je w prywatnym lokalnym podglądzie, nie na publicznym czacie.

  • Użyj nazwy takiej jak Guest <b>One</b>. Nawiasy powinny pojawić się jako tekst.
  • Wyślij chatmessage: "<b>Hello</b>" z textonly: true, potem false. Jeden wariant powinien pokazać znaczniki jako tekst, drugi tekst pogrubiony.
  • Sprawdź, czy obsługiwana emotka i wiadomość z samym obrazem nadal działają.
  • Poproś AI o sprawdzenie nieszkodliwej próby, np. <img src=x onerror="window.__ssnInjectionProbe=1">. Nie może się wykonać, ustawić znacznika ani pozostawić atrybutów zdarzeń. Przetestuj też link ze schematem skryptowym.

Udana próba obejmuje tylko sprawdzone ścieżki. Skup się na rendererach i polach zmienionych przez projekt.

Testuj po jednej części

TestJak
UkładUżyj trybu podglądu/demo strony, jeśli istnieje, lub wymyślonych lokalnych przykładów. Sprawdź długie nazwy i wiadomości, brak awatarów, puste dane i oczekiwaną liczbę wierszy.
Dostarczanie przez SSNPozostaw SSN włączone i użyj Utwórz wiadomość testową (Create Test Message) z tą samą sesją. Zwykły tryb API rozszerzenia wymaga zdalne sterowanie rozszerzeniem przez API włączone. Użyj konfiguracji testowej: wiadomości testowe mogą uruchomić automatyzacje.
Rzeczywisty wyzwalaczWyróżnij wiadomość Docka dla karty, zagłosuj w ankiecie, wybierz zwycięzcę losowania, zmień tekst paska lub uruchom timer. Zwykły czat nie testuje wszystkiego.
Rzeczywiste przechwytywanieSprawdź, czy prawdziwa wiadomość lub zdarzenie dociera do oryginału i kopii. Sztuczne zdarzenie potwierdza tylko działanie wyświetlania.
OBSSprawdź końcowy rozmiar, przezroczystość, animacje, dźwięk, czcionki i warstwy. Wypróbuj pokazywanie/ukrywanie, czyszczenie/resetowanie i odświeżenie. OBS i przeglądarka nie współdzielą logowania ani zapisanych danych.
Odświeżenie może utracić dane. Niektóre strony przechowują dane w pamięci. Sprawdź poradnik danego typu przed włączeniem automatycznego odświeżania lub wyłączania po ukryciu. Usuń demo lub preview z linku, zanim oczekujesz danych na żywo.

Pliki do przekazania AI

Daj AI plik nakładki, ładowane przez niego CSS/JS oraz te pliki. Sam opis zdarzeń nie wyjaśnia kontrolek ankiety ani kodu układu każdej nakładki.

PlikDo czego służy
docs/event-reference.htmlOficjalne pola, nazwane zdarzenia, metadane, multimedia i wartości wpłat.
docs/customoverlays.mdWłasne odbiorniki i przykłady połączeń.
Zgodność zdarzeń i alertówJakie zdarzenia i pola wysyła każde źródło.
Przewodnik po wiadomościach testowych i createtestmessage.htmlPrzykładowe dane i tryby dostarczania.
libs/objects.js i shared/utils/chatHtml.jsDołączony mechanizm oczyszczania treści do wyświetlenia.
shared/utils/chatBadges.js i shared/utils/contentImage.jsIstniejąca obsługa odznak i obrazów.
js/transport-dedupe.js, js/local-server-url.js, shared/overlay-control-transport.jsIstniejąca obsługa połączeń, gdy strona je ładuje.
currency.jsPozostaw hasDonation do wyświetlania i użyj poprawnej liczbowej wartości USD donoValue, w tym zero.
Event Flow i Polecenia i APIWykorzystaj istniejące kontrolki, gdy projekt potrzebuje wyzwalacza.

Rozwiązywanie problemów

ProblemSpróbuj tego
Nie znaleziono plikuPrzeciągnij HTML ponownie do przeglądarki i skopiuj adres. Sprawdź, czy nazwa kończy się na .html, nie .html.txt.
Brakujący skrypt, czcionka lub obrazZachowaj rozpakowany folder bez zmian, z kopią obok oryginału. Sprawdź, czy dodane grafiki i czcionki są tam, gdzie oczekuje ich strona.
Pusty ekran lub „oczekiwanie”Sprawdź sesję, hasło, pełne ? i # , czy SSN działa, funkcja jest włączona i docierają właściwe dane. Porównaj z oryginalnym linkiem SSN.
Wygląda inaczej w OBS niż w przeglądarceSprawdź szerokość/wysokość, stary własny CSS, czcionki, pamięć podręczną i pamięć przeglądarki. Odśwież po zapisaniu.
Logo znika po aktualizacjiSkrypt może przebudowywać swój kontener. Umieść stałe dekoracje poza nim lub zmień szablon renderowania.
Dane się resetują lub działania wykonują dwukrotnieSprawdź ustawienia odświeżania i zamykania, zdublowane kopie nakładki lub kontrolek oraz obsługę duplikatów i stanu na stronie.
Przypadek szczególny: strony czytające oddzielne pliki danych

Mapa ładuje lokalne pliki JSON przez fetch(), co przeglądarki mogą blokować przy otwieraniu z dysku. Do prostej zmiany wyglądu mapy użyj hostowanego linku i własnego CSS w OBS. Przy edytowanej kopii poproś AI o osadzenie danych mapy w stronie, aby otwierała się z dysku. Hosting to zaawansowana opcja dla stron, które naprawdę go wymagają, nie zwykły etap.

Najpierw napraw najmniejszy potwierdzony problem. Zmiana wyglądu nie powinna wymagać zmian skryptów przechwytywania ani nowych pól zdarzeń. Udostępniając publiczny fork, dołącz zasoby, ale pomiń prywatne pliki startowe.