5 adımda kendi katmanınızı yapın
- Katmanı seçin değiştirmek istediğiniz.
- Kaynak ZIP'i indirin, ZIP'i çıkarın ve katmanın HTML dosyasını kopyalayın.
- Kopyayı düzenleyin kendiniz veya bir AI aracından isteyerek.
- Kopyanızı OBS'de açın adresine SSN oturum ayarlarını ekleyerek.
- Test edin katmanın gerçek tetikleyicisiyle.
Değiştirilecek katmanı seçin
Katmanın renklerini, yazı tiplerini, yerleşimini, görsellerini ve hareketini değiştirebilirsiniz. Şu araç: HTML dosyası sayfanın kendisidir. Şu dosya: OBS URL'si ona yönlenir ve oturum ile görüntüleme ayarlarınızı ekler.

Her katman türü farklı girdileri dinler. Sohbet, öne çıkan mesaj ve anket aynı girdiyi kullanmaz. Kullandığınız türün tasarım rehberini açın:
| Tasarım kılavuzu | Dosyalar başlatılıyor | Onu yönlendiren şey nedir? |
|---|---|---|
| Sohbet ve Dock | sampleoverlay.html, dock.html, themes/* | Yakalanan her sohbet mesajı |
| Öne çıkan mesajlar | featured.html, samplefeatured.html, themes/featured-styles/* | Seçilen mesajlar ve komutları temizle |
| Uyarılar ve olay akışları | multi-alerts.html, events.html, themes/events/index.html | Eşleşen etkinlikler / ücretli sohbet satırları |
| Grafiksel anketler | poll.html | Oylar artı toplantı sahibi anket ayarları |
| Bahşiş kavanozları ve kaleler | tipjar.html | Yapılandırılmış destek/sayım/Heyecan metriği |
| Sayaçlar ve sıralamalar | hype.html, meta.html, leaderboard.html, scoreboard.html | Sayımlar, meta veriler, etkinlik veya nokta anlık görüntüleri |
| Bekleme listeleri ve sıra çekilişleri | waitlist.html | Toplantı sahibi kuyruğu ve kazanan durumu |
| Hediye vitrinleri | giveaway.html, giveaway-obs-entries.html | Yönetilen hediye durumu veya eski giriş feed'i |
| Zamanlayıcılar | timer.html | Zamanlayıcı durumu ve kontrolleri |
| Ticker'lar | ticker.html | Yapılandırılmış kayan yazı içeriği |
| Kelime bulutları ve haritalar | wordcloud.html, map.html | Eşleşen kelimeler veya konum girişleri |
| Tepkiler ve medya etkileri | reactions.html, emotes.html, content.html, gif.html, confetti.html, stickers.html, actions.html | Sayfaya özel medya/olay/eylem tetikleyicisi |
| Jenerik | credits.html | Toplanan katılımcılar ve kredi kontrolleri |
| Müzik ve AI ekranları | spotify-overlay.html, cohost-overlay.html, bot.html, chatbot.html | Şu anda oynatılan veya bot/cohost güncellemeleri |
| Ürünler ve panolar | monetization.html, commerce-board.html, shop_the_stream.html | Paylaşılan ticaret durumu |
| Oyunlar ve ödüller | games/*, games/templates/*, games.html, battle.html | Oyuna özel sohbet, hediyeler ve komutlar |
| Oluşturulan yapay zeka katmanları | aioverlay.html, aievent-overlay.html | Kaydedilen tasarımlar ve bunların yapılandırılmış olay rotası |
Hazır bir şey mi istiyorsunuz? Şunu deneyin: Katman galerisi veya Şablon Galerisi. StreamElements veya Streamlabs sohbet görünümü mü taşıyorsunuz? Şu rehberi izleyin: içe aktarma kılavuzu. Bu dışa aktarımın kendi kurulum adımları vardır.
Dosyaları indirin
- Beta kaynak ZIP dosyasını indirin. Veya şunu açın: beta deposu ve şunu seçin: Kod → ZIP'i İndir.
- Saklayacağınız klasöre çıkarın; örneğin
C:\SSN\social_stream-beta\. ZIP'in içinde düzenlemeyin. SSN'yi yeniden kurmanız gerekmez. - Katman dosyasını yukarıdaki tablodan bulun. Orijinalin yanına kopya oluşturun; örneğin
poll.html→my-poll.html. Şu tür bir tema için:themes/featured-styles/featured-modern.html, kopyayı aynı klasörde tutun. - Kopyayı metin veya kod düzenleyicide açın. Şu adla kaydedin:
.html, değil.html.txt.
Klasör düzeni ve yolların işleyişi
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
Şu tür bir yol: ../../shared/utils/chatHtml.js yükleyen sayfaya görelidir. Sayfayı köke taşımak yolu bozar. Kendi görsel ve yazı tiplerini de klasöre kopyalayıp göreli yollar kullanın. Düzenlediğiniz kopya gelecekteki SSN düzeltmelerini otomatik almaz.
Oturum bağlantısını koruyun
SSN'yi başlatın, kaynak bağlayın ve orijinal katmanı kontrol edin. Ardından şunu kopyalayın: tam bağlantı o katmanın SSN aracından.
https://socialstream.ninja/poll.html?session=YOUR_SESSION&password=YOUR_PASSWORD&server2
Şundan sonraki değer: session= SSN oturumunuzdur; YouTube kanalınız, Twitch adınız, dosya adınız veya anket başlığı değildir. SSN ve sayfa aynı oturum ve parolayı kullanmalıdır. SSN açık kalmalıdır; katmanlar yalnızca veri alır, sohbet yakalamaz.
| Kural | Neden? |
|---|---|
? ayarları başlatır, & kalanları birleştirir | Yeniden yazmayın, kopyalayın. HTML özniteliğinin içinde şunu yazın: &. Tarayıcıda veya OBS URL kutusunda düz &. |
| Sunucu ayarlarını koruyun | server, server2, server3, yerel uç noktalar, etiketler ve sürüm değerleri sayfaya göre değişir. Başka bir katman kullanıyor diye sunucu bayrağı eklemeyin. |
Şundan sonraki her şeyi koruyun: # | Önemli olabilir. Örneğin AI Event Overlay özel bir #aieventauth=... tokenı. |
| Paylaşırken yer tutucu kullanın | Gerçek oturum, parola ve özel tokenları ekran görüntülerine, depolara veya AI istemlerine koymayın. |
Kopyanız boşsa önce orijinal bağlantıyı kontrol edin. Bazı sayfalar eksik ayarları sorar, bazıları gizli kalır veya yönlendirir. Bağlantıya doğru oturumu koymak tahmin etmeyi önler.
Dosyanızı OBS'de açın
Düzenlenmiş dosyayı bilgisayardan doğrudan açın. Sunucu gerekmez.
- HTML kopyanızı Chrome veya Edge'e sürükleyip adresi kopyalayın. Şununla başlar:
file:///. - Çalışan SSN katman bağlantısından şuradan itibaren her şeyi kopyalayın:
?itibaren. Dosya adresinin sonuna yapıştırın. Oturum, parola, ayarlar ve varsa#bölümü. - Birleştirilmiş adresi tarayıcıda açıp test edin.
- OBS'de şunu ekleyin: Tarayıcı Kaynağı. Şunu bırakın: Yerel dosya işaretini kaldırın. Tam adresi şuraya yapıştırın: URL ve genişlik ile yüksekliği ayarlayın.
Örnek: bu SSN bağlantısı…
https://socialstream.ninja/poll.html?session=YOUR_SESSION&password=YOUR_PASSWORD&server2
…Windows'a indirilen anket kopyası için şu olur:
file:///C:/SSN/social_stream-beta/my-poll.html?session=YOUR_SESSION&password=YOUR_PASSWORD&server2
macOS'ta şununla başlar: file:///Users/..., Linux'ta genellikle file:///home/.... Tarayıcıdan kopyalamak boşluk ve eğik çizgileri sizin için düzenler.
| Bilmeniz gerekenler | Ayrıntılar |
|---|---|
| Yalnızca bir kez kurarsınız | OBS adresi kaydeder. Klasörü yerinde bırakın, SSN'yi ve sohbet kaynağını açık tutun. |
| Değişikliği kaydettiniz mi? | Tıklayın: Geçerli sayfanın önbelleğini yenile . |
| Yerel dosyayı neden işaretlenmemiş olarak bırakmalısınız? | URL kutusu şunu eklemenize izin verir: ?session=.... Local file ile dosya seçmek bu ayarları eklemez. |
İsteğe bağlı: Başlatıcıyla Yerel dosya onay kutusunu kullanın
OBS dosya seçicisi dosyayı seçer ama ayarları ekleyemez. Küçük bir başlatıcı sayfa, düzenlenmiş sayfanızı ayarlarıyla açabilir:
- Aşağıdaki kodu şu adla kaydedin:
launch-my-poll.htmlyanınamy-poll.html. - Yer tutucu bağlantıyı kopyaladığınız tam SSN bağlantısıyla değiştirin. Şunu değiştirin:
./my-poll.htmlkendi dosya adınıza. Bağlantıyı tırnak içinde tutup düz&karakterleri. - Başlatıcıyı çift tıklayarak test edin. OBS'de şunu işaretleyin: Yerel dosya ve şunu seçin: başlatıcı. Ayarlar ve şu değerle katmanınıza yönlendirir:
#bölümü.
<!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>
Tema alt klasördeyse başlatıcıyı tema kopyasının yanına koyun. Bağlantınızı içerdiği için başlatıcıyı gizli tutun. Ayarlarını içinde taşıyan bağımsız dışa aktarımlar kendi talimatlarını izler.
OBS dosya/URL modlarını, boyutları, Özel CSS'yi ve yenilemeyi şu belgesinde açıklar: Tarayıcı Kaynağı referansı.
Tasarımı değiştirin veya AI'dan isteyin
| Şunu yapmak istiyorum… | Yapılacak işlem |
|---|---|
| Yalnızca CSS değiştirin | Barındırılan bağlantıyı koruyup OBS'deki Özel CSS kutusu. Yalnızca o OBS kaynağını etkiler, normal tarayıcıyı değil. |
| Düzenlenmiş HTML kopyamın görünümünü değiştir | Stillerinizi mevcut stillerin sonuna ekleyin veya yerel stil dosyasını onların ardından bağlayın. |
Kullanın: &css= veya &b64css= | Yalnızca bazı sayfalar destekler. poll.htmlörneğin ikisini de okumaz. Önce sayfanın kodunu kontrol edin. |
| HTML yerleşimini değiştirin | Betiklerin kullandığı ID ve sınıfları koruyun. Betik her güncellemede öğeyi yeniden kuruyorsa kalıcı görseli dışına koyun veya çizim işlevine ekleyin. |
| Ortak stil dosyasını veya betiği düzenlemek | Kopyalayın ve sayfanızı kopyaya yönlendirin; yalnızca sizin tasarımınız değişsin. |
Logonuzu, yazı tipi dosyalarını, marka renklerini, tuval boyutunu ve görsel referansı hazırlayın. Web sayfası genellikle başka bilgisayarın diskindeki yazı tipi veya görseli yükleyemez.
AI istemi
Her tasarım rehberindeki türe özel istemi kullanın veya bununla başlayın. AI'ya kopya dosyayı ve yüklediği stil ile betikleri verin.
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.
Gelen sohbetin koda dönüşmesini önleyin
Adlar, mesajlar, başlıklar, tutarlar ve bağlantılar izleyicilerden ve dış hizmetlerden gelir. Bunları kod değil metin olarak ele alın. Çizim işlevinin sayfaya koyduğu yerde temizleyin.
| Alan | Nasıl gösterilir |
|---|---|
chatmessage şununla: textonly true | Düz metin (textContent). |
chatmessage aksi halde | İfadeler ve izin verilen biçimlendirme içerebilir. Paketle gelen temizleyiciyi kullanın. |
| Adlar, tutarlar, başlıklar ve diğer düz alanlar | Düz metin (textContent). |
chatimg, contentimg, bağlantılar | HTML değil URL'dir. Sayfanın mevcut medya/bağlantı kurallarıyla kontrol edip DOM özelliklerini ayarlayın. |
<!-- 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>
- Sayfada zaten bir temizleyici varsa koruyun. İkincisini eklemeyin.
- Alt klasörlerdeki dosyalar için betik yollarını düzeltin.
- Ham adları öznitelik dizelerine veya ham renkleri stil işaretlemesine yapıştırmayın. Stil değerlerini doğrulayın, sonra özellikleri tek tek ayarlayın.
- Temizlenmiş HTML bile JavaScript olarak çalıştırmak veya AI talimatı olarak kullanmak için güvenli değildir.
Ek bilgi: OWASP güvenli çıktı noktaları ve HTML temizleme rehberi.
Çizim işlevi güvenle nasıl test edilir
Bunları halka açık sohbette değil özel yerel önizlemede çalıştırın.
- Şu tür bir ad kullanın:
Guest <b>One</b>. Köşeli işaretler metin olarak görünmelidir. - Gönder
chatmessage: "<b>Hello</b>"şununla:textonly: true, sonra false. Birinde etiketler düz metin, diğerinde kalın yazı görünmelidir. - Desteklenen bir ifadenin ve yalnızca görsel içeren mesajın hâlâ çalıştığını kontrol edin.
- AI'nın şu tür zararsız bir deneme yapmasını sağlayın:
<img src=x onerror="window.__ssnInjectionProbe=1">. Çalışmamalı, test işaretini ayarlamamalı veya olay öznitelikleri bırakmamalıdır. Script şemalı bağlantıyı da deneyin.
Başarılı bir deneme yalnızca test edilen yolları kapsar. Tasarımınızın değiştirdiği çizim işlevlerine ve alanlara odaklanın.
Parça parça test edin
| Test | Nasıl |
|---|---|
| Yerleşim | Varsa sayfanın preview/demo modunu, yoksa uydurma yerel örnekleri kullanın. Uzun adları ve mesajları, eksik avatarları, boş verileri ve beklenen satır sayısını deneyin. |
| SSN teslimatı | SSN'yi açık tutup şunu kullanın: Test Mesajı Oluştur aynı oturumla. Normal Extension API modu şunu gerektirir: uzantının uzaktan API kontrolü açık olsun. Test ortamı kullanın; test mesajları otomasyonlarınızı tetikleyebilir. |
| Gerçek tetikleyici | Dock'tan mesaj öne çıkarın, ankette oy verin, çekiliş kazananı seçin, kayan yazıyı değiştirin veya zamanlayıcı başlatın. Düz sohbet her şeyi test etmez. |
| Gerçek yakalama | Gerçek mesaj veya olayın hem orijinale hem kopyanıza ulaştığını kontrol edin. Sahte olay yalnızca görüntülemenin çalıştığını gösterir. |
| OBS | Son boyutu, şeffaflığı, animasyonları, sesi, yazı tiplerini ve katman sırasını kontrol edin. Göster/gizle, temizle/sıfırla ve yenilemeyi deneyin. OBS ile tarayıcı girişleri veya kayıtlı verileri paylaşmaz. |
demo veya preview canlı veri beklemeden önce bağlantıdan.AI'ya verilecek dosyalar
AI'ya katmanın dosyasını, yüklediği CSS/JS'yi ve bunları verin. Olay referansı tek başına anket kontrollerini veya her katmanın yerleşim kodunu açıklamaz.
| Dosya | Ne için |
|---|---|
docs/event-reference.html | Resmî alanlar, adlandırılmış olaylar, metaveri, medya ve bağış değerleri. |
docs/customoverlays.md | Özel alıcılar ve bağlantı örnekleri. |
| Olaylar ve Uyarı Uyumluluğu | Her kaynağın gönderdiği olaylar ve alanlar. |
Test mesajı kılavuzu ve createtestmessage.html | Örnek veriler ve teslimat modları. |
libs/objects.js ve shared/utils/chatHtml.js | Paketle gelen görüntüleme temizleyicisi. |
shared/utils/chatBadges.js ve shared/utils/contentImage.js | Mevcut rozet ve görsel işleme. |
js/transport-dedupe.js, js/local-server-url.js, shared/overlay-control-transport.js | Sayfanız yüklediğinde mevcut bağlantı desteği. |
currency.js | Şunu bırakın: hasDonation görüntüleme için, geçerli sayısal USD değeri olarak da donoValue, sıfır dahil. |
| Etkinlik Akışı ve Komutlar ve API | Tasarım tetikleyici gerektiriyorsa mevcut kontrolleri yeniden kullanın. |
Sorunları giderme
| Sorun | Şunu deneyin |
|---|---|
| Dosya bulunamadı | HTML'yi tarayıcıya yeniden sürükleyip adresi kopyalayın. Adın .html ile bittiğini, .html.txt olmadığını kontrol edin. |
| Eksik komut dosyası, yazı tipi veya resim | Çıkardığınız klasörü olduğu gibi, kopyayı orijinalin yanında tutun. Eklenen görseller ve yazı tipleri sayfanın beklediği yerde olmalıdır. |
| Boş veya “bekleniyor” ekranı | Oturumu, parolayı ve tam ? ve # bölümlerini, SSN'nin çalıştığını, özelliğin açık olduğunu ve doğru girdinin geldiğini kontrol edin. Orijinal SSN bağlantısıyla karşılaştırın. |
| OBS'de tarayıcıdan farklı görünüyor | Genişlik/yükseklik, eski Özel CSS, yazı tipleri, önbellek ve tarayıcı depolamasını kontrol edin. Kaydettikten sonra yenileyin. |
| Logo güncellemede kayboluyor | Betik kapsayıcıyı yeniden oluşturuyor olabilir. Kalıcı süslemeyi dışına koyun veya çizim şablonunu güncelleyin. |
| Veriler sıfırlanıyor veya işlemler iki kez oluyor | Yenileme/kapatma ayarlarını, katman veya kontrollerin yinelenen kopyalarını ve sayfanın tekrar/durum yönetimini kontrol edin. |
Özel durum: ayrı veri dosyalarını okuyan sayfalar
Harita yerel JSON dosyalarını şununla yükler: fetch(); diskten açarken tarayıcı bunu engelleyebilir. Yalnızca harita stilini değiştirmek için barındırılan bağlantı ve OBS Özel CSS kullanın. Düzenlenmiş kopyada, diskten açılabilmesi için AI'dan harita verisini sayfaya gömmesini isteyin. Barındırma, gerçekten gereken sayfalar için ileri bir seçenektir; sıradan bir adım değildir.
Önce doğrulanmış en küçük sorunu düzeltin. Görünüm değişikliği yakalama betikleri veya yeni olay alanları gerektirmemelidir. Açık bir çatal paylaşırsanız varlıkları ekleyin, özel başlatıcıları dışarıda bırakın.