5手順で独自のオーバーレイを作る
- 対象のオーバーレイを選ぶ のうち変更したいもの。
- ソースZIPをダウンロードするをダウンロードして展開し、対象オーバーレイのHTMLファイルをコピーします。
- コピーを編集する は自分で行うか、AIツールに依頼します。
- コピーをOBSで開く のアドレスにSSNのセッション設定を追加します。
- 試す を、そのオーバーレイの実際のトリガーで確認します。
変更するオーバーレイを選ぶ
オーバーレイの色、フォント、配置、画像、動きを変えられます。 HTMLファイル がページです。 OBS URL はそのファイルを指し、セッションと表示設定を追加します。

オーバーレイの種類によって受け取る入力は異なります。チャット、選択メッセージ、投票のページは同じ入力を使いません。使う種類のデザインガイドを開いてください:
| デザインガイド | 起動ファイル | 何がそれを動かすのか |
|---|---|---|
| チャットとドック | 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のチャットスキンを使う場合は、次を参照してください: 輸入ガイド。そのエクスポートには専用の設定手順があります。
ファイルをダウンロードする
- ベータ版のソース 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/...。ブラウザーからコピーすれば、空白やスラッシュも適切に扱われます。
| 知っておくと便利なこと | 詳細 |
|---|---|
| この設定は1回だけです | 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、再読み込みは、次の資料で説明されています: ブラウザソースリファレンス.
デザインを変更するか、AIに次を依頼します:
| したいこと… | 操作 |
|---|---|
| CSSだけを変更する | 公開リンクを使い、OBSの次の機能を利用します: カスタムCSS 欄に貼り付けます。そのOBSソースだけに適用され、通常のブラウザーには反映されません。 |
| 編集したHTMLコピーの見た目を変える | 既存のスタイルの後に追加するか、その後にローカルのスタイルシートを読み込みます。 |
使う項目: &css= または &b64css= | 対応しているのは一部のページだけです。 poll.htmlなどは、どちらも読み取りません。先にページのコードを確認してください。 |
| HTMLレイアウトを変更する | スクリプトで使うIDとクラスを維持します。更新のたびに要素を作り直す場合は、固定の装飾をその外に置くか、描画処理に追加します。 |
| 共有スタイルシートやスクリプトを編集する | ファイルをコピーしてページの参照先を変え、自分のデザインだけに変更が適用されるようにします。 |
ロゴ、フォントファイル、ブランドカラー、キャンバスサイズ、参考画像を用意します。通常、Webページは別のコンピューターのディスクからフォントや画像を読み込めません。
AIプロンプト
各デザインガイドの種類別プロンプトを使うか、これを出発点にしてください。コピーしたファイルと、そのCSS・スクリプトを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、リンク | HTMLではなくURLです。既存のメディア・リンク用ルールで検証してから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>
- 既にサニタイザーがある場合は維持し、2つ目を追加しないでください。
- サブフォルダー内のファイルでは、スクリプトのパスを調整します。
- 生の名前を属性文字列に、生の色をスタイルのHTMLに挿入しないでください。スタイル値を検証し、プロパティごとに設定します。
- 無害化したHTMLでも、JavaScriptとして実行したりAIへの指示として使ったりしてはいけません。
詳しい説明: OWASPの安全な出力先とHTML無害化のガイド.
描画処理を安全にテストする方法
公開チャットではなく、非公開のローカルプレビューで実行してください。
- 次のような名前を使います:
Guest <b>One</b>。山括弧は文字として表示される必要があります。 - 送信
chatmessage: "<b>Hello</b>"付随する値:textonly: trueにしてからfalseにします。一方ではタグが文字として、もう一方では太字として表示されることを確認します。 - 対応しているエモートと画像だけのメッセージが引き続き表示されることを確認します。
- AIに次のような無害な確認用入力を試させます:
<img src=x onerror="window.__ssnInjectionProbe=1">。実行されたり、マーカーが設定されたり、イベント属性が残ったりしてはいけません。スクリプトスキームのリンクもテストしてください。
テストで確認できるのは試した経路だけです。デザイン変更で触れた描画処理とフィールドを中心に確認します。
1つずつテストする
| テスト | 方法 |
|---|---|
| レイアウト | ページにプレビュー・デモモードがあれば使い、なければ架空のローカルデータを用意します。長い名前やメッセージ、アバターなし、空データ、想定する行数を試してください。 |
| SSNからの配信 | SSNを起動したまま、次を使います: テストメッセージを作成(Create Test Message) を同じセッションで使います。通常のExtension APIモードには次が必要です: 拡張機能のリモートAPI制御(remote API control of extension) を有効にします。テストメッセージで自動処理が動くことがあるため、テスト用の環境を使ってください。 |
| 実際のトリガー | 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 を表示用に使い、USDの有効な数値を次に指定します: donoValue、ゼロを含む。 |
| Event Flow および コマンドとAPI | デザインに操作のきっかけが必要なら、既存の操作機能を再利用します。 |
問題を解決する
| 問題 | 試すこと |
|---|---|
| ファイルが見つかりません | HTMLを再びブラウザーにドラッグし、アドレスをコピーします。ファイル名が.html.txtではなく.htmlで終わっていることを確認してください。 |
| スクリプト、フォント、または画像がありません | 展開したフォルダー構成を保ち、元のファイルの隣にコピーを置きます。追加した画像やフォントが、ページから参照できる場所にあることを確認します。 |
| 空白または「待機中」の表示 | セッション、パスワード、完全な ? および # の部分、SSNの起動状態、機能がオンかどうか、正しい入力が届いているかを確認し、元のSSNリンクと比較します。 |
| OBSとブラウザーで見た目が違う | 幅と高さ、古いカスタムCSS、フォント、キャッシュ、ブラウザーの保存データを確認します。保存後は再読み込みしてください。 |
| 更新するとロゴが消える | スクリプトがコンテナーを作り直している可能性があります。固定の装飾を外に置くか、描画テンプレートを変更します。 |
| データがリセットされる/操作が2回実行される | 再読み込み・終了設定、オーバーレイや操作ページの重複、ページ自体の重複処理と状態管理を確認します。 |
特殊なケース: 個別のデータ ファイルを読み取るページ
地図はローカルのJSONファイルを次の方法で読み込みます: fetch()を使っており、ディスクから開くとブラウザーにブロックされる場合があります。地図の見た目だけを変えるなら、公開リンクとOBSのカスタムCSSを使います。ファイルを編集する場合は、ディスクから開けるよう地図データをページ内に組み込むようAIに依頼してください。ホスティングは必要なページ向けの上級オプションであり、通常の手順ではありません。
確認できた最小の問題から直します。見た目を変えるためにキャプチャースクリプトやイベント項目を変更する必要はありません。公開フォークを共有する場合は素材を含め、非公開のランチャーは含めないでください。