A simple overlay for OBS that displays Twitch chat and Kick chat simultaneously, including 7TV, BetterTTV and FrankerFaceZ emotes.
The overlay runs completely locally in OBS as a Browser Source – no external service required.
- Display Twitch and Kick chat
- Support for Twitch emotes, 7TV emotes, BetterTTV emotes and FrankerFaceZ emotes
- Unified layout with CSS (font, size, emote alignment)
- Blacklist support: ignore messages from specific users (e.g. bots)
-
Clone or download the repository:
git clone https://github.com/YOURNAME/chat-overlay.git cd chat-overlay -
Copy the example config:
cp config.js.example config.js
-
Enter your own values in
config.js:- Twitch channel name
- Twitch OAuth token
- Kick App Key + Chatroom ID
- 7TV user ID
- BTTV Twitch user ID
- (optional) Blocked users list
-
In OBS, add a Browser Source:
- Select the local file:
overlay.html - Set the size, e.g.,
800x600or whatever fits your layout
- Select the local file:
TWITCH_CHANNEL= your Twitch channel name (e.g.smtxlost)TWITCH_OAUTH= Chat token in the formatoauth:xxxxxxxxxxxx
👉 How to get your token:
- Use: https://twitchtokengenerator.com/
- Select the scope:
chat:readis sufficient - Copy the token and paste it into
config.js
KICK_APP_KEYandKICK_CLUSTER→ public values used by Kick for all users (not secret, usually32cbd69e4b950bf97679andus2)KICK_CHATROOM_ID→ unique per channel. Find it via the API:
https://kick.com/api/v1/channels/YOUR_CHANNEL
Look in the JSON for:chatroom":{"id":...}
SEVENTV_USER_ID→ your user ID from https://7tv.app
BTTV_TWITCH_USER_ID→ your Twitch user ID
(e.g. via: https://streamscharts.com/tools/convert-username)
FFZ_CHANNEL→ your Twitch channel name (same asTWITCH_CHANNEL)
Used to load your channel-specific FrankerFaceZ emotes.
BLOCKED_USERS→ an array of usernames to ignore (case-insensitive).
Example:Messages from these users will not appear in the overlay.BLOCKED_USERS: ["nightbot", "streamelements", "moobot"]
MIT License – free to use and adapt.