OverlayThing Docs
Home
Login / Request Access
01 Get started
Introduction Quickstart Add to your stream
02 Overlays
Overlays The editor Overlay URLs Alert queue Share, export & import
02.1 Widgets
Widgets overview Alerts Variations Hype Train Text to speech Goals Countdown & subathon Chat box Data labels Counter Text, image & video
03 Chatbot
Chatbot overview Getting started Commands Variables Conditionals Recipes API commands Integrations Command API & Copy-URL Chat moderation Bot account Bot settings
03.1 Chatbot modules
Modules overview Timers Counters Quotes Chat alerts Welcome Ad Breaks Giveaways Queue Song requests Loyalty
04 Flows
Overview Build a flow Triggers Conditions Actions Using data Examples
05 Channel Rewards
Channel Rewards
06 Remote Control
Overview Connect OBS Studio Connect Meld Studio Bindings & triggers Security & access
07 OBS Dock
Overview & setup Layouts & display Chat & Needs You Activity & media Stream info & controls
08 Companion
Companion overview Install & pair Feed, chat & channel Scripting The scripting API Permissions & security
09 Monetize
Tip page Tip settings Merch with Fourthwall
10 Build your own
Describe & Build Custom widgets Widget SDK
11 Your data
Dashboard Stream data Chat log Moderation
12 Account
Settings & connections Export your data Import from StreamElements
13 Reference
Label tokens Keyboard shortcuts FAQ Troubleshooting
Flows/Conditions
Flows

Conditions.

Conditions are the rules in a flow. They decide whether the run keeps going and which path it follows. A condition has a true path and a false path, and the run takes exactly one of them based on the answer.

Branching

A condition looks at a value and follows its true branch when the rule passes, or its false branch when it does not. You connect whatever should happen to the matching branch. Leave a branch unconnected and that outcome simply ends the run.

condition branchtrue / falseLive
Raid · 212 viewers
Viewers at least 5?
TRUE Shout out + overlay
FALSE Stop the flow

The kinds of condition

Branching
Check a conditionCompare a value against another and follow the true or false branch.
Within a time windowFollow the true branch the first time enough trigger events accumulate within a rolling time window.
Switch on a valueRoute to a different branch depending on which case a value matches. Inputs that match no case follow the default branch.
Held message typeRoute an AutoMod hold or resolve event by what kind of hold it is: a link from a trusted domain, an AutoMod content flag, a blocked term, any other link, or anything else.
Link intentDecides whether a held message's link is really a link or a typo.
Check multiple conditionsCombine one or more checks with AND or OR, and follow the true branch when they pass.
Random chanceFollow the true branch a percentage of the time at random. Use it to randomize whether downstream actions run.
Check watchtimeCompare a viewer's tracked watch time against a threshold.
Check followageCompare how long a viewer has followed the channel against a threshold.
Check account ageCompare how old a viewer's Twitch account is against a threshold.
Check user levelCompare a viewer's role (subscriber, VIP, moderator, ...) against a minimum level.
Check subscription tierCompare a viewer's current subscription tier.
Check if a moderatorTrue when the viewer currently holds the moderator role on your channel.
Check if a VIPTrue when the viewer currently holds the VIP role on your channel.
Check if liveTrue when the channel is currently live, optionally requiring a minimum uptime.
Check time of dayTrue during a configured time-of-day window, evaluated in the channel's Bot Settings timezone.

A quick read on each: Check a condition compares one value against another (equals, greater or less than, at least, contains, starts or ends with, or a regular expression match). Check multiple conditions combines several checks with AND or OR. Within a time window watches for a number of events inside a rolling window. Switch on a value routes to a different path per value instead of just true or false. Random chance takes the true path a set percentage of the time.

Counting in a window

A time window condition is how you react to a burst rather than a single event. It counts matching events inside a rolling window (and can sum quantities, so a gift bomb of seven counts as seven), fires once the moment the threshold is crossed, then stays quiet until the window clears so you do not get a flood.

rate / window7 in 15sLive
0 / 7 gifted in 15s
Fires once, then latched

Random chance

The random chance condition is a slider from 0 to 100. At 50, about half of events follow the true path; at 100 every event does, at 0 none do. Use it to keep a sound or a shout-out from firing every single time, so it stays a treat.

Read the rule out loud

A condition reads best as a yes or no question. If you can phrase it as "is the message longer than 200 characters?", it maps cleanly onto a true and a false branch.

Checking a viewer

Nine conditions look specifically at the person behind the event, or the channel around it:

  • Check watchtime compares tracked watch time (in hours) against a threshold. Defaults to the person who caused the trigger.
  • Check followage looks at how long they have followed (in days). "At least 0 days" is a quick way to ask "do they follow at all?".
  • Check account age looks at how old their Twitch account is, in days.
  • Check user level checks a minimum role: subscriber, VIP, moderator or broadcaster. Only meaningful on chat-triggered flows.
  • Check subscription tier checks for any paid tier, or a specific Tier 1, 2 or 3.
  • Viewer is a moderator and Viewer is a VIP ask Twitch directly whether they hold the role, so they work on any trigger, not just chat.
  • Check if live is true while you are live, optionally only once you have been live past a minimum uptime.
  • Check time of day is true inside a time window you set (it can wrap past midnight), read in your Bot Settings timezone, with an optional set of weekdays.

Held messages and links

Twitch can hold a chat message for review instead of posting it: AutoMod holds messages it flags for content, blocked terms hold on your term list, and, when you enable hold links for review in your Twitch moderation settings, messages containing links are held too. OverlayThing never holds anything itself here. Holds are Twitch's; flows only decide what happens to a message Twitch has already held.

The Held message type condition routes each held message down one of five paths, checked in this order:

  • Trusted link: the message was held only because of links, it contains nothing besides those links, and every one of them is on your trusted domains list. This is the only path that is safe to wire straight to Approve: there is no other content to review, so releasing it costs nothing (no AI call).
  • Other link: the message contains at least one link that is not on your trusted list, no matter why it was held. A suspicious link outranks everything else, including AI review. This is where you send a "links are not allowed" reply, deny, or simply leave it unwired so a human decides.
  • AutoMod flagged: AutoMod held it for content, and any links it carries are all trusted. The text is the concern, so this is the path to send through an AI decision.
  • Blocked term: it matched your blocked terms, same link guarantee.
  • Other: everything else. That includes a trusted link with surrounding text (the words still deserve review), and any hold type Twitch adds in the future that this node does not recognize yet.
The guarantee that makes AI paths safe

Every path except Other link is free of untrusted links by construction. A message carrying an unvetted URL always exits at Other link before anything downstream runs, so an AI decision or an Approve wired to the other paths can never release a link you have not trusted.

A path you leave unwired simply ends the run, and an untouched held message stays in the held queue for a human, in your dock and in Twitch's mod view. Doing nothing is always the safe default.

Trusted link domains

The node reads your channel's trusted link domains list automatically; there is nothing to configure on the node itself. You manage the list in Chatbot → Chat Filters on the links filter card, or under Settings → Moderation; both edit the same list, and the chatbot's own links filter uses it too.

  • Matching is by domain, never by text: an entry like twitch.tv matches twitch.tv and any subdomain such as clips.twitch.tv, but not lookalikes like twitch.tv.example.com or a link that merely mentions twitch.tv in its path.
  • Every link in a message must match. One untrusted link sends the whole message to Other link.
  • An empty list trusts nothing, so until you add domains, every link-hold routes to Other link.
  • "Nothing besides the link" is strict: any other words, including an emote name, count as content, and the message routes for review instead of the Trusted link fast path.

Every held-message trigger also exposes the routing facts as data you can use anywhere in the flow: {{trigger.hold_reason}} (why Twitch held it), {{trigger.contains_link}}, {{trigger.link_only}}, {{trigger.links}} and {{trigger.link_domains}}.

Cooldown is a control, not a condition

Cooldown reads like a condition but you will find it grouped with the controls (next to Wait and Repeat). It gates how often a flow may proceed, per user or channel-wide, and gives you a separate exit to run when a viewer is still cooled down.

Link intent

The Link intent condition decides whether a message that looks like a link really intends to share one, or a typo. It sits downstream of an AutoMod hold-type condition routed to the "Other link" port, or within the links filter's opt-in typo check. It reads the held message and classifies whether the detected URL-like text is a real link or a typo (a missing space after a period, for example, can turn "ok.So anyway" into what reads like a link, the same shape as someone typing "my store is at ok.so" on purpose).

The condition branches on two ports: Intended link when a link is confirmed, and Typo when it is not. Five routing rules, evaluated in order, decide which port fires: (1) a URL with a scheme (http://, https://), a www. prefix, or a path (domain/slash) routes to intended without judgment. (2) No link-shaped text at all routes to typo. (3) A test-fire button or flow simulation never calls the judge (no spend) and defaults to intended link. (4) Ambiguous candidates consult the judge: if the verdict is intended, route to intended link. If the verdict is typo, route to typo. (5) If the judge is unavailable (a transient error, timeout, or channel limit reached), default to intended link so a human can review it. The message is not actioned by the flow itself. You add actions on each branch to decide what happens next.

Works with held messages, not checked messages

This condition sits downstream of an AutoMod hold-type branch on the "Other link" port, or embedded in the links filter as part of its opt-in typo check. It does not re-check trusted domains. Those are exempted at an earlier point in the chain.

Related

  • Actions
  • Triggers
  • Using data
  • Build a flow
Previous Triggers Next Actions
On this page
Ask the docs
Have a question?
Thinking it through...
Answer
Get an answer instantly; our model is trained on every feature of our streaming suite.
ESC
Get started
More than overlaysOverlayThing is an all-in-one toolkit for your Twitch channel: a visual overlay … Get started From zero to liveThe fastest path to a working overlay on your stream. Sign in, build something, … Get started Add to your streamOne overlay, one URL, one browser source. OverlayThing works with any streaming … Get started
Overlays
OverlaysYour overlays live on the Overlays page, a gallery of every canvas you have buil… Overlays The editorWhere overlays are built. A canvas in the middle, your layer stack on the left, … Overlays Overlay URLsEach overlay has its own private URL. Add it to your streaming software once and… Overlays Alert queueWhen events pile up (a gifted-sub train, a hype raid), you usually want alerts t… Overlays Share, export & importMove overlays and individual widgets between your own overlays, back them up as … Overlays
Widgets
Widgets overviewWidgets are the building blocks of an overlay. Some fire on an event and leave (… Widgets AlertsThe moment something happens, an alert fires on screen with motion, sound and yo… Widgets VariationsOne event, different reactions. Variations let a single alert play a bigger vers… Widgets Hype TrainWhen a Hype Train rolls on your channel, OverlayThing can fire an on-screen aler… Widgets Text to speechHave alerts read messages aloud: a tip note, a resub message, a redemption. Text… Widgets GoalsA progress bar with a target. It fills itself as events come in, and you can cel… Widgets Countdown & subathonTwo timer widgets. A countdown runs down to a time or for a set duration. A suba… Widgets Chat boxPut your Twitch chat on stream, great for handheld, IRL or face-cam layouts wher… Widgets Data labelsSmall live readouts that keep your channel numbers on screen: latest follower, l… Widgets CounterPut a live number on your overlay: deaths, wins, fails, anything you keep a runn… Widgets Text, image & videoThe plain building blocks. Use them for backgrounds, frames, logos, panels and l… Widgets
Chatbot
The chatbotA Twitch chat bot built into OverlayThing: custom commands, timers, counters, qu… Chatbot Getting startedTurn the bot on, make it a moderator, and pick your command prefix. Three small … Chatbot CommandsCommands are the heart of the bot. A viewer types a trigger, the bot replies wit… Chatbot VariablesVariables are $( … ) tokens you drop into a command response. They fill in with … Chatbot ConditionalsConditionals let one command react differently to different viewers and situatio… Chatbot RecipesCopy-ready command responses for the trickier variables: shoutouts, weather, dic… Chatbot API commandsPower-user territory. Wire a command to an external API and pull a live value in… Chatbot IntegrationsBuilt-in connections to outside services that add ready-made variables. Today th… Chatbot Command API & Copy-URLFire bot commands and module actions from outside chat: a Stream Deck button, a … Chatbot Chat moderationWhen the bot is a moderator it can keep chat clean automatically: tunable spam f… Chatbot Bot accountChoose which Twitch account the bot posts as: the shared OverlayThing bot, your … Chatbot Bot settingsThe channel-wide behavior of the bot: your prefix, how it replies, how cooldowns… Chatbot
Chatbot modules
ModulesThe bot is built from modules you switch on one at a time. Turn on only what you… Chatbot modules TimersPost recurring messages on a schedule: rules, your socials, a sponsor plug. Time… Chatbot modules CountersTrack a number from chat: deaths, wins, fails, anything you want to tally live.… Chatbot modules QuotesA searchable quote book your chat builds with you, one memorable line at a time.… Chatbot modules Chat alertsPost a chat message when someone follows, subscribes, resubs, gifts, cheers or r… Chatbot modules WelcomeGreet people automatically: first-time chatters, returning regulars, and incomin… Chatbot modules Ad BreaksHave the bot speak up around your ad breaks: a heads-up before they hit, a line … Chatbot modules GiveawaysRun a giveaway and draw a winner from chat, by keyword entry or passive presence… Chatbot modules QueueLet viewers line up to play with you. They join, you pull people up in order.… Chatbot modules Song requestsViewers request YouTube songs by name or link and the bot builds a play queue, w… Chatbot modules LoyaltyTrack how long your viewers watch, so you can spot and reward your most loyal re… Chatbot modules
Flows
FlowsFlows let you wire your channel together with no code. Pick something that happe… Flows Build a flowYou build a flow on a canvas: add nodes, connect them in the order they should r… Flows TriggersA trigger is the event that starts a flow. Every flow has at least one. Most tri… Flows ConditionsConditions are the rules in a flow. They decide whether the run keeps going and … Flows ActionsActions are the things a flow does. Most of what the rest of the platform can do… Flows Using dataThe best flows feel personal because they use the real details of the event. Dro… Flows ExamplesFour flows from simple to advanced, drawn as the real graphs you build on the ca… Flows
Channel Rewards
Channel RewardsCreate channel-point rewards through OverlayThing and your flows can do things T… Channel Rewards
Remote Control
Remote ControlDrive your local OBS Studio or Meld Studio straight from OverlayThing. Switch sc… Remote Control Connect OBS StudioAdd the Remote Control URL as a dock or browser source, enable the OBS WebSocket… Remote Control Connect Meld StudioAdd the blank Remote Control source to every Meld scene. There is no password to… Remote Control Bindings & triggersA binding is one or more actions plus the trigger that fires them. Build them on… Remote Control Security & accessThe Remote Control URL is a key to your streaming software, and your OBS passwor… Remote Control
OBS Dock
OBS DockChat, activity, media requests and stream controls in a panel docked inside OBS.… OBS Dock Layouts & displayBuild the dock out of panes, save arrangements as layouts, and open a second doc… OBS Dock Chat & Needs YouRead and send chat as yourself, moderate from the message row, and clear AutoMod… OBS Dock Activity & mediaEvery channel event in one filterable feed, and full control of the media queue … OBS Dock Stream info & controlsEdit your title, category and tags without leaving OBS, and run markers, clips, … OBS Dock
Companion
CompanionA native desktop app for macOS and Windows that pairs with your OverlayThing acc… Companion Install & pairDownload the Companion for your operating system, open it, and approve one short… Companion Feed, chat & channelThe Companion mirrors the parts of your dashboard you touch mid-stream, on your … Companion ScriptingWrite small scripts that react to your stream and do things only a local app can… Companion The scripting APIThe complete ot surface: every event you can listen to, every action you can tak… Companion Permissions & securityScripts run in a sandbox and start with zero powers. You grant each capability p… Companion
Monetize
Your tip pageA branded donation page viewers can reach from a single link in your panels or c… Monetize Tip settingsEverything behind your tip page: the payment connections, your branding, the amo… Monetize Merch with FourthwallConnect your Fourthwall shop and merch sales fire alerts on stream, the same way… Monetize
Build your own
Describe & BuildDescribe the widget you want in plain language and OverlayThing builds a styled,… Build your own Custom widgetsFor when you want to break the mold. Write your own HTML, CSS and JavaScript, re… Build your own Widget SDKThe API your custom widgets use to receive live events and persist state. It is … Build your own
Your data
DashboardYour home base. The numbers that matter at a glance, a chart to spot trends, and… Your data Stream dataThe numbers behind your overlay. Labels, goals and leaderboards all read from he… Your data Chat logA searchable archive of your chat, events and moderation actions. Look up what a… Your data ModerationEvery chat message, tip note and alert message runs through a moderation pipelin… Your data
Account
Settings & connectionsYour account, your connected services, and the controls that protect your access… Account Export your dataYour data is yours. From Settings, under Data and privacy, you can take it with … Account Import from StreamElementsAlready set up elsewhere? Bring your overlays, alert settings, goals and history… Account
Reference
Label tokensTokens are {placeholders} you drop into alert text, label templates and goal lab… Reference Keyboard shortcutsThe editor is built for the keyboard. These are the ones worth learning.… Reference FAQShort answers to the questions we hear most. For step-by-step fixes when somethi… Reference TroubleshootingQuick fixes for the things that trip people up most.… Reference
↑↓ navigate ⏎ open esc close