五步製作自己的疊加層
- 選擇疊加層 中要修改的內容。
- 下載來源ZIP,解壓縮後複製對應疊加層的 HTML 檔案。
- 編輯副本 ,可以自己做,也可以請 AI 工具完成。
- 在 OBS 開啟副本 ,在位址中加入 SSN 工作階段設定。
- 測試 ,使用疊加層的真實觸發操作。
選擇要修改的疊加層
你可以修改疊加層的顏色、字型、版面、圖案和動畫。 HTML 文件 是頁面。 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.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 | 遊戲特定的聊天、禮物和命令 |
| 產生的 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 屬性中應寫為 &。在瀏覽器或 OBS URL 欄中,使用一般的 &. |
| 保留伺服器設定 | server, server2, server3、本機端點、標籤和版本值因頁面而異。不要因為其他疊加層使用某個伺服器參數就把它加上。 |
保留以下位置之後的所有內容: # | 可能有影響。例如 AI Event Overlay 使用私密的 #aieventauth=... 權杖。 |
| 分享時使用預留值 | 不要在螢幕擷取畫面、程式碼庫或 AI 提示詞中洩露真實工作階段、密碼和私密權杖。 |
副本一直空白時先檢查原始連結。有的頁面會詢問缺少的設定,有的會保持隱藏或重新導向。把正確工作階段寫進連結可避免猜測。
在 OBS 開啟檔案
直接從電腦開啟編輯後的檔案,不需要伺服器。
- 將 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=...。透過「本機檔案」選取檔案不會加入這些設定。 |
可選:使用帶有啟動器的本機檔案複選框
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 和重新整理說明見其 瀏覽器原始碼參考.
修改設計,或請 AI
| 我想要… | 執行操作 |
|---|---|
| 僅修改 CSS | 保留託管連結,使用 OBS 的 自訂 CSS 欄中。僅影響該 OBS 來源,不影響一般瀏覽器。 |
| 重新設計編輯後的 HTML 副本 | 把樣式加在現有樣式之後,或在其後引入本機樣式表。 |
使用 &css= 或 &b64css= | 只有部分頁面支援。 poll.html等頁面兩者都不讀取。請先查看頁面程式碼。 |
| 修改 HTML 版面配置 | 保留指令碼使用的 ID 和類別名稱。如果指令碼每次更新都重建元素,請將固定圖案放在元素外,或加入轉譯器。 |
| 編輯共用樣式表或指令碼 | 複製檔案並讓頁面引用副本,確保僅影響自己的設計。 |
準備好標誌、字型檔案、品牌顏色、畫布尺寸和視覺參考。網頁通常無法載入另一台電腦磁碟上的字型或圖片。
AI提示
使用各設計指南中的專用提示詞,或從此提示詞開始。把副本及它載入的樣式和指令碼交給 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 執行或作為 AI 指令。
更多背景: OWASP 關於安全輸出位置與 HTML 清理的指南.
如何安全測試轉譯器
在私密的本機預覽中執行,不要發到公開聊天。
- 使用類似這樣的名稱:
Guest <b>One</b>。角括號應作為文字顯示。 - 傳送
chatmessage: "<b>Hello</b>"帶有textonly: true,再改為 false。一種應將標籤顯示為文字,另一種應顯示粗體文字。 - 確認支援的表情和純圖片訊息仍能正常顯示。
- 請 AI 測試無害的探測內容,例如
<img src=x onerror="window.__ssnInjectionProbe=1">。它不應執行、設定標記或留下事件屬性。也請測試使用指令碼協定的連結。
測試通過僅涵蓋已測試的路徑。重點檢查設計變更涉及的轉譯器和欄位。
逐項測試
| 測試 | 方法 |
|---|---|
| 版面配置 | 頁面有預覽/示範模式時請使用,否則使用虛構的本機樣本。測試長名稱和長訊息、缺少頭像、空資料及預期列數。 |
| SSN 資料傳遞 | 保持 SSN 執行,並使用 建立測試訊息 ,使用相同工作階段。通常的 Extension API 模式需要 擴充功能的遠端 API 控制 開啟。請使用測試環境,因為測試訊息可能觸發自動化。 |
| 真實觸發操作 | 從 Dock 精選訊息來顯示卡片、參與投票、抽出得獎者、更改跑馬燈文字或啟動計時器。一般聊天不能測試所有功能。 |
| 真實擷取 | 檢查真實訊息或事件是否同時到達原版和副本。模擬事件只能證明顯示功能正常。 |
| OBS | 檢查最終尺寸、透明度、動畫、聲音、字型和層次。試試顯示/隱藏、清除/重設和重新整理。OBS 與瀏覽器不共用登入狀態或儲存的資料。 |
demo 或 preview ,從連結中移除後再檢查即時資料。需要交給 AI 的檔案
把疊加層本身的檔案、載入的 CSS/JS,以及以下檔案交給 AI。單靠事件參考無法解釋投票控制項或各疊加層的版面程式碼。
| 文件 | 用途 |
|---|---|
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 | 設計需要觸發操作時,重用現有控制項。 |
解決問題
| 問題 | 試試這個 |
|---|---|
| 找不到文件 | 重新把 HTML 拖進瀏覽器並複製位址。確認檔案名稱以 .html 結尾,而不是 .html.txt。 |
| 缺少腳本、字體或圖像 | 保持解壓縮後的資料夾結構,把副本放在原檔旁。檢查新增圖片和字型是否位於頁面預期的位置。 |
| 顯示空白或「等待中」 | 檢查工作階段、密碼、完整的 ? 和 # 部分,確認 SSN 正在執行、功能已開啟、正確輸入正在到達。與原 SSN 連結對照。 |
| OBS 中的外觀與瀏覽器不同 | 檢查寬高、舊自訂 CSS、字型、快取和瀏覽器儲存空間,儲存後重新整理。 |
| 更新後標誌消失 | 指令碼可能正在重建容器。請把固定裝飾放在容器外,或修改轉譯範本。 |
| 資料重設或操作執行兩次 | 檢查重新整理/卸載設定、是否開啟了重複的疊加層或控制頁,以及頁面本身的去重和狀態處理。 |
特殊情況:讀取單獨資料檔案的頁面
地圖透過以下方式載入本機 JSON 檔案: fetch()載入,直接從磁碟開啟時可能被瀏覽器攔截。只修改地圖樣式時,請用託管連結和 OBS 自訂 CSS;編輯副本時,可讓 AI 將地圖資料嵌入頁面,以便從磁碟開啟。託管是確實需要它的頁面的進階選項,不是一般步驟。
先修復已確認的最小問題。改變樣式不應需要修改擷取指令碼或加入事件欄位。分享公開分支時應包含素材,排除含私密連結的啟動頁。