Design your own chat overlay

Customize scrolling chat, Dock output, and chat themes while keeping message rendering and connections working.

Choose the right starting page

先使用 sampleoverlay.html for an audience chat list, or copy the exact theme selected in the 叠加层图库。使用 dock.html when you need the Dock's display and interaction features. chat-overlay.html redirects to the saved AI overlay output; it is not this sample chat renderer.

Locally rendered custom chat sample with fictional viewers
Actual sampleoverlay.html with a small CSS restyle and fictional messages. A dark backdrop makes the preview easier to see.

Download and keep the file structure

  1. Download the source ZIP and extract it. These guides use the beta source; keep the files from one download together.
  2. 复制 sampleoverlay.html 为 my-chat.html beside the original. If choosing a different page or theme, keep its copy in that file's original folder.
  3. Open the copied HTML and its referenced CSS/JS in your editor or AI tool. Add supplied artwork/fonts to the same project and use relative paths. Start with CSS overrides; include the renderer when changing generated markup.

The following files help you find the design and behavior. This is a reading list, not a complete dependency bundle: keep the extracted folder intact, including images, fonts, scripts, and any data files.

FileWhy it matters
sampleoverlay.htmlA small all-message overlay to start from.
dock.htmlThe full Dock, including operator controls and extensive URL options.
themes/compact-clean.htmlExample of a chat theme in a subfolder; keep your copy in themes/.
shared/utils/chatHtml.jsHTML-mode message sanitizer; load libs/objects.js first.
shared/utils/chatBadges.jsBadge rendering; keep its companion chatBadges.css.
shared/utils/contentImage.jsContent-image handling used by the Dock.
js/transport-dedupe.jsDuplicate-delivery handling used by the sample and many themes.

Connect your copy and open it in OBS

Start SSN and make the original generated overlay URL work first. The session= value connects to that SSN session; it is not your channel name or this file's name. Keep SSN, the relevant feature, and its data sources running.

  1. Drag your edited HTML file into Chrome or Edge. Copy its address from the address bar; it starts with file:///.
  2. Copy everything from ? onward in your working SSN overlay link and add it to the end of that file address. Keep all settings, including the session, password, and any # ending.
  3. Open the result in a browser, then set an OBS Browser Source's URL to the same address with 本地文件 unchecked. Match the source dimensions to your intended design.

For the starting file above, the local address looks like this; your actual link may contain additional required options:

file:///C:/SSN/social_stream-beta/my-chat.html?session=YOUR_SESSION

Use the actual file address on your computer. OBS saves it with the source; keep the downloaded folder in the same place. After saving design changes, refresh the Browser Source. The shared setup guide includes Mac examples and an optional launcher for the Local file checkbox.

Where to change the design

Change card backgrounds, name typography, padding, avatars, badges, and entry/exit motion. In the sample, follow addMessageToOverlay to see where rows are created; in a theme, inspect its own selectors. Preserve deletion, ordering, limits, and timing. Chat is a stream of separate rows, so test rapid arrivals as well as a single attractive card.

保持 chatmessage HTML-mode emotes through the existing sanitizer. Names and normal labels are plain fields; textonly applies only to the message body. Render contentimg even when the body is empty. If styling the full Dock, use its display options so the chosen audience view does not show unwanted controls.

Copy this AI prompt

Give the AI your copied source files and reference artwork. Replace the bracketed details. Keep the input-safety instructions in the prompt.

Customize my-chat.html, copied from sampleoverlay.html.
Design: [describe the look or attach a reference].
Colors/fonts/assets: [supply hex colors and local filenames].
OBS canvas and placement: [size and position].

Edit the attached chat overlay as [design reference] for [canvas size]. Style names, message cards, avatars, badges, and entry/exit motion. Preserve ordering, deletion, message limits, textonly, HTML emotes, and image-only messages. Keep existing duplicate-delivery handling.

Read docs/event-reference.html for incoming fields and
docs/overlay-customization-guide.html for local setup and safe rendering.
Keep the existing session/password handling, labels, server routes, query
parameters, URL fragments, and relative asset paths. Use classic scripts
compatible with Chrome 80. Keep executable dependencies packaged locally.

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, any additional assets, exact local browser/OBS
setup instructions using placeholders, and the specific tests performed.
Do not put my private session link or credentials into a public example.

Test this overlay type

Use a preview or test setup first. The test-message guide explains how to send fictional payloads through SSN; a test submitted to your production session can trigger its existing automations.

  1. Send several test chat rows with different names and platforms; check stacking, wrapping, and removal when the limit is reached.
  2. Send one textonly message containing <b>literal brackets</b>, then an HTML-mode emote message. The first must show literal markup; the second should keep allowed emotes.
  3. Try a contentimg-only message, a long name, missing avatar, donation label, and a deletion through the Dock. Check both narrow and full-width sources.

Also run the input-rendering checks against the render paths you changed. After saving edits, refresh the OBS Browser Source between rehearsals and repeat the visible interaction. Browser previews do not establish live capture or OBS behavior.

更多参考: Dock operation · Import a StreamElements or Streamlabs skin · Fonts · 事件参考 · Local setup troubleshooting.