Discord Webhooks
Posts to Discord when things happen on stream. Add as many Discord webhooks as you like — one per channel — and give each its own message, image and the Streamer.Bot triggers that post it. It starts with two webhooks, which are also examples of what a webhook does:
- Go live notification: tells your server you are live.
- Screenshots: posts every new picture of a folder — a screenshot taken by a channel point reward, a hotkey, your streaming software — see Screenshots.
It has no visuals: nothing on screen, no position, no style and no preview.
Platforms: Twitch, YouTube, Kick
Action pack: Stream UI - Backend — it posts the messages and reads the pictures. → Who needs what
How it works
- Each webhook has its own triggers. Add, edit or remove them like anywhere else in Stream UI, conditions included → Triggers and conditions.
- One post per trigger that fires. Live on Twitch and YouTube at once: the go-live webhook posts twice.
- Each webhook can be switched on and off live, by hand or by Streamer.Bot triggers — see Controls. A webhook switched off posts nothing.
- Your webhook URLs stay in Streamer.Bot, never in your browser-source URL: anyone holding one can post to the channel.
- Runs in the overlay that runs the actions, while the widget is on — it has no URL of its own. → Which overlay runs the actions
Variables
The message, the image, the username and the picture can all use variables between {}.
Streamer.Bot's events carry little about you (Twitch's Stream Online: your name, but no
profile picture or channel link), so Stream UI adds your account's details, taken from the account
Streamer.Bot is logged in with on the trigger's platform (on the first one connected for a
trigger without a platform):
| Variable | Detail |
|---|---|
{broadcastUser} | Your display name on that platform |
{broadcastUserName} | Your login |
{broadcastUserId} | Your ID on the platform |
{broadcastUserProfileImage} | Your profile picture |
{platform} | Twitch, YouTube or Kick |
{link} | Your channel: https://twitch.tv/<login>, https://kick.com/<login>, or your YouTube channel's /live page |
The trigger's own variables work too — a File/Folder Watcher's {fullPath} and
{fileName}, say. Check them with the event inspector button under Add trigger: fire
the trigger and read its payload. A username, picture or image whose variable is not found
is left empty, so the webhook's own name and picture are used.
The page
The widget's page works like a small app:
- Settings and Controls, the tabs over the editor, switch what it shows.
- Webhook list, the column on the left: your webhooks. Click one to edit it. Drag a row by its handle to reorder; its switch turns it on or off; its menu duplicates or deletes it. Add webhook adds one.
- Trigger list, the column beside it: the triggers of the webhook you picked (on the Controls tab, those of the picked control).
- The main area: the picked webhook's settings, or its buttons on the Controls tab.
Each column folds to a slim rail with the arrow beside its title, while you stay on the page; it opens unfolded on your next visit.
How to set it up
Switch the widget on
It is in the Utilities group and off by default. The Add to overlay switch beside the page's title turns it on or off.
Set each webhook's URL
In Discord: channel settings › Integrations › Webhooks › Copy Webhook URL. Paste it in Webhook URL, then Save — it is saved in Streamer.Bot. Send test posts a test message to the channel. Add webhook adds another one.
Pick its triggers
In Trigger list, Add trigger picks a trigger from Streamer.Bot; click a trigger to change it. The event inspector button under it shows a trigger's variables. For the Screenshots webhook, see Screenshots.
Update your browser source
Copy the URL of the overlay that runs the actions again into its browser source → Layout and browser source.
Settings
Webhook list
One row per webhook: its name, and under it the names of its triggers. Deleting a webhook deletes its URL and its on / off state from Streamer.Bot. Duplicate copies it under the original, URL and on / off state included, so the copy posts to the same channel at once.
A new webhook starts empty: no name, username, picture, message, image or trigger.
Webhook settings
The picked webhook, in the main area:
| Field | Go-live default | Screenshots default | Detail |
|---|---|---|---|
| Webhook name | Go live notification | Screenshots | Only tells your webhooks apart on the page. Empty: Webhook 1, Webhook 2… |
| Webhook URL | — | — | The Discord webhook link, kept in Streamer.Bot. Save, then Send test. |
| Default username | {broadcastUser} | Stream UI | The name the post uses. Variables work. Empty: the webhook's own name. |
| Default picture URL | {broadcastUserProfileImage} | empty | A link, or a variable. Empty: the webhook's own picture, set in Discord. |
| Post as the viewer | off | off | Posts with the name and profile picture of whoever set the trigger off — see Post as the viewer. |
| Message | {broadcastUser} is live on {platform}! {link} | empty | See Variables. Empty: the image alone. |
| Image | Link, empty | Variable, {fullPath} | Where the picture comes from, then its field. Variable: a trigger variable holding a picture's path on the Streamer.Bot PC or its link. Local file: a picture on the Streamer.Bot PC, typed or picked with Browse…, attached to the post. Link: a picture's link, shown under the message. Empty: no image. |
A picture on the PC is posted once it is fully written: .png, .jpg, .jpeg, .gif or
.webp, up to 10 MB (Discord's limit for webhooks). Other files are not posted.
Trigger list
The picked webhook's triggers — the go-live webhook's: Twitch Stream Online, YouTube Broadcast Started, Kick Stream Online; the Screenshots webhook's: File/Folder Watcher Created. Each row: its platform's icon, the trigger's name and its condition. Click one to change it; drag to reorder; Duplicate (to give the copy another condition) and Delete are in its menu.
Screenshots
The Screenshots webhook posts each new picture of a folder, subfolders included.
Watch the folder in Streamer.Bot
In Streamer.Bot, open Services › File/Folder Watcher, right-click the list, then click Add. Pick the folder where your images are created, click OK to save, and make sure the watcher is enabled. No action is needed.
Type your folder in the trigger
In the Screenshots webhook's Trigger list, click the File/Folder Watcher › Created
trigger. Its condition reads fullPath Starts with YOUR FOLDER PATH: replace
YOUR FOLDER PATH with the watcher's folder, such as C:\Users\You\Pictures\Screenshots.
Upper and lower case don't matter.
Another folder: duplicate the trigger and type the other folder. Another channel: duplicate the webhook and paste the other channel's URL.
Post as the viewer
With Post as the viewer on, the webhook posts with the name and profile picture of whoever set the trigger off: the chatter, the subscriber, an integration's supporter (the name set in Settings › Streamer.Bot)… If no one is found, it posts with the webhook's Default username and Default picture URL.
Some triggers name no one — a new file in a folder, for one. The page then shows a warning under the switch. For those, your Streamer.Bot action can save the viewer as temp globals before it sets the trigger off — before the sub-action that creates the image, for a screenshot.
In your action, add two Core › Globals › Global (Set) sub-actions with the following information:
| Field | User name global | User platform global |
|---|---|---|
| Destination | Global | Global |
| Persisted | Non-Persisted | Non-Persisted |
| Variable Name | streamUi.discordViewer | streamUi.discordViewerPlatform |
| Value | %user% | %eventSource% * |
* The name of the variable may change depending on the trigger used: double check the event's variable names to know which one contains the platform information.
The saved viewer's profile picture is the one Chat First or the Viewer Cards saved for them, else, on Twitch, the one Stream UI - Get Profile Pic finds. Each saved viewer is used for one post only, and only within 60 seconds. A post more than 60 seconds later, or with no viewer saved — a screenshot from a hotkey, say — uses the webhook's Default username and Default picture URL.
The warning under Post as the viewer on the page links here.
Controls
Each webhook is on or off, and only webhooks switched on post. Its row switch in Webhook list shows and changes it. On the Controls tab:
- Controls, a column beside the webhook list, holds Turn on and Turn off. Pick one to see its triggers in Trigger list.
- Trigger list: the Streamer.Bot triggers that switch the picked webhook on, or off — stream start, stream end, a command… Add trigger adds one, conditions included. A trigger that switches a webhook on also lets it post on that same trigger.
- The main area has the picked webhook's tile, reading
Go live notification: On, with Turn on and Turn off buttons. The controls window has one tile per webhook.
The state is kept in Streamer.Bot, in the persisted global
streamUi.off.discordwebhooks.<webhook id> (1: off; 0 or none: on), so the switch, the
buttons, the triggers and every page follow each other at once. Your own actions can
switch a webhook too, with a Global (Set) sub-action on that variable. The switch and
the buttons need Streamer.Bot connected and the Backend action.
Streamer.Bot events it listens to
| Event | What it triggers |
|---|---|
Every trigger of every webhook (the go-live webhook: Twitch.StreamOnline, YouTube.BroadcastStarted, Kick.StreamOnline; the Screenshots webhook: FileWatcher.Created) | That webhook's post |
General.Custom | The Twitch profile picture found by Stream UI - Get Profile Pic. Only with Post as the viewer |
| Every Turn on / Turn off trigger of every webhook | Switches that webhook on or off |
Misc.GlobalVariableUpdated, Misc.GlobalVariableCreated | A webhook switched on or off elsewhere (the page, the controls window, your actions) |
End Credits
Full-screen scrolling credits for Twitch, YouTube and Kick — followers, subs, gifts, raids, moderators and chatters, from Streamer.Bot's credits on Twitch and Streamer.Bot groups on YouTube and Kick.
Appearance
The overlay style every widget follows — cards, text, pictures, progress bars and animation — and how a widget's Style tab overrides it.

