What Are Rules?

A rule is an automation pipeline that connects a stream event to one or more output actions. Rules work across all supported platforms. Every rule has three stages:

  1. Trigger — the stream event that starts the rule (a chat message, a gift, a follow, etc.)
  2. Filters — optional conditions that must be met before the rule fires (gift value thresholds, regex patterns, cooldowns)
  3. Action Chain — one or more actions executed when the trigger passes all filters (send OSC, trigger PiShock, play overlay media, run a script)

Rules are evaluated in real time as events stream in from your connected platforms. When an event matches a rule's trigger type and passes every filter, the action chain executes immediately.

Free Tier Limit: The free plan supports up to 5 rules. Upgrade to Pro for unlimited rules and advanced filter options.

Multi-Platform Rules

Rules in VMSC are not limited to a single platform. Each rule includes a platform selector displayed as a row of clickable bubbles: TikTok, Twitch, YouTube, Kick, Streamlabs, and StreamElements. You can enable multiple platforms on a single rule, so one rule can respond to events from several sources simultaneously.

When you change the selected platforms, the available event types in the trigger dropdown update dynamically to show only the events supported by the currently selected platforms. For example, selecting only Twitch reveals Twitch-specific events like channel_point_redeem and hype_train_begin, while selecting TikTok shows gift, like, and envelope.

Tip: If you want the same reaction for chat messages on all platforms, simply enable all platform bubbles on a single rule with a chat trigger. No need to duplicate the rule for each platform.

Event Types

Each rule is bound to exactly one event type. The available events depend on which platforms are selected. Below are the TikTok LIVE events as an example (see the Event Types reference for all platforms):

Event Description Key Data
chat A viewer sends a chat message {user}, {message}
gift A viewer sends a gift {user}, {gift}, {count}, {diamondCount}
like A viewer taps the like button {user}, {count}
follow A viewer follows your account {user}
share A viewer shares the stream {user}
join A viewer enters the live room {user}
subscribe A viewer subscribes to the channel {user}
envelope A treasure chest / envelope event {user}, {coins}

Filters

Filters narrow down which events actually trigger a rule. You can stack multiple filters on a single rule — all filters must pass for the action chain to execute.

Gift Filter

The structured gift filter lets you target specific gifts or gift value ranges. It is only available on gift type rules.

{
  "giftFilter": {
    "giftName": "Rose",
    "minDiamonds": 1,
    "maxDiamonds": 100,
    "minCount": 5
  }
}

Comparison Operators

Numeric fields such as count and diamondCount support standard comparison operators in filter expressions:

OperatorMeaningExample
==Equal tocount == 10
!=Not equal tocount != 0
>Greater thandiamondCount > 50
>=Greater than or equaldiamondCount >= 100
<Less thancount < 5
<=Less than or equalcount <= 20

Regex Filter

For chat events, you can write a regular expression to match against the message text. This is useful for keyword triggers, command parsing, or pattern matching.

// Match messages starting with "!shock"
/^!shock/i

// Match messages containing "hello" or "hi"
/\b(hello|hi)\b/i

// Match exact command with argument
/^!osc\s+(\w+)\s+(\d+)$/
Tip: Use the i flag for case-insensitive matching. VMSC tests the regex against the full message string using RegExp.test().

Accumulators

Accumulators let you collect events over time and only fire the action when a threshold is reached. This is useful for "every N likes" or "after 100 gifts" type rules.

Count Mode

In count mode, the accumulator increments a counter each time the event fires. The action chain only executes when the counter reaches the configured threshold.

{
  "accumulator": {
    "enabled": true,
    "mode": "count",
    "threshold": 50,
    "resetAfterTrigger": true
  }
}

Threshold & Reset

For example, setting threshold: 100 with resetAfterTrigger: true on a like event will fire once every 100 likes. The counter resets after each trigger.

Cooldowns

Cooldowns prevent a rule from firing too frequently. VMSC supports two types of cooldowns that can be used independently or together.

Per-Rule Cooldown

A global cooldown for the entire rule. After the rule fires, it will not fire again until the cooldown period has elapsed, regardless of which viewer triggered it.

{
  "cooldown": {
    "global": 10
  }
}

In this example, the rule can fire at most once every 10 seconds.

Per-User Cooldown

A cooldown scoped to individual viewers. Each viewer has their own independent timer. This is useful for preventing spam from a single user while still allowing other viewers to trigger the rule.

{
  "cooldown": {
    "perUser": 30
  }
}

In this example, each viewer can only trigger the rule once every 30 seconds, but different viewers can trigger it simultaneously.

Actions

Actions are the outputs that execute when a rule fires. Each action targets a specific output system. VMSC supports 29+ fully polished action editors, presented in a visual Action Grid UI.

Action Grid UI

When adding an action to a rule, VMSC displays a visual grid of square cards — each card represents an action type with an icon and label. The grid includes a search/filter bar at the top to quickly find actions by name, and a "+ New Action" card at the end for quick access. Click any card to open its dedicated editor.

Action Targets

Below is a selection of available action types. Each has a fully polished, dedicated editor panel:

TargetDescription
VRChat OSC Send OSC messages to VRChat — toggle avatar parameters, display chatbox messages, trigger animations
PiShock / OpenShock Trigger vibrations, shocks, or beeps on connected PiShock or OpenShock devices
Script Runner Execute a local script or command (PowerShell, Python, batch file, etc.)
Overlay Update overlay widgets — show alerts, play media, update progress bars, push event feed items
Webhook Send HTTP requests to any URL (Discord, custom endpoints, etc.) — includes a Test button to fire a test request from the editor
Audio Play a local audio file through the system audio output — includes a preview play button in the editor
Log Write a formatted message to the VMSC event log for debugging and auditing
Kill Process Terminate a running process by name or PID
Global Variable Set, increment, or toggle a global variable that persists across rules
Countdown Timer Start, pause, reset, or adjust a countdown timer linked to an overlay widget
Trigger Alert Fire an alert through the Alert Engine
Voicemod Change voice effects or trigger soundboard clips via the Voicemod integration
TTS Text-to-speech output with per-action voice override — each TTS action can use a different voice
29+ Actions: The table above highlights a selection. Additional action types include OBS Scene Switch, Twitch Chat Send, Streamlabs Alert, Camera Pin, Outfit Change, and more. All editors are fully polished with validation, help text, and inline previews where applicable.

Multi-Output Actions

A single rule can execute multiple actions in sequence. For example, a gift event could simultaneously:

  1. Send an OSC parameter to VRChat to trigger an avatar reaction
  2. Display the gift name and sender in your overlay event feed
  3. Send a PiShock vibration
  4. Post a notification to your Discord channel

Actions execute in the order they appear in the action list. Each action runs independently, so a failure in one action does not prevent subsequent actions from executing.

Template Variables

Many action fields support template variables that are replaced at runtime with data from the triggering event. Wrap variable names in curly braces:

VariableDescriptionAvailable On
{user}Display name of the viewerAll events
{userId}Unique TikTok user IDAll events
{message}Chat message textchat
{gift}Gift name (e.g., "Rose")gift
{count}Event count (likes, gifts)gift, like
{diamondCount}Diamond value of the giftgift
{coins}Coin value from envelopeenvelope

Using Variables in Actions

Template variables work in OSC chatbox messages, overlay text, Discord webhook content, and script arguments:

VRChat Chatbox:  "{user} sent {count}x {gift}!"
Overlay Text:    "New follower: {user}"
Discord Webhook: "**{user}** just gifted {count}x {gift} ({diamondCount} diamonds)"
Script Argument: --user "{user}" --gift "{gift}" --count {count}

Full Example

Below is a complete rule configuration that triggers on Rose gifts of 5 or more, has a 10-second global cooldown, and sends both an OSC message to VRChat and a PiShock vibration:

{
  "name": "Rose Gift Reaction",
  "enabled": true,
  "event": "gift",
  "filters": {
    "giftFilter": {
      "giftName": "Rose",
      "minCount": 5
    }
  },
  "cooldown": {
    "global": 10
  },
  "actions": [
    {
      "target": "vrchat-osc",
      "type": "chatbox",
      "message": "{user} sent {count}x Roses!"
    },
    {
      "target": "pishock",
      "type": "vibrate",
      "intensity": 50,
      "duration": 2
    }
  ]
}
Note: Rule configurations shown here are for reference. In practice, you build rules using the visual editor in the Rules tab — no JSON editing required.

Timer System

The Timer System sub-tab within Rules provides dedicated timer management. VMSC supports three timer types:

Timer TypeDescription
Countdown Counts down from a set duration to zero. Fires linked actions when it reaches zero.
Interval Fires linked actions repeatedly at a fixed interval (e.g., every 30 seconds).
Stopwatch Counts up from zero. Useful for tracking elapsed time with linked milestone actions.

Each timer can have linked actions that execute when the timer fires. Timers display live on the dashboard and can optionally auto-start when VMSC launches or when a stream connection is established.

Timed Toggle (Boolean Actions)

For boolean-type actions — particularly VRChat OSC parameters — VMSC supports a timed toggle mode. This sets a parameter to true for a configured number of seconds, then automatically reverts it to false.

This is ideal for triggering temporary avatar animations, toggling accessories, or activating VRChat world features for a fixed duration without needing a separate reset rule.

Outfit System

The Outfit System sub-tab lets you define and manage avatar outfit presets. Outfits can be triggered by rules or switched manually. For full details, see the Outfit System dedicated page.

Camera Pin System

The Camera Pin System sub-tab provides camera position presets that can be triggered by stream events. Pin specific camera angles and switch between them via rule actions. For full details, see the Camera Pin System dedicated page.

Best Practices