Widgets module
The Widgets module provides browser-source overlays for your streaming software (OBS, Streamlabs, Meld, vMix, XSplit and similar tools). It ships thirteen configurable native widgets, widget packs that re-skin them, an AI generator that writes custom widgets from a description, a full code editor for hand-written HTML/CSS/JS overlays (with StreamElements compatibility), and Catalyst Scenes — named layouts served as a single browser source per scene.
Available on the Free tier and above. See Module access by tier.
Native widgets
Section titled “Native widgets”Enable these in Widgets → Gallery and click one to configure it. The configurator has a live preview with simulate buttons and these tabs:
- Style — theme (dark, light or transparent), accent color, font color, font, base size and font size, plus the widget’s variant.
- Settings — the widget’s own options, described below.
- Sounds — a sound per event the widget shows (see Sounds).
- Controls — live controls, on the Subathon Timer and Ending Credits only.
- Placement — where the widget sits on the current scene and at what scale.
- Source — this widget’s own browser-source URL and the resolution to add it at (see Adding a widget to your streaming software).
A widget is enabled per scene, and each scene keeps its own copy with its own settings: a card in the Gallery shows which scenes it’s in, and clicking a scene chip opens that scene’s copy.
Base Size vs Font Size. Base Size (12–22 px) is the widget’s layout unit — padding, gaps, bars and icons are all measured from it, so moving it resizes the whole card. Font Size (50–200 %) multiplies the text on top of that, so you can make the type bigger inside a card whose footprint you already like, or keep a large card with small type. One exception: the Wheelspin wedge labels size themselves to fit their wedge, so they follow the wheel rather than the Font Size slider.
Font Color is separate from Accent Color: leave it on Auto to follow the light/dark theme, or set a color to override every piece of body text. Accent-highlighted text (counters, progress figures, reward names) deliberately keeps following Accent Color — that is what the accent is for.
| Widget | What it shows | Variants |
|---|---|---|
| Alerts | Every follow, sub, resub, gift, cheer (Power-ups and Bits in Extensions included), tip, raid and charity donation, played in a sequential queue and styled per type — whether or not you use the Events module. When an event also earns an Events rule, the rule’s name appears on that event’s alert, so one cheer that earns two rules is one alert carrying both names. Rules with no Twitch event behind them (chat phrases, meta rules, manual grants, channel-point rules) get an alert of their own. A new sub waits a few seconds for its rule name when you have a new-sub rule running. Show events picks which types play. Display duration 3–15 s, plus an adjustable gap between alerts (0–10 s) and an optional same-type cooldown (0–300 s; held alerts are deferred, never dropped). If you also run another alert box, untick the types it already covers, or both will play | strip, burst, ribbon |
| Full-screen alerts | The same alerts as Alerts, with the same queue, rule names, Show events, duration, gap and cooldown, drawn across the whole frame. Each alert takes over the screen for its moment: a card with the event’s glyph, the viewer’s name, what they did and their message. The frame is empty between alerts. Every layout keeps the card clear of the gameplay centre; Side puts the lower-third and corner rise in the bottom-left or bottom-right corner, so pick the one opposite your camera (the top banner is centred). Full-bleed 1920×1080, and transparent between alerts, so it can sit on top of any scene | lower-third, corner rise, top banner |
| Chat display | A styled live chat overlay — badges, first-time-chatter highlight, per-role styling | cards, cinema, kinetic |
| Goal progress | Progress toward a Numbers metric (picking up a matching native Twitch goal automatically), an Events event/rule goal, your active tip goal, or your charity campaign (Twitch Charity or Tiltify) | bar, radial, thermometer |
| Leaderboard | Top gifters, cheerers, and tippers, counted from the gifts, cheers (Power-ups included) and tips themselves — no Events rule or active event is needed. Pick any combination — a single list shows on its own, two or more rotate on an interval you set (3–60 s) — and 3–10 rows. Windowed to this stream (or the last one once you’re offline), week, month, or all time; week and month follow Twitch’s own reset times (Monday / the 1st, Pacific time). Anonymous contributions and refunded tips are left off | gifters, cheerers, rotating tabs |
| Counter | One live number from Numbers (follows, new subs, gifted subs, total subs, bits, streaks, Plus Points, charity donations, charity raised), Chatters (command counts, named counters — channel-wide or all viewers combined, regulars), or Events (rewards earned, gifted subs, bits, follows, per-rule earns) | — |
| Ticker | Three things it can show, picked with Shows. Events: a scrolling recap of recent follows, subs, gifts, cheers, tips, raids and charity donations, with Events rule names where an event earned one, plus the rewards that have no Twitch event behind them (chat phrases, meta rules, manual grants, channel-point rules); Show events picks which types appear. Credits: the same sections as Ending Credits, kept up to date as people earn them, under a label per section. Subscribers: everyone currently subscribed, Tier 3 first, then Tier 2, then Tier 1, with Tiers to pick which appear (Prime counts as Tier 1). Credits and Subscribers scroll at a Reading pace, so a long list goes round more slowly rather than faster. New names join on the ticker’s next pass rather than mid-scroll, so on a long list a new name can take a few minutes to appear (a very long subscriber list may not come round again during the stream). With nothing to show, the ticker hides. If a section or the subscriber list can’t be read, it’s left out on stream and the Settings tab says why | rail (marquee), stack |
| Hype Train | Live hype-train overlay — start spotlight, level-ups, last-minute warning, final results with top contributors, and an optional all-time-high record line | banner, theater, streak |
| Subathon timer | A countdown that grows with subs, gifts, bits and tips — plus, if you turn them on, charity donations, follows and raids. State lives on the server, so it survives OBS restarts | slab, ring, stack |
| Subathon goals | A ladder of goals that fill as viewers subscribe, gift, cheer, tip, donate to charity or redeem channel points — combined points or a single contribution type, with optional spoiler goals and per-goal timer bonuses. A charity ladder can take its goals from your linked Tiltify campaign’s milestones and follow your edits there | ladder, milestone track, spotlight |
| Wheelspin | A spin-to-win wheel of up to 24 items, fired by a chat command, by bits / gifted subs / tips crossing a threshold, or by a channel point redemption | Ember Dial, Theater Wheel, Ticket Rail |
| AI persona bubble | An on-screen bubble that comments on your stream every 1–15 min while you are live, written from your prompt template plus your live title, category, viewer count and uptime, and your Channel Lore. Optionally also recent chat and the AI personas behind it, with opted-out viewers removed. Needs the AI Personas module on your plan and switched on; spends your channel’s shared daily AI token allowance | refined, cinema, minimal |
| Ending credits | A full-screen credits roll for the stream you just finished — top gifters, cheerers and tippers, new subs, resubs, raiders, hype train conductors, mods on duty, VIPs and first-time chatters. Full-bleed 1920×1080, so it wants a scene of its own | theater, marquee card, ticket stub |
Goal progress
Section titled “Goal progress”The Goal progress widget supports up to 9 instances per scene, each with its own source and placement — track a follower goal, a rewards goal, and your tip goal side by side. Each goal has its own browser-source URL on its Source tab, or place them together on a scene.
Pick the source in Widgets → Goal → Settings:
- Numbers metric — follows, new subs, resubs, gifted subs, total subs, bits, sub points, or Plus Points (current), counted over a rolling This stream, Today, Last 7 days or Last 30 days. If a live Twitch creator goal or a target you set in Numbers → Goals covers the metric, its target is used automatically; tick Always use my target to show the target you typed instead. That changes which target is shown, not what is counted. A goal tracking follows, total subs or sub points can also count Current total (no window): Twitch’s live figure (your followers, active subscribers or sub points right now), so it falls as subs expire. The event window never scopes it, and if Twitch can’t be read the overlay shows it as unavailable rather than 0. The active-subscriber count is Twitch’s own total, which includes your own subscription, the same as the live total on the Numbers dashboard.
- Rewards goal — an Events event or rule that has a goal target.
- Tip goal — your active tip goal from the Tipping module, updating as tips settle or are refunded.
- Charity campaign — your Twitch Charity campaign, or a Tiltify campaign linked under Integrations → Tiltify in the dashboard (Integrations), measured against the campaign’s own target and shown in the campaign’s currency. With no campaign running the overlay says so rather than showing zero.
Display options: a goal name (dashboard only), a custom label, Show label, Show count, Show event dates, Group thousands with commas, and, for tip and charity goals, Show cents (off shortens the count line to $3 / $6; progress is still tracked to the exact amount).
Each goal can also carry an event window — a start and end set in Widgets → Goal → Settings. Before it opens the overlay shows Starts …, while it runs Ends …, and once it closes Ended … with the card dimmed and frozen (the date line never shows on the thermometer variant). How much the window scopes depends on the source: a Numbers metric counts only inside it — the window replaces that goal’s own counting window, and Numbers counts by whole UTC days, so a part-day window covers those days in full (Plus Points are the exception: they always report month-to-date, so the window never scopes them) — a Rewards event counts only rewards earned inside it, while a Rewards rule, your tip goal and a charity campaign keep their own running totals — there the window only controls what the overlay shows and when it freezes. Leave both blank to keep counting at any time. Set both dates or neither: a lone date or an end before the start can’t be saved, and a Numbers window longer than 366 days is dropped before it reaches Numbers, so the rolling window counts instead. You pick the dates in your own timezone and they’re stored in UTC, so an overlay shows them in whatever timezone the machine running OBS is set to. If the Numbers goal you’re tracking already has its own dates (Numbers → Goals), leaving the window blank here inherits them.
Subathon timer
Section titled “Subathon timer”The Subathon timer is configured in Widgets → Subathon Timer → Settings:
- Title — the label shown with the countdown (defaults to “Subathon”). Leave it blank to hide the label entirely.
- Starting time — entered as hours / minutes / seconds. It’s what the countdown starts from and what Reset on the Controls tab returns it to. Reset leaves the timer paused at that value, so press Resume on the Controls tab when you’re ready to start it — or turn on Start when I go live below and it starts when your stream does.
- Maximum time — an optional cap, also entered as H / M / S. Events (and the Controls tab’s Add buttons) stop adding time once the countdown reaches it;
00:00:00means no cap. Set on the Controls tab is exempt, so you can still override the cap by hand. - Minutes per new sub / gifted sub / 100 bits / $1 tipped — how much each event adds. Drag the slider for whole minutes, or type an exact value in the box beside it — decimals included (
0.5= 30 seconds,0.67= 40.2 seconds). These are rates: the value is multiplied by the size of the event and only the total is rounded to a whole second, so a $100 tip at0.67adds exactly 67 minutes, and a 20-sub gift bomb pays 20× the gifted-sub rate. Tips count their cents too — a $12.50 tip at1adds 12m30s. Bits are the exception: they’re counted in whole blocks of 100, so a 250-bit cheer pays for 200. Power-up bits buy time at the same rate as a cheer, and so do Extension bits — counted at the 80% share you earn, and only as they come in, never for spending from before the subathon. - Minutes per $1 donated to charity —
0(off) by default. Counts donations to your Twitch Charity campaign and to a Tiltify campaign linked under Integrations → Tiltify, including a Tiltify donation that reaches us late. Only live donations buy time, never imported history. Like tips, it pays per unit of whatever currency the donation was made in, cents included — there is no currency conversion, so a €10 donation at1adds 10 minutes. - Minutes per follow / per raid / per raider — optional time for follows and incoming raids, all set to
0(off) by default so nothing about a running subathon changes until you turn them on. A raid pays the flat per raid amount plus per raider × the raid’s viewer count, and Minimum raiders ignores raids smaller than the number you set. Each follower only counts once, so an unfollow/refollow can’t farm time. - Multiply time by sub tier — off by default. Turn it on and Tier 2 subs pay 2× and Tier 3 subs 6× (both adjustable), applied to new subs, resubs, and every sub in a gift bomb. Prime subs count as Tier 1.
- On zero — stop at zero, count negative, or hide the timer.
- Show event log — on by default. Only the Stack style draws the log.
- Auto-pause when stream goes offline — off by default. Turn it on and the timer pauses when your stream goes offline and resumes when you go live again.
- Start when I go live — off by default. Turn it on and, when your stream goes live, a timer that isn’t counting down starts: from the starting time if it hasn’t started yet or you pressed Reset, or from where it stopped if it’s paused. A timer that’s already running — or has already run out — is left alone. Without it, a new timer starts with the first sub, cheer, tip or other event that adds time.
Follows and raids only reach the timer when something on your account subscribes those Twitch events — the Numbers module subscribes both automatically (it’s on every plan and collects passively), or add a follow / raid rule in the Events module. Without either, the follow and raid settings sit there doing nothing.
The timer’s state lives on the server, so it survives OBS restarts. Events add their time server-side as they arrive, so subs, cheers, tips and donations still count while OBS is closed — the widget just has to exist on your account. Each contribution buys time once, however many overlays you have open and however many times Twitch delivers it. A tier upgrade, which reaches us as several sub events, buys the new tier’s time once rather than once per event.
The Controls tab drives the clock by hand:
- Pause / Resume.
- Quick Adjust — add or subtract 30s, 1m, 5m, 15m or 1h.
- Custom Adjust — enter H / M / S, then Add, Subtract (stops at 00:00:00) or Set (replaces the countdown outright, and is the one way past the maximum).
- Reason (optional) — up to 80 characters, with presets such as Missed sub, Off-platform tip, Charity donation and Merch sale. It applies to the next adjust and appears on stream in the event log, so everyone watching sees it; only the Stack style shows the log.
- Reset Timer — returns to the starting time and leaves the timer paused.
A timer bonus on a Subathon goals rung adds its minutes here when the rung unlocks.
Subathon goals
Section titled “Subathon goals”The Subathon goals widget is configured in Widgets → Subathon goals → Settings:
- Header title — shown above the ladder on stream (up to 60 characters). Blank keeps “Subathon Goals”.
- Progress mode — Points converts every contribution to points with the values you set (per sub, per 100 bits, per $1 tipped, per $1 to charity, per channel-point redemption) into one combined ladder, and shows percentages only on stream. Single type tracks one of Bits, Subs, Tips, Redemptions or Charity, with thresholds in native units (tips and charity currency-formatted).
- Goals — add, rename and remove rungs (at least two). Each has a threshold, an optional spoiler flag that blurs it on stream until it unlocks, and a min column that adds that many minutes to your Subathon Timer when it unlocks. Two goals with the same threshold unlock together.
- Goals visible at once (1–6), Show completed goals, Show overall progress meter, Celebration on unlock with a Celebration duration (2–10 s), Flash pulse on progress, and Compact mode.
- Reset progress zeroes the running tally for a fresh subathon.
The Subathon goals ladder tracks either combined points or a single contribution type. It counts subs, gifted subs, cheers, tips, charity donations and channel-point redemptions directly from the events themselves — no Events module reward rule is needed, and every contribution counts whole. Power-up bits count as bits, and so do Extension bits at the 80% share you earn. A sub counts once per person, so a tier upgrade (several events from Twitch) is one sub, and a channel-point redemption counts once however many of your features are watching that reward. In points mode you can also turn on Count Events rule earns: each time a viewer earns one of your Events rules, the ladder gains points. Pick, per activity (subs, bits, tips, charity, channel-point redemptions), whether it scores per unit or by its Events rules — never both, so nothing counts twice. A rule is worth what its threshold would be per unit (a 500-bit rule = 500 bits’ worth) unless you set its own value; chat-phrase, follow, raid and meta rules take a flat value you choose. The tally is kept server-side as events arrive, so contributions still count while OBS is closed — the widget just has to exist on your account. Like the timer, an event only reaches the ladder when something on your account subscribes it on Twitch — enabling the Numbers module or running EventSub setup in the Events module covers subs, gifts, and cheers; tips flow in from the Tipping module. When it’s set to Single type → Tips, you can turn on Sync progress with the active tipping goal: the widget then reads its tip total straight from your active goal in Tipping → Goal — manual off-platform adjustments included — instead of counting only the tips the overlay happened to see. Tips are no longer tallied separately while sync is on, progress jumps to the tipping goal’s total the moment you enable it — unlocking every rung already below that total, including its timer bonus — and thresholds are read in major units of that goal’s currency. The settings panel shows the live goal and a Match top goal to tip target button that sets your highest rung to the goal’s target. The ladder’s Overall meter shows how much is left to the top goal alongside the percentage — an amount in single-type mode ($340.00 to go, 1,250 to go) and a remaining percentage in points mode, so raw point totals stay off stream. Goals visible at once caps all three styles, the Milestone Track’s pins included; the track spaces its pins evenly rather than by threshold, so a lopsided ladder (500 / 1000 / 1500 / 40000) no longer bunches them together, and its caption reports how many of the full ladder are unlocked. The ladder is always ordered by threshold, lowest first — drag a goal’s handle in Widgets → Subathon goals → Settings to move it to a different rung (the thresholds stay put, the goal moves onto one), and use the + between two rows to insert a new rung at the midpoint of the gap. A rung whose bonus time was already awarded stays awarded, so reordering never re-adds time.
Set to Single type → Subs or Single type → Bits, the same ladder offers Sync progress with a Numbers goal. It then reads its total from Numbers → Goals — your manual override, or, for a live Twitch creator sub goal, that goal’s own progress, which is the count you see on Twitch — so a ladder created mid-subathon starts at 53/100 instead of 0. Pick the metric (total subs, new subs, resubs, gifted subs; a bit ladder always tracks bits) and the window: This stream resets every stream and Today resets at midnight UTC, so a subathon that runs past either boundary usually wants Last 7 days or Last 30 days. (A live Twitch creator sub goal reports its own running progress, so the window doesn’t change what that ladder reads.) While sync is on the chosen contribution type is no longer tallied separately, progress jumps to the Numbers total as soon as you enable it — unlocking every rung already below it, timer bonuses included — and the panel offers a Match top goal to Numbers target button. It’s mutually exclusive with the tipping sync above, since each needs its own single type.
Set to Single type → Charity, the ladder shows its amounts in your charity campaign’s currency — Twitch Charity, or the Tiltify campaign you linked under Integrations → Tiltify in the dashboard — so a campaign raising pounds reads £80.00 to go, not dollars. It also offers Sync progress with the charity campaign: the ladder then reads its total straight from the campaign’s raised figure instead of counting only the donations it saw, so money raised before you built the ladder or linked Tiltify counts too. Donations are no longer tallied separately while sync is on, progress jumps to the campaign total the moment you enable it — unlocking every rung already below it, timer bonuses included — and the panel shows the live campaign with a Match top goal to campaign target button. The campaign’s total isn’t split by date, so with an event window set the ladder waits for the window to open and freezes once it ends.
With a Tiltify campaign linked, a charity ladder can also turn on Rungs from your Tiltify milestones: its goals become the campaign’s milestones (each unlocks when the campaign’s raised total reaches it), sync is switched on for you, and an edit you make on Tiltify reaches the ladder within about 5 minutes. Your own goals are kept and come back if you turn it off. To give a milestone a timer bonus, enter the minutes next to it in the Milestones list; each milestone pays its bonus once, even if you raise its amount on Tiltify after it was reached. The milestones show as soon as you save, before an event window opens and after it ends, while the raised total only counts inside the window; while a Twitch Charity campaign is live it is shown instead of the Tiltify one, and the ladder holds until it ends.
The ladder can also carry an event window, set in Widgets → Subathon goals → Settings. Contributions outside it are ignored, the ladder freezes after the end, and progress resets to zero when the window opens, so a scheduled subathon starts clean — editing the dates mid-subathon never wipes a running tally. Every contribution is judged by when it happened, so an OBS source that reconnects after being closed can’t count activity from outside the window. If you save a window whose start has already passed — say, setting up in the evening a subathon that started that morning — the ladder counts what already happened inside it from StreamerCatalyst’s own records: new subs, gifted subs, bits, tips and Events rule earns. Resubs, charity donations and channel-point redemptions from before the save can’t be recovered, and nothing added this way pays out a goal’s timer bonus. Count earlier activity, next to Reset progress, runs the same check on demand, and running it again adds nothing. It only adds what it can confirm the ladder hasn’t counted already: the whole window when the ladder hadn’t counted anything since the window’s start (the usual case for a window set up after the fact), otherwise contributions from the last 24 hours — anything older is reported and left out.
Wheelspin
Section titled “Wheelspin”The Wheelspin widget is configured in Widgets → Wheelspin → Settings:
- Items — 2 to 24 entries. Unchecking an item keeps it on your list but leaves it off the wheel, so you can swap prize pools without retyping them.
- Weights — every item starts at weight
1. Set0.5to make it half as likely,0.2for a fifth, or up to10for the inverse — a jackpot that hits rarely. The settings panel shows each item’s real percentage beside it, so you can see the odds you configured. The range is 0.1–10 and only enabled items count toward the odds; because the floor is 0.1, unchecking an item is still how you take it off the wheel entirely. The overlay is drawn to match: the Ember Dial and Theater Wheel give each item a slice sized to its weight, and the Ticket Rail repeats heavier items more often in its strip, so viewers can read the odds off the wheel instead of taking your word for them. Two caveats worth knowing — a very small weight beside a very large one becomes a sliver too narrow to print a name in, so its label is hidden (the item is still on the wheel, still spins, and is still announced by name when it wins); and an extreme ratio in the Ticket Rail is capped so the strip stays readable, at which point every item gets one card and the strip stops encoding the odds. The odds themselves are always exact either way — the winner is picked from the weights on the server, never from the drawing. - Chat command (default
!spin) and Who can spin — broadcaster only, or broadcaster + mods. A command cooldown (up to 5 minutes, or off) throttles repeat spins. - Event triggers — also spin when bits, gifted subs, or tips cross a threshold you set, or when a channel point reward is redeemed. For the redemption trigger, pick one of your custom rewards or leave it on Any channel point reward; a reward set to need manual approval spins the wheel when it’s redeemed, not when you approve it. (Custom channel point rewards need Twitch Affiliate or Partner.) Keep the Chatters bot switched on: it is what asks Twitch to send redemptions for this trigger. The viewer who triggered it is shown with the result. All trigger sources share one cooldown, so a burst of cheers can’t stack spins.
- When idle — hidden until triggered (spin, show the winner for 5 s, fade out) or always visible with the last winner highlighted.
- Spin duration (3–10 s) and Show who spun with the result.
- Post winner in chat — an optional templated announcement with
$(username)and$(item)slots.
Triggers are detected by the Chatters module, which reads your chat and your bits/gift/tip/redemption events. Event triggers — the redemption one included — work whether or not the Chatters bot is enabled; the chat command needs Chatters enabled, since that’s what listens for !spin. Turning the redemption trigger on and saving also subscribes your channel to Twitch’s channel point redemption events, so it starts working from the next redemption with nothing else to set up.
Ending credits
Section titled “Ending credits”The Ending Credits widget is configured in Widgets → Ending Credits → Settings:
- Credit sections — pick any combination of top gifters, top cheerers, top tippers, new subs, resubs, raiders, hype train conductors, mods on duty, VIPs and first-time chatters. They roll in the order listed, and a section with nobody in it is skipped unless you turn Skip sections with nobody in them off. Gifted subs are credited to the gifter under Top gifters rather than listing every recipient under New subs, so a gift bomb doesn’t bury the rest of the roll.
- Title and Subtitle — the title card at the head of the roll. Leave the subtitle blank to hide that line.
- Window — This stream by default, which means the stream you are on, or the last one if you are already offline. Last 7 days, Month and All time are also available for a season recap. Mods and VIPs are always read live from Twitch, so the window doesn’t apply to those two.
- Roll duration (20–180 s) — total time from the title card to the last name. A long list scrolls faster rather than overrunning the duration you set.
- Names per section (3–25) — anyone past the cap is counted in a
+ N moreline, so nobody is silently dropped. - Roll when the scene loads — on by default. Switching to the scene in OBS starts the roll and switching away stops it, which is the whole setup if Ending Credits has a scene of its own. (This uses OBS’s own source-visibility events, so it works with the default Shutdown source when not visible setting left off.)
- Chat command (default
!credits) and Who can run it — broadcaster only, or broadcaster + mods. The command needs the Chatters bot enabled, since that’s what listens for it. Leave the field blank for no command. A command is one word — letters, digits,-or_— and the leading!is added for you if you leave it off; the Controls tab shows what is actually listening. It also takes an argument:!credits restart,!credits next,!credits holdand!credits resumedrive the roll from chat. - Loop until the scene changes — off by default, which holds the closing card on screen after the last name. Turn it on for a BRB scene that has to fill an unknown amount of time.
- Closing note — rolls last, after every section.
{viewers}and{duration}are substituted; either shows as—rather than0if we never got a reading.
The Theater variant fills the frame with a backdrop while it rolls; Marquee card and Ticket stub sit over your game feed. All three render nothing at all when they aren’t rolling, so the source is invisible for the rest of the stream.
Because it is full-bleed, Ending Credits takes the whole canvas and cannot share a scene with another widget. Give it its own scene in Catalyst Scenes and switch to it when you are wrapping up.
The Controls tab drives a live roll: Roll now starts the credits on stream whether or not the credits scene is up, Restart takes it back to the title card, Next section advances immediately, and Hold freezes the roll where it is. It also shows what is about to play, and carries two lists a roll usually needs:
- Add a name — for the people the events never told us about: an off-platform tip, a guest, an editor. Pick the section it belongs in. Cleared when the stream ends. Mods and VIPs aren’t offered here, because those two are statements about a Twitch role and a typed name can’t make one true.
- Exclude from the roll — bots, and anyone who asked to stay off screen. This one persists between streams.
Credits are tallied server-side from the same events the rest of the platform reads, so they still count while OBS is closed — the widget just has to exist on your account. Which events reach it depends on what your channel subscribes: enabling Numbers or running EventSub setup in the Events module covers follows, subs, gifts, cheers and raids; tips come from the Tipping module; mods and VIPs are read from Twitch at roll time. A section we can’t read is skipped and the reason is shown on the Controls tab, rather than rolling an empty heading — VIPs in particular needs the permission that the Chatters VIP commands ask for, so it stays skipped until those are switched on.
Counter
Section titled “Counter”The Counter widget shows one figure with a title and subtitle (each defaults to the metric’s own wording; Hide subtitle removes the line):
- Numbers — follows, new subs, gifted subs, total subs or bits over This stream, Today or 7 days; or the current / best streak for follows and the sub metrics. Plus Points is Numbers’ Plus Program figure for this month, a live snapshot shown without a time window. Charity counts donations, and Charity Raised shows the money your current campaign (Twitch Charity or a linked Tiltify campaign) has raised, in the campaign’s currency.
- Chatters — a command’s use count, a named counter (channel-wide, or all viewers combined), or your number of regulars.
- Events — rewards earned, gifted subs, bits or follows for an event, or earns of one rule.
A figure we couldn’t read is never shown as 0: the counter shows an em dash and says why — No active campaign, Not available on this Twitch account, Log in again to enable charity, or Plus Points unavailable. A charity campaign that has ended keeps its final total.
Hype Train
Section titled “Hype Train”The Hype Train widget can highlight a train’s start, the last-60-seconds warning, every level-up and the final summary (each a toggle, with adjustable durations), show a running state between events, and list the top 1–5 conductors. It has a Show all-time-high record toggle that adds a record line (“Best Lv N” and your current train as a “% of record”), driven by the all_time_high_level / all_time_high_total fields that its hype-train events carry (custom widgets can read them too — see below).
The Hype Train’s conductor pills are counted from the subs, gifts and cheers themselves, so they fill in whether or not you run any Events rules, and they show real counts (“6 subs”, “4.2K bits”) rather than Twitch’s point figure — Twitch reports a train in points and never says how they split between subs and bits. The counting happens on our side, not in the overlay, which means it doesn’t matter when you opened the browser source: an overlay added half-way through a train still shows the whole train, two overlays on the same channel always agree, and nothing depends on your PC’s clock.
Everything between the train’s start and its end counts. The subs and bits that trigger a train land before Twitch says it started — Twitch detects a train over a rolling window of a few minutes — so contributions from up to 5 minutes before the start, and up to 2 minutes after the end, are added too: nearest to the train first, and only while they still fit inside the points Twitch reports for the train. When Twitch hasn’t reported a total (or the train is shared with other channels, whose events we never see), only the 90 seconds before the start are trusted. If Twitch’s total shows contributions we never received, the shortfall is added to the train’s sub and bit totals without crediting any conductor — up to half the train; a bigger gap means something on the channel isn’t subscribed, so we show what we actually saw rather than guess. Power-up bits count, and so do Extension bits that arrive live. The Discord bot and Numbers apply the same rules to the same train, so all three report the same numbers.
The streak variant’s contribution feed is a live ticker, so it shows contributions as they arrive while the overlay is open — the pre-train ones count toward the pills but aren’t replayed into the feed. And the countdown runs off the train’s own expiry rather than off contributions, so it stays accurate through a quiet stretch.
AI persona bubble
Section titled “AI persona bubble”The AI persona bubble generates through the AI module (AI Personas), so it needs that module on your plan and Enable StreamerCatalyst AI switched on; its Settings tab says which one is missing. Settings:
- Comment interval (1–15 minutes, default 5) — counted only while you are live.
- Display duration (1–300 seconds, default 12).
- Max response length (10–500 characters, default 200) — the server caps every answer at 500 characters.
- Prompt template — what the bubble should talk about.
{game},{title},{viewers},{uptime}and{channel}are filled in from the live stream; a value we don’t know becomes an em dash, never0. - Use channel lore — on by default; needs Lore switched on in the AI module.
- Use recent chat and personas — off by default, because viewer-written text would reach a model whose answer goes on your broadcast. Viewers who opted out of AI are never included, and links, @mentions and line breaks are stripped from the answer.
- Position — bottom right, bottom left, top right or top left.
Nothing generates while you are offline, and generation is capped at 120 per hour per channel, since an overlay URL is public. When the bubble can’t comment — offline, AI switched off, daily budget spent, the AI service unreachable — it simply stays hidden; the reason is shown only in the dashboard preview, never on stream. Each comment spends from your channel’s shared daily AI token allowance (the same one your AI commands, lore and the widget generator draw on), and the Settings tab shows what the bubble costs per streamed hour at your interval.
Catalyst Scenes
Section titled “Catalyst Scenes”A scene groups enabled widgets into a named 1920×1080 layout — one for gameplay, one for Just Chatting, one for BRB. Two starter scenes, Just Chatting and Gaming, are created for you.
- Widgets snap to an anchor grid (3 rows × 4 columns, plus full-width and center zones; short widgets can take a half-cell). The ticker uses full-width anchors only, and other widgets shift automatically to make room for it. Ending Credits is full-bleed — it takes the whole canvas, so it has no placement to pick and belongs on a scene of its own. Full-screen Alerts is full-bleed too, with nothing to place, but it is transparent between alerts, so it shares a scene with your other widgets; on the canvas it sits underneath them, so they stay draggable.
- Each widget instance has a per-scene scale (25/50/75/100%).
- Each scene produces one browser-source URL (
https://widgets.streamercatalyst.com/v1/scene/<scene-id>?token=…, added at 1920×1080). The page checks for layout changes every 30 seconds, so edits in the dashboard appear in OBS without touching the source. Only enabled widgets that have a placement on the scene are drawn. - Each scene can wear a widget pack, picked from the Pack menu beside the scene tabs.
Manage scenes on Widgets → Catalyst Scenes (desktop only — on a phone the page asks for a desktop browser): create, rename, duplicate, reorder, and delete scenes, place widgets on the canvas by clicking a grid zone, copy a widget with its settings into other scenes, and copy the scene URL. A widget’s Placement tab in the configurator sets the same anchor and scale.
Widget packs
Section titled “Widget packs”A pack is a themed set of skins for the native widgets — a Halloween look, for example — applied to a whole scene at once. Pick one from the Pack menu beside the scene tabs (it appears once there’s a pack to pick); Native is the standard look. The pack restyles every native widget on that scene, in the dashboard previews and in OBS alike; custom widgets keep their own look. The Event Page and its browser source take packs too, picked separately in that page’s own Style pane.
Who gets a pack is set per pack by StreamerCatalyst:
- Included from a plan — listed to every channel, and usable from that tier up (some packs are open to every plan, Free included). Below the tier it shows in the menu with a lock and the plan it comes with.
- Granted — some packs are made for one channel and appear only for the channels that have been given them.
Previewing a locked pack. Choosing a locked pack starts a preview instead of saving anything: the gallery thumbnails, the configurator and the Stage draw it for that one scene, under a banner with Stop previewing (and Upgrade, if you manage billing). While it runs you can’t move widgets on the Stage, since the preview can change a widget’s footprint. The preview ends when you switch scenes or save a different pack. The scene’s browser-source URL — and each widget’s own URL — keeps using the scene’s saved pack, never the preview. If a locked pack does reach a browser source while you are signed in, it is drawn with a full-screen Preview watermark, so it can’t be used on stream; viewers’ overlays draw your normal style.
Losing access never changes a live overlay. A pack you applied while you had access stays on that scene after a downgrade or a removed grant, marked No longer in your plan · it stays on this scene. You can’t add it to another scene, and if you switch that scene to something else you can’t switch it back. The one exception is a pack StreamerCatalyst retires altogether, which stops drawing everywhere.
A running overlay re-checks its pack on its 30-second layout check, so a change of pack reaches OBS within about a minute without reloading the source. If the pack check can’t be read when an overlay loads, it draws your standard style rather than guessing; a running overlay is never reloaded over a momentary failure. If the pack list itself can’t be loaded, the menu says packs unavailable with a Retry button rather than showing no packs.
Event Page browser source
Section titled “Event Page browser source”The Event Page — your event’s public page — has an OBS twin, served by this module. Copy its URL from Events → Event Page → Broadcaster view (broadcaster and Lead Mods only, because it carries your widget token) and add it as a 1920×1080 Browser source. It draws the subathon clock as a ring and the goals as a milestone track, plus tiles for the giveaway, your last wheel spin, your top gifter and your tip goal.
It can also carry the event’s totals strip, the reward ladder, the leaderboards (every board side by side, since nobody can click a broadcast), recent earns, and a charity campaign tile. Those cards ship off — turn on the ones you want — and a card added to the source in a future update arrives off too, so a scene you’ve laid out never grows on its own. A reward list longer than four turns its own pages every 10 seconds.
The source refreshes itself every 30 seconds by swapping its content rather than reloading, so nothing flashes on stream; a saved change to its style or cards arrives on a refresh too, within a minute or two. A figure it couldn’t read shows an em dash and says so, never a zero. It works whether or not the public page is published, it offers a Transparent background, and revoking your widget token invalidates it like every other overlay URL. See Events — The public Event Page for its style and card controls.
Custom widgets
Section titled “Custom widgets”Widgets → Custom Widgets hosts widgets you write (or generate) yourself — HTML, CSS, JS, and a JSON field schema that renders a settings form. The editor includes a live preview, a schema panel, an error log fed by runtime errors from your live overlays, and version history with publish: OBS always renders the published version, so you can iterate on a draft safely and revert if needed (last 10 versions kept).
Custom widget code runs in an isolated browser context and talks to StreamerCatalyst through two APIs:
- SC runtime (
SC_API) — live event subscriptions, per-widget key-value storage (8 KB per value, 100 keys, 100 KB per widget), module data (Events/Numbers/Chatters metrics, goals, leaderboards), a Twitch data proxy (users, streams, clips, polls, predictions, charity — rate-limited per channel), andSC_API.ai.completefor AI text (opts.max_tokensaccepted, 16-512 — it bounds the length of the returned text, not the model’s own thinking, so it does not reduce what a call costs; capped at 120 calls/hour per channel, since an overlay URL is public).SC_API.ai.remaining()answers{ unavailable: true }rather than a fabricated0when the budget cannot be read.SC_API.ai.personaComment()is the AI persona bubble’s own call: same daily token budget, but gated on the channel being live and on the AI Personas module, and its prompt is built server-side from your lore and personas. It resolves to{ skipped }or{ error }rather than rejecting, and answers are capped at 500 characters. SE_APIcompatibility layer — StreamElements-stylestore.get/set,counters.get(a bare name reads one of your Chatters counters — lowercasea-z,0-9and_, up to 32 characters, e.g.deaths— and gives its channel-wide value, the one your!deathscommand prints, which is what the name means on StreamElements; a dotted name reads a module metric, e.g.numbers.follows,rewards.total_bits,chatters.regulars_count. A name that resolves to nothing, or one needing an option a name can’t carry, is rejected rather than answered with a0— sochatters.deathsis an error, not a counter: a counter is spelled bare. To total a counter across every viewer instead, useSC_API.chatters.metricwithnamed_counter_total),sanitize, andonEventReceivedevents (follows, subs, resubs, gifts, cheers, raids, chat messages, channel-point redemptions, hype trains, stream online/offline). Tips are delivered astip-latest(via StreamerCatalyst tipping). Hosts and merch purchases have no Twitch equivalent and are not delivered.
Both APIs see every event — an onEventReceived widget also receives StreamerCatalyst’s own events, and an SC_API widget also receives the StreamElements-shaped ones. Beyond the StreamElements set there are events for Twitch polls and predictions starting (only the start is delivered, so an overlay clears its own card at the poll’s end time or the prediction’s lock time), module events from Numbers, Events, Tipping, Chatters, Modomation, AI and Wheelspin, and charity-donation for a donation to your Twitch Charity campaign or a linked Tiltify campaign (with the donor’s message on Tiltify donations). A charity amount arrives in the currency’s smallest unit with its currency code and decimal places, and only live donations fire it — never imported history, and not a Tiltify donation that reached us more than 10 minutes late (that one still counts on the subathon timer and goals). Twitch chat arrives on two listeners for the same message (message and chat.message), so a widget that handles both must ignore the repeat or it will act on every command twice.
Three more things match how StreamElements serves an overlay, so widgets written for it run unmodified:
{fieldName}placeholders (or{{fieldName}}) in your HTML, CSS, and JS are replaced with the field’s current value when the overlay is served — sofont-size: {fontSize}pxin CSS works the same way it does on SE. Only names that match one of your fields are substituted, and the braces must hug the name;const { goal } = fieldDatais left alone.- jQuery is available to widgets whose code calls
$(...)orjQuery. It’s injected automatically for those and left out of everything else, so widgets written againstSC_APIstay lean. session.datais present on theonWidgetLoaddetail in SE’s shape (tip-goal,follower-session,cheer-month, …), which is what goal and counter widgets read at startup — and it’s filled from your real history, so an imported goal resumes its running total instead of restarting at zero every time OBS reopens the source.
Those counters come from the same data your dashboard shows:
| SE counter | Filled from |
|---|---|
follower-*, subscriber-*, cheer-* |
your Numbers follow / sub / bits totals |
tip-* |
your tipping ledger, converted to your currency |
follower-goal, subscriber-goal, cheer-goal |
your live Twitch creator goal’s progress, or the target you set in Numbers |
tip-goal |
your active donation goal |
session means your current stream (the last one if you’re offline). week and month are calendar windows in your channel timezone: this week from Monday at midnight, and this month from the 1st at midnight. With no goal set (no Twitch creator goal and no Numbers target), a *-goal counter counts your current stream, so it starts from zero each stream; set a Numbers target with a date range for a monthly goal. total means since StreamerCatalyst started tracking your channel, not your lifetime Twitch numbers — if you’re coming from StreamElements, expect that one to read lower than it did there. Two smaller notes: cheer counts only accumulate from the point this shipped (the bits amounts are complete), and the *-latest keys start empty and populate as soon as a follow, sub, cheer, or tip comes in.
Everything else — styling, layout, animations, and live reactions to follows, subs, cheers, and tips — behaves as it did on StreamElements.
Total widget source is capped at 1 MB. Widgets can be exported as a zip bundle.
Generate a widget with AI
Section titled “Generate a widget with AI”Describe the widget you want (up to 400 characters, plus an optional style hint) and the AI writes the full widget — markup, styles, behavior, and a settings schema — ready to preview and edit. From the editor’s AI assist panel you can also refine an existing widget with an instruction (“make the background glassy”, “add a combo counter”).
Generation is limited to 10 per hour and consumes your channel’s daily AI token allowance (Affiliate 25,000 / Partner 100,000 / Partner+ 250,000 tokens, reset at midnight UTC; unavailable on Free). Generated widgets follow the same safety rules as hand-written ones: vanilla self-contained code, no external scripts.
Import from StreamElements
Section titled “Import from StreamElements”The Import tab accepts a pasted StreamElements widget (HTML/CSS/JS/fields) or an exported zip. Imported widgets run against the SE_API compatibility layer at render time; the editor flags anything it stubs (e.g. SE_API.tip, the imperative shim, which stays stubbed even though tip-latest events fire).
A StreamElements export unzips to a folder holding widget.ini plus html.txt, css.txt, js.txt, fields.txt and data.txt — drop that zip in as-is. The importer reads widget.ini to find each part, converts SE’s field types to ours (colorpicker → color, dropdown → dropdown, googleFont → font, slider → slider), and carries data.txt over as your saved settings, so the widget arrives configured the way it was in StreamElements rather than blank. Plain bundles work too — any zip with an HTML, CSS, and JS file (plus an optional fields.json). Files macOS adds to zips (__MACOSX, ._ stubs) are ignored, and each file is capped at 500 KB with the zip capped at 5 MB.
Two things don’t survive the trip: dropdown option labels (the underlying values are kept, so the widget still behaves correctly) and images hosted on StreamElements’ CDN, which keep working from their original URLs but are worth re-uploading under Assets so they aren’t at the mercy of another service.
Sync a field with a goal
Section titled “Sync a field with a goal”An imported widget’s goal target is a number its author typed — change your real goal and the overlay keeps showing the old one. In the editor’s Fields tab, a number or text field whose name or label mentions a goal or target can be synced with a goal instead: flip the toggle, pick the goal and which part of it you want, and the field follows along.
| You can sync to | Which gives you |
|---|---|
| Your tip goal | Target, current, remaining, or the goal’s name |
| A Numbers goal — followers, subscribers, bits, or Plus Points | Target, current, remaining, or the goal’s name |
| Your charity goal — a Twitch Charity campaign or a linked Tiltify campaign that has a target | Target, current, remaining, or the campaign’s name, in the campaign’s currency |
Numbers goals resolve the same way the dashboard does: a target you set there wins, otherwise your live Twitch creator goal.
Plus Points is the one that needs nothing set up: with no target of your own it aims at the next Plus Program level (100, then 300), and its progress is the same month-to-date number the Plus panel and a Plus counter overlay show. It runs on Twitch’s monthly cycle, so it resets on the 1st like the figure on your Twitch dashboard.
Syncing is per field, so a widget can take its target from your tip goal and its title from the goal’s name while everything else stays hand-set. Values update on stream as the goal moves — there’s no need to restart the browser source when you raise a goal mid-stream.
Two things worth knowing. Your typed value stays put as the fallback: if the goal you synced to isn’t set yet (or gets archived), the field quietly uses what you typed instead of showing zero. And turning sync off keeps whatever number was on screen, so nothing jumps.
When you import a widget with goal-shaped fields, the Import tab offers to sync them right there. It defaults to keeping the imported value — accepting is a deliberate choice, since it overrides what the widget shipped with.
Sounds
Section titled “Sounds”Every native widget has a Sounds tab beside Style and Settings. Assign a sound to an event the widget shows and it plays at the moment the widget shows it — an alert sound waits in the same queue the alert does (gap and same-type cooldown included), so the two land together instead of drifting apart on a busy stream.
Two sources, one picker:
- The StreamerCatalyst library — a set of sounds we host, free on every tier.
- Your own uploads — the same audio library your custom widgets use. A sound you upload from the Sounds tab is available to a custom widget’s Sound field, and one you uploaded for a custom widget shows up here. Uploads use your widget storage and its per-tier sound size limit (see Assets); the library is available even on Free, where uploads are not.
Sound assignment is off by default — nothing makes a noise until you pick one.
One sound per event, per scene
Section titled “One sound per event, per scene”Within a Catalyst Scene, an event can carry one sound across all the widgets in it. If your Alerts widget plays a sound for New follower, the Goal widget in the same scene cannot also play one for it — its row says which widget has it, with a button to move it across. Different scenes are independent, so a BRB scene and your main scene can each have their own.
Moving a widget to another scene takes its sounds with it. If the widget in the new scene already has one of those events, that one assignment is dropped rather than doubled up — reassign it there if you want it.
Each widget only offers the events it can actually show:
| Widget | Events you can attach a sound to |
|---|---|
| Alerts | New follower, new subscriber, resub, gifted subs, bits cheered, tip, raid, charity donation, reward earned |
| Full-screen alerts | The same as Alerts |
| Subathon timer | New subscriber, gifted subs, bits cheered, tip, charity donation, new follower, raid |
| Subathon goals | New subscriber, gifted subs, bits cheered, tip, charity donation, channel-point redemption, goal reached |
| Goal | Goal reached |
| Hype train | Train starts, levels up, ends |
| Wheelspin | Wheel starts spinning, wheel lands on a winner |
| Chat display | First-time chatter, every chat message |
The other native widgets have no moment a sound belongs on, so their Sounds tab carries the upload manager only.
Chat display’s two keys
Section titled “Chat display’s two keys”First-time chatter fires once per person, ever — the first message someone has ever sent in your channel, the same moment the widget outlines in the overlay. Turning Highlight first-time chatters off changes the outline only; a sound you assigned still plays, because it is an assignment rather than an appearance option.
Every chat message fires on every message the widget draws.
A widget has one audio channel — a new sound stops whatever it was already playing — and chat is continuous, so an unspaced sound on a busy stream would restart before you could hear any of it. Both keys are therefore spaced by at least 0.4 s, and a message that lands inside that gap makes no sound. That applies to first-time chatters too: a raid can deliver several people’s first message inside a second, and without the floor none of them would be audible. Pick short sounds.
When both are assigned:
- A first-time chatter plays their sound rather than the per-message one, and may interrupt a blip that is playing — the rarer moment wins.
- That first-timer sound then holds the per-message one off for about 3 seconds, so it gets a run at being heard. This is a fixed hold, not a measurement of your file: a sting longer than that can still be cut short by the next message. Keep it under 3 seconds if you want it to finish.
Assign only Every chat message and a first-time chatter gets that sound instead — but it is the same sound on the same 0.4 s floor, so a first-timer who speaks straight after another message is silent like any other.
Testing
Section titled “Testing”The configurator’s preview plays your sounds when you press a simulate button, using the sound you have picked — including one you have not saved yet. Use the Sound on / Sound off button beside the simulate row to mute it. The Stage and the widget gallery never play sound.
Rights
Section titled “Rights”You are responsible for holding the rights to any audio you upload. Only upload sounds you own or are licensed to use on stream. We may remove uploaded sounds at any time at the request of a copyright holder, or for any other legal reason.
A removed sound stops playing everywhere on the next reload — in native widgets that had it assigned, and in custom widgets using it on a Sound field.
Assets
Section titled “Assets”Upload images, sounds, and videos for use in widgets. Uploads are validated by content type (PNG/JPEG/GIF/WebP/SVG, MP3/WAV/OGG/WebM audio, MP4/WebM video) and count against tier-based storage:
| Tier | Total storage | Max image | Max sound | Max video |
|---|---|---|---|---|
| Free | — (no uploads) | — | — | — |
| Affiliate | 200 MB | 5 MB | 10 MB | 50 MB |
| Partner | 2 GB | 10 MB | 20 MB | 200 MB |
| Partner+ | 10 GB | 25 MB | 50 MB | 500 MB |
Videos can optionally be transcoded for streaming (adaptive playback); transcoding minutes are a Partner-tier feature (600 min/month on Partner, 3,000 on Partner+). After a tier downgrade, assets that exceed the new tier’s limits get a 10-day grace period before their streaming copies are cleaned up (the original files stay in storage).
Real-time updates
Section titled “Real-time updates”All widgets receive events over a WebSocket to widgets.streamercatalyst.com. The SC runtime manages the connection — automatic reconnection with backoff, sequence tracking, and a replay window so brief disconnects don’t drop alerts. Simultaneous widget connections are tier-capped: 5 (Free), 10 (Affiliate), 25 (Partner), 50 (Partner+). Every widget open in your streaming software holds its own connection — a scene URL holds one for each widget placed on it, because each runs in its own frame — and once you are at the cap a further overlay is refused a connection until another closes.
Dashboard previews run in simulate mode — the same widget code fed with sample events and simulate buttons, no live connection or token needed.
Widget token
Section titled “Widget token”All overlay URLs carry your per-channel widget token (a 64-character read-only key). It is created for you automatically and every URL the dashboard hands you already includes it — there is nothing to generate or paste by hand.
Treat the URLs themselves as secrets and keep them out of screenshots and stream captures. If one leaks, open Widgets → Gallery and use Revoke all overlay URLs under Overlay URL security. That issues a new token, which immediately invalidates every URL you have already added to OBS — re-copy each browser source URL (scene URLs included) afterwards.
Adding a widget to your streaming software
Section titled “Adding a widget to your streaming software”- Open Widgets in the dashboard, enable the widgets you want in the Gallery, and configure each one.
- Arrange them on a scene in Catalyst Scenes.
- Copy the scene’s browser-source URL.
- In your streaming software, add a Browser Source, paste the URL, and set it to 1920×1080 (in OBS: Sources → + → Browser).
There are three kinds of browser-source URL, all on https://widgets.streamercatalyst.com and all carrying your widget token:
- A scene —
/v1/scene/<scene-id>?token=…, at 1920×1080. Every widget placed on the scene in one source, with the scene’s pack. This is the recommended setup. - One native widget —
/widget/native/<channel-id>?type=<type>&instance_id=<id>&token=…, from the widget’s Source tab, which also gives the recommended resolution for that widget and style. Use it when you’d rather position a widget yourself in OBS. It carries the scene’s saved pack, never a preview, and each Goal instance has its own. - One custom widget —
/widget/<channel-id>?widget_id=<id>&token=….
The Event Page browser source is a fourth, copied from the Events module. Widgets are tested with OBS Studio, Streamlabs, Meld, vMix and XSplit.
Tier availability
Section titled “Tier availability”| Feature | Free | Affiliate | Partner | Partner+ |
|---|---|---|---|---|
| Native widgets | 2 | 5 | Unlimited | Unlimited |
| Custom widgets | 1 | 5 | 10 | Unlimited |
| Simultaneous connections | 5 | 10 | 25 | 50 |
| Asset storage | — | 200 MB | 2 GB | 10 GB |
| AI generation / AI persona | — | ✓ | ✓ | ✓ |
| Video transcoding | — | — | 600 min/mo | 3,000 min/mo |
The native-widget limit counts distinct widget types you have enabled, across all your scenes: the same widget enabled in several scenes, all its styles, and every Goal instance use one slot. When you’re at the limit you can still enable a widget you already use somewhere else; only a new type needs a free slot.
On a downgrade, native widget types beyond the new limit are switched off (the ones you enabled first are kept), existing custom widgets are kept but no new ones can be created past the limit, and video assets get the 10-day grace period described under Assets. Applied widget packs stay where they are.
See Tier comparison for the full matrix.
API and endpoint reference
Section titled “API and endpoint reference”See Widgets — API endpoints for the full list of HTTP endpoints.
Auth reference
Section titled “Auth reference”See Widgets — Authentication & permissions for the OAuth scopes this module uses and the EventSub subscriptions it relies on.
Share Feedback
Need help or want to chat? Join our Discord to get support, report bugs, and talk with other streamers.▸ What we're sending
| Module | — |
| Page | — |
| Browser | — |
| Screen | — |
| Channel | anonymous |
| Submitted | — |