Skip to content

Actions reference

Every action a macro step can run, in the order the Actions page and the macro editor's palette list them: by integration, then by group. For how actions, steps and providers fit together, read Actions first.

How to read the tables:

  • Setting is the label on the step's form. Ones marked required must be filled in.
  • Type: Text boxes take {variables} where the details say so; Pick is a list the app fills in (your scenes, your rewards); Choice is a fixed list, shown here with the exact words the app uses; Duration is written like 30s, 5m or 1h30m; On/off is a switch; List takes several entries, separated by commas unless the details say one per line.
  • Default at the start of the details is what an empty setting means.
  • Outputs are variables the step reports back for later steps, such as {clip_url}.
  • The ID is shown under each action's name in the app; you never need to type it.

At a glance

Integration Groups Actions
Twitch Chat, Stream, Moderation, Raids, Lookups, Chat modes, Roles, Polls & predictions, Channel points, Ads 33
OBS Studio Stream & recording, Sources, Audio, Filters, Advanced, Text & media, Scenes, Capture 34
Steam Steam 2
Discord Discord 2
Queues Queue 5
Tools Utilities, Web, Screen, Sound & files 10
Webhooks Webhooks 1
Viewers Viewers 5
Overlays Overlays 10

Shared actions

These do one job on several integrations, so they appear under each integration that can run them. A step with no provider picked runs on every connected one at once; pick providers on the step to limit it.

Send chat message

ID chat.send · runs on Twitch

Post a message in chat. {variables} are filled in from earlier steps.

Setting Type Details
Message required Text Takes {variables}.

Clip

ID clip · runs on Twitch and OBS Studio

Capture the moment: OBS saves its replay buffer, Twitch creates a clip.

Unless you pick providers on the step, it runs on both at once. The default !clip macro uses two steps instead, one per provider, so it carries on when only one of them works.

No settings.

Outputs from Twitch:

Output Meaning
{clip_id} ID of the new clip.
{clip_url} Public URL of the new clip.

Outputs from OBS Studio:

Output Meaning
{replay_path} Path of the saved replay file.

Marker

ID marker · runs on Twitch and OBS Studio

Mark this moment: a Twitch stream marker for the VOD, an OBS recording chapter.

Unless you pick providers on the step, it runs on both.

Setting Type Details
Description Text Optional, up to 140 characters. For example: {user} redeemed a highlight. Takes {variables}.

Outputs from Twitch:

Output Meaning
{marker_position} Where the marker is in the VOD, in seconds from its start.

Outputs from OBS Studio:

Output Meaning
{chapter_name} The name given to the chapter.

Switch scene

ID scene.set · runs on OBS Studio

Make a scene the live (program) scene.

Setting Type Details
Scene required Pick Picked from your OBS scenes.

Twitch

Twitch actions need you to be logged in. One that needs a Twitch permission your login lacks is marked re-login on the Actions page and with a warning sign in the macro editor's palette; log in again to grant it.

Also offered here: Send chat message, Clip, Marker (see Shared actions).

Chat

Send announcement

ID twitch.announce

Posts a highlighted announcement in your chat.

Setting Type Details
Message required Text Up to 500 characters. Takes {variables}.
Color Choice Default primary Primary uses your channel's accent color. One of primary, blue, green, orange, purple.

Reply to chat message

ID twitch.reply

Replies to the chat message that triggered this. If something else triggered it, sends a normal chat message.

Setting Type Details
Message required Text Up to 500 characters. Takes {variables}.

Shout out a channel

ID twitch.shoutout

Gives another streamer a shoutout in your chat. You must be live.

Setting Type Details
Channel required Text A channel name, such as {args} or {user_login}. A leading @ is fine. Takes {variables}.
Output Meaning
{shoutout_user} Display name of the channel that got the shoutout.

Stream

Set category

ID twitch.set_category

Change the game or category of your stream.

Setting Type Details
Category required Text The name as shown on Twitch, for example Just Chatting. A close match is used if there is no exact one. Takes {variables}.
Output Meaning
{category} Name of the category that was set.

Set tags

ID twitch.set_tags

Replace the tags of your stream. Leave the list empty to remove all tags.

Setting Type Details
Tags List Up to 10 tags, each up to 25 letters or digits, with no spaces. Separate entries with commas.

Set stream title

ID twitch.set_title

Change the title of your stream.

Setting Type Details
Title required Text Up to 140 characters. For example: Chill stream with {user}. Takes {variables}.

Moderation

Ban a user

ID twitch.ban

Bans a viewer from your chat until you unban them.

Setting Type Details
User required Text A user name, such as {args} or {user_login}. A leading @ is fine. Takes {variables}.
Reason Text Shown to the user and the other moderators. Up to 500 characters. Takes {variables}.

Clear chat

ID twitch.clear_chat

Removes every message from your chat.

No settings.

Delete the chat message

ID twitch.delete_message

Removes a chat message: the one that triggered this, unless a message ID is given.

Setting Type Details
Message ID Text Leave empty to delete the chat message that triggered this. Takes {variables}.

Time out a user

ID twitch.timeout

Stops a viewer from chatting for a while.

Setting Type Details
User required Text A user name, such as {args} or {user_login}. A leading @ is fine. Takes {variables}.
Length Duration Default 10m For example 10m or 1h. From 1 second to 14 days.
Reason Text Shown to the user and the other moderators. Up to 500 characters. Takes {variables}.

Unban a user

ID twitch.unban

Lifts a ban or timeout.

Setting Type Details
User required Text A user name, such as {args} or {user_login}. A leading @ is fine. Takes {variables}.

Warn a user

ID twitch.warn

Warns a viewer. They cannot chat until they acknowledge the warning.

Setting Type Details
User required Text A user name, such as {args} or {user_login}. A leading @ is fine. Takes {variables}.
Reason required Text Shown to the user and the other moderators. Up to 500 characters. Takes {variables}.

Raids

Cancel raid

ID twitch.cancel_raid

Cancel the raid you started, if it has not happened yet.

No settings.

Start raid

ID twitch.raid

Start a raid to another channel. Twitch gives you a short countdown, so you can still cancel it.

Setting Type Details
Channel required Text The channel to raid, for example somestreamer or {user}. Takes {variables}.

Lookups

Get stream info

ID twitch.channel_info

Read your current title, category, tags and language into variables, for example for a !title command.

No settings.

Output Meaning
{channel_title} Your current stream title.
{channel_category} Your current category (game).
{channel_tags} Your tags, separated by commas.
{channel_language} Your stream language as a two-letter code, for example en.

Look up viewer

ID twitch.user_lookup

Look up a Twitch user and keep what you learn in variables, for example to show their follow age in chat.

Setting Type Details
User required Text A Twitch name, for example {user}, or {arg1} for the first word after a chat command such as !lookup bob. Takes {variables}.
Output Meaning
{lookup_user} The user's display name.
{lookup_login} The user's login name, in lowercase.
{lookup_id} The user's Twitch ID.
{account_created} Day the account was created (YYYY-MM-DD).
{account_age} How old the account is, for example 3 years.
{avatar_url} Link to the user's profile picture.
{description} The user's profile text.
{broadcaster_type} partner, affiliate, or empty.
{follows_since} Day the user followed you (YYYY-MM-DD), or "not following".
{followage} How long the user has followed you, for example 1 year 2 months. Empty if not following.
{last_game} The category the user last streamed, if any.
{last_title} The title of the user's last stream, if any.

Chat modes

Change a chat mode

ID twitch.chat_mode

Turns slow, followers-only, subscribers-only, emote-only or unique-chat mode on or off.

Setting Type Details
Mode required Choice One of slow, followers, subscribers, emote_only, unique_chat.
State required Choice One of on, off.
Time Duration Slow mode: wait between messages, 3s to 120s (default 30s). Followers mode: how long they must have followed, such as 10m or 24h (default 0 = any follower). Ignored by other modes.

Shield mode

ID twitch.shield_mode

Turns Shield Mode on or off. It applies the safety settings you set up on Twitch.

Setting Type Details
State required Choice One of on, off.

Roles

Add or remove a moderator

ID twitch.moderator

Makes someone a moderator of your channel, or takes it away.

Setting Type Details
User required Text A user name, such as {args} or {user_login}. A leading @ is fine. Takes {variables}.
Change Choice Default add One of add, remove.

Add or remove a VIP

ID twitch.vip

Gives or takes away VIP status in your channel.

Setting Type Details
User required Text A user name, such as {args} or {user_login}. A leading @ is fine. Takes {variables}.
Change Choice Default add One of add, remove.

Polls & predictions

End poll

ID twitch.poll_end

End the running poll now.

Setting Type Details
Poll ID Text Leave empty to end the poll that is running. Or use {poll_id} from "Start poll". Takes {variables}.
Hide the results On/off Default Off Off: the results stay visible in chat. On: the poll disappears.

Start poll

ID twitch.poll_start

Start a poll in your chat. Only one poll can run at a time.

Setting Type Details
Question required Text Up to 60 characters. Takes {variables}.
Choices required List Two to five choices, each up to 25 characters. Separate entries with commas.
Duration Duration Default 1m How long viewers can vote: 15s to 30m.
Channel points per extra vote Number 0 = viewers cannot spend channel points. Otherwise the price of each extra vote.
Output Meaning
{poll_id} ID of the new poll; give it to "End poll" to end this one.

Cancel prediction

ID twitch.prediction_cancel

Cancel the running prediction and give the points back.

Setting Type Details
Prediction ID Text Leave empty for the prediction that is running. Or use {prediction_id} from "Start prediction". Takes {variables}.

Lock prediction

ID twitch.prediction_lock

Stop taking bets on the running prediction.

Setting Type Details
Prediction ID Text Leave empty for the prediction that is running. Or use {prediction_id} from "Start prediction". Takes {variables}.

Resolve prediction

ID twitch.prediction_resolve

Pick the winning outcome of a prediction and pay out the points.

Setting Type Details
Prediction ID Text Leave empty for the prediction that is running. Or use {prediction_id} from "Start prediction". Takes {variables}.
Winning outcome required Text The outcome's text, or its number (1 is the first). Takes {variables}.

Start prediction

ID twitch.prediction_start

Start a prediction where viewers bet channel points on an outcome.

Setting Type Details
Question required Text Up to 45 characters. Takes {variables}.
Outcomes required List Two to ten outcomes, each up to 25 characters. Separate entries with commas.
Betting time Duration Default 2m How long viewers can place bets: 30s to 30m.
Output Meaning
{prediction_id} ID of the new prediction.

Channel points

Create reward

ID twitch.reward_create

Create a new channel point reward. CroStream can change and fulfill rewards it created.

Setting Type Details
Title required Text Up to 45 characters. Must differ from your other rewards. Takes {variables}.
Cost required Number Price in channel points, at least 1.
Description Text Up to 200 characters, shown to viewers. Takes {variables}.
Viewer must type a message On/off Default Off
Cooldown Duration Time between redemptions, for example 5m. Empty = none.
Output Meaning
{reward_id} ID of the new reward.

Update reward

ID twitch.reward_update

Change a channel point reward that CroStream created: turn it on or off, pause it, or change its price.

Twitch only lets an app change rewards it created, so use Create reward for rewards you want macros to control.

Setting Type Details
Reward required Pick A reward this app created. Twitch only lets an app change rewards it created. Picked from the channel point rewards CroStream created. Takes {variables}.
Visible to viewers Choice Default unchanged On shows the reward, off hides it. One of unchanged, on, off.
Paused Choice Default unchanged A paused reward is shown but cannot be redeemed. One of unchanged, on, off.
Cost Number New price in channel points. 0 = leave the price as it is.
Cooldown Duration Time between redemptions, for example 5m. Empty = leave as it is.

Ads

Run ad

ID twitch.run_ad

Start an ad break on your stream. Only works while you are live and have not run one recently.

Setting Type Details
Length Number Default 30 Seconds: 30, 60, 90, 120, 150 or 180.
Output Meaning
{ad_length} How long the ad runs, in seconds.
{retry_after} Seconds until another ad can be started.

Snooze next ad

ID twitch.snooze_ad

Push your next automatic ad back by five minutes.

No settings.

Output Meaning
{snooze_count} How many snoozes you have left.
{next_ad_at} When the next ad is due (UTC, YYYY-MM-DD HH:MM).

OBS Studio

OBS actions need OBS connected. File locations are on the computer that runs OBS.

Also offered here: Clip, Marker, Switch scene (see Shared actions).

Stream & recording

Control the OBS recording

ID obs.record

Starts, stops, pauses or resumes the recording, or flips it between started and stopped.

Setting Type Details
Action required Choice One of start, stop, toggle, pause, resume.
Output Meaning
{record_path} Path of the finished recording, when the recording was stopped.

Start a new recording file

ID obs.record_split

Ends the current recording file and carries on in a new one, without stopping. Needs OBS 30 or newer.

No settings.

Control the OBS replay buffer

ID obs.replay_buffer

Starts or stops the replay buffer that clips are saved from.

Setting Type Details
Action required Choice One of start, stop, toggle.
Output Meaning
{output_active} true or false: whether it is running afterward.

Control the OBS stream

ID obs.stream

Starts or stops streaming from OBS, or flips it between the two.

Setting Type Details
Action required Choice One of start, stop, toggle.
Output Meaning
{output_active} true or false: whether it is running afterward.

Control the OBS virtual camera

ID obs.virtual_cam

Starts or stops the virtual camera other programs can use as a webcam.

Setting Type Details
Action required Choice One of start, stop, toggle.
Output Meaning
{output_active} true or false: whether it is running afterward.

Sources

Add browser source

ID obs.add_browser_source

Adds a browser source to a scene in OBS, set to load a web page at a size you choose. Handy for putting an overlay on stream in one step.

Setting Type Details
Scene required Pick The scene that gets the new source. Picked from your OBS scenes. Takes {variables}.
Source name required Text The name of the new source. OBS refuses a name already in use.
Web address required Text The page to show, starting with http:// or https://.
Width required Number In pixels, 1 to 8192.
Height required Number In pixels, 1 to 8192.
Control audio via OBS On/off Default On Sound from the page plays through OBS's mixer instead of the desktop.

Lock or unlock an OBS source

ID obs.source_lock

A locked source cannot be moved by accident while you are live.

Setting Type Details
Scene required Pick Picked from your OBS scenes. Takes {variables}.
Source required Pick Picked from your OBS sources. Takes {variables}.
Lock required Choice One of lock, unlock, toggle.
Output Meaning
{source_locked} true or false: whether the source is locked afterward.

Change the layer order of an OBS source

ID obs.source_order

Brings a source in front of the others, sends it behind them, or moves it one layer.

Setting Type Details
Scene required Pick Picked from your OBS scenes. Takes {variables}.
Source required Pick Picked from your OBS sources. Takes {variables}.
Move required Choice One of front, back, up, down.

Move, scale or rotate an OBS source

ID obs.source_transform

Changes where a source sits in a scene, how big it is, or how it is turned. Only the values you fill in change.

Setting Type Details
Scene required Pick Picked from your OBS scenes. Takes {variables}.
Source required Pick Picked from your OBS sources. Takes {variables}.
Left position Text In pixels from the left edge of the canvas. Leave empty to keep it as it is. Takes {variables}.
Top position Text In pixels from the top edge of the canvas. Leave empty to keep it as it is. Takes {variables}.
Width scale Text 1 is the normal size, 2 is double. A negative number mirrors it. Leave empty to keep it as it is. Takes {variables}.
Height scale Text 1 is the normal size, 2 is double. A negative number flips it. Leave empty to keep it as it is. Takes {variables}.
Rotation Text In degrees, clockwise. Leave empty to keep it as it is. Takes {variables}.

Show or hide an OBS source

ID obs.source_visibility

Shows, hides or flips a source (a camera, an overlay) inside one scene.

Setting Type Details
Scene required Pick Picked from your OBS scenes. Takes {variables}.
Source required Text Takes {variables}.
Visibility required Choice One of show, hide, toggle.
Output Meaning
{source_visible} true or false after a toggle.

Audio

Mute or unmute an OBS audio source

ID obs.audio_mute

Mutes a microphone or any other audio source in OBS, unmutes it, or flips it.

Setting Type Details
Audio source required Pick Picked from your OBS audio sources. Takes {variables}.
Audio required Choice One of mute, unmute, toggle.
Output Meaning
{muted} true or false: whether the source is muted afterward.

Set an OBS audio delay

ID obs.audio_sync_offset

Delays an audio source so it lines up with the video, for example a microphone that is ahead of the camera.

Setting Type Details
Audio source required Pick Picked from your OBS audio sources. Takes {variables}.
Delay (milliseconds) Number Default 0 From -950 to 20000. 1000 is one second. Negative plays the audio earlier.

Set an OBS audio source's volume

ID obs.audio_volume

Sets how loud an audio source is, in decibels (dB). 0 is full volume, -20 is quieter, -100 is silent.

Setting Type Details
Audio source required Pick Picked from your OBS audio sources. Takes {variables}.
Volume (dB) Number Default 0 From -100 to 26. 0 is OBS's normal full volume.

Filters

Change an OBS filter's settings

ID obs.filter_settings

Updates some settings of a filter. Settings you leave out stay as they are.

Setting Type Details
Source required Pick Picked from your OBS sources. Takes {variables}.
Filter name required Text Type the filter's name exactly as it shows in OBS. Takes {variables}.
Settings required Text A JSON object, for example {"brightness": 0.2}. Setting names are the ones OBS uses internally. Use {variables} inside string values.

Turn an OBS filter on or off

ID obs.filter_toggle

Switches a filter (a color correction, a blur, a mask) on a source on, off or flips it.

Setting Type Details
Source required Pick The source the filter is on. Audio inputs work too. Picked from your OBS sources. Takes {variables}.
Filter name required Text Type the filter's name exactly as it shows in OBS. Takes {variables}.
Filter required Choice One of on, off, toggle.
Output Meaning
{filter_enabled} true or false: whether the filter is on afterward.

Advanced

Press an OBS hotkey

ID obs.hotkey

Runs one of OBS's hotkey actions by name, as if you pressed its key.

Setting Type Details
Hotkey required Pick Picked from OBS's hotkey actions. Takes {variables}.

Switch the OBS profile

ID obs.profile

Changes to another OBS profile (its output and video settings).

Setting Type Details
Profile required Pick Picked from your OBS profiles. Takes {variables}.

Switch the OBS scene collection

ID obs.scene_collection

Changes to another set of scenes. OBS may take a moment to load it.

Setting Type Details
Scene collection required Pick Picked from your OBS scene collections. Takes {variables}.

Send a request to an OBS plugin

ID obs.vendor_request

For plugins that add their own remote commands. Needs the plugin's vendor name and request type from its documentation.

Setting Type Details
Vendor required Text Takes {variables}.
Request type required Text Takes {variables}.
Request data Text A JSON object, for example {"key": "value"}. Leave empty to send none. Use {variables} inside string values.
Output Meaning
{vendor_response} The plugin's answer, as JSON text.

Text & media

Control an OBS video or audio file

ID obs.media

Plays, pauses, stops or restarts a media source, or jumps to the next or previous file of a playlist.

Setting Type Details
Source required Pick A media source (a video or audio file). Picked from your OBS sources. Takes {variables}.
Action required Choice One of play, pause, stop, restart, next, previous.

Jump to a time in an OBS video or audio file

ID obs.media_seek

Moves a media source to a point in the file, counted from the start.

Setting Type Details
Source required Pick A media source (a video or audio file). Picked from your OBS sources. Takes {variables}.
Position required Duration Default 0s For example 30s or 1m30s, from the start of the file.

Play sound in OBS

ID obs.play_sound

Plays a sound file through a media source in OBS, so it goes out on the stream and to OBS monitoring. Set up once: add a Media Source in a scene that is always shown (nest it in every scene), turn on "Close file when inactive", and pick it here.

Setting Type Details
Media source required Pick A Media Source (an ffmpeg or VLC source) that plays the sound. Picked from your OBS media sources. Takes {variables}.
Sound file required Text The full path on the OBS computer, for example C:\Sounds\airhorn.mp3 Takes {variables}.
Wait until it finishes On/off Default Off Off: the next step starts right away while the sound plays.

Reload an OBS browser source

ID obs.refresh_browser

Reloads a browser source's page, ignoring its cache. Useful when an overlay gets stuck.

Setting Type Details
Source required Pick A browser source. Picked from your OBS sources. Takes {variables}.

Change the web address of an OBS browser source

ID obs.set_browser_url

Makes a browser source load a different web page.

Setting Type Details
Source required Pick A browser source. Picked from your OBS sources. Takes {variables}.
Web address required Text For example: https://example.com/alert?name={user|url}. Use {name|url} to put viewer text into a link safely. Takes {variables}.

Change the picture of an OBS image source

ID obs.set_image

Points an image source at a different picture file on the computer running OBS.

Setting Type Details
Source required Pick An image source. Picked from your OBS sources. Takes {variables}.
Picture file required Text The full path on the OBS computer, for example C:\Pictures\win.png Takes {variables}.

Change the text of an OBS text source

ID obs.set_text

Replaces the words shown by a text source, such as a "latest follower" label.

Setting Type Details
Source required Pick A text source (GDI+ on Windows, FreeType on macOS and Linux). Picked from your OBS sources. Takes {variables}.
Text Text For example: Latest follower: {user}. Empty clears the text. Takes {variables}.

Scenes

Set the OBS preview scene

ID obs.preview_scene

Puts a scene in the preview side of studio mode, ready to be sent live. Studio mode must be on.

Setting Type Details
Scene required Pick Picked from your OBS scenes. Takes {variables}.

Choose the OBS scene transition

ID obs.set_transition

Picks which transition plays when scenes change, and optionally how long it lasts.

Setting Type Details
Transition Pick Leave empty to keep the current transition and only change its length. Picked from your OBS transitions. Takes {variables}.
Length Duration For example 300ms or 1s. Leave empty to keep the current length.

Turn OBS studio mode on or off

ID obs.studio_mode

Studio mode shows a preview next to the live scene. Turn it on, off, or flip it.

Setting Type Details
Studio mode required Choice One of on, off, toggle.
Output Meaning
{studio_mode} true or false: whether studio mode is on afterward.

Send the preview scene live

ID obs.studio_transition

In studio mode, plays the transition that swaps the preview scene into the live program.

No settings.

Capture

Save a screenshot of an OBS source

ID obs.screenshot

Saves a picture of a source or a whole scene to a file on the computer running OBS.

Setting Type Details
Source or scene required Pick Type a scene name to capture the whole scene. Picked from your OBS sources. Takes {variables}.
Save to required Text A folder (the file is named after the source and the time) or a full file name, for example C:\Shots or C:\Shots\win.png Takes {variables}.
Picture type Choice Default png One of png, jpg.
Width Number Shrinks the picture to this many pixels wide. 0 keeps the full size.
Output Meaning
{screenshot_path} Where the picture was saved, on the computer running OBS.

Steam

Steam actions need the Steam integration.

Look up a Steam game

ID steam.game_info

Reads an installed game's playtime into variables, for a chat command such as !playtime. Playtime is what Steam last recorded; the game being played also counts this session.

Setting Type Details
Game Pick An app ID or a game's name, such as {args}. Leave empty for the game being played. Picked from your Steam games. Takes {variables}.
Output Meaning
{game} The game's name.
{appid} The game's Steam app ID.
{playtime_hours} Your total hours in the game, with one decimal.
{playtime_2wks_hours} Your hours in the game over the last two weeks, with one decimal.
{last_played} The day you last played it, as YYYY-MM-DD; empty when never.

Launch a Steam game

ID steam.launch

Starts a game the way the Play button in Steam does. Steam starts first if it isn't running.

Setting Type Details
Game required Pick Picked from your Steam games.
Output Meaning
{game} The game's name.
{appid} The game's Steam app ID.

Discord

These change your own Discord status through the Discord integration. To post into a channel, use Post to Discord under Tools.

Clear your Discord status

ID discord.clear_activity

Removes the activity CroStream set from your Discord profile.

No settings.

Set your Discord status

ID discord.set_activity

Shows an activity on your Discord profile, like "Watching" with your stream title and a Watch button. Parts left empty are left out. Discord shows buttons to others only, not to you.

Setting Type Details
Activity Choice Default playing One of playing, watching, listening, competing.
Details Text The first line, such as {channel_title}. 2 to 128 characters; longer text is shortened. Takes {variables}.
State Text The second line, such as {channel_category}. Takes {variables}.
Timer Choice Default none Show the time elapsed: none, since now, or since the stream started (since now when it isn't live). One of none, now, stream.
Large image Text An image link starting with https://, or the name of an art asset of your Discord application. Takes {variables}.
Large image text Text Shown when hovering over the large image. Takes {variables}.
Small image Text A badge on the large image's corner: an https:// link or an asset name. Takes {variables}.
Small image text Text Takes {variables}.
Button 1 label Text Up to 32 characters, such as Watch stream. Takes {variables}.
Button 1 link Text Starts with https://, such as https://twitch.tv/yourname. Takes {variables}.
Button 2 label Text Takes {variables}.
Button 2 link Text Takes {variables}.

Queues

Built in. See Queues.

Add to queue

ID queue.add

Puts this moment in line. The queue lets it out later at its own pace, and a Queue release trigger then reacts. If the queue is full and refuses new items, this step fails, so a channel point redemption is refunded.

See Queues.

Setting Type Details
Queue required Pick Which queue. Create queues on the Queues page. Picked from your queues.
Values Fields What to store for each of the queue's fields. Leave a field empty to use its default. One box per field of the chosen queue.
Output Meaning
{queue_position} Where the item stands in line, starting at 1.
{queue_waiting} How many items are waiting, including this one.
{queue_item_id} The new item's ID.

Clear queue

ID queue.clear

Throws away everything waiting in the queue.

Setting Type Details
Queue required Pick Which queue. Create queues on the Queues page. Picked from your queues.
Output Meaning
{queue_dropped} How many items were thrown away.

Pause queue

ID queue.pause

Stops the queue from letting items out. Items keep piling up until you resume it.

Setting Type Details
Queue required Pick Which queue. Create queues on the Queues page. Picked from your queues.

Release next now

ID queue.release_now

Lets the next items out right away without waiting for the interval. This counts as a release, so the interval starts over.

Setting Type Details
Queue required Pick Which queue. Create queues on the Queues page. Picked from your queues.
Output Meaning
{queue_released} How many items were released.

Resume queue

ID queue.resume

Lets a paused queue release items again.

Setting Type Details
Queue required Pick Which queue. Create queues on the Queues page. Picked from your queues.

Tools

Built in: CroStream's own helpers. The Delay, If, Switch and Stop steps are listed here in the macro editor's palette too; they're explained in Macros.

Utilities

Change a counter

ID tools.counter

Keeps a running number under a name, such as deaths or wins. Counters are remembered when the app restarts.

Setting Type Details
Counter name required Text Capital letters and spaces around the name do not matter. Takes {variables}.
Change required Choice Default add One of add, subtract, set, reset, get.
Amount Number Default 1 Used by add, subtract and set. Add and subtract use 1 when this is 0.
Output Meaning
{count} The counter's value after this step.

Pick at random

ID tools.random

Picks one entry from your list at random, for example a winner or a shout-out line. Use the result in later steps.

Setting Type Details
Options required List One entry per line. You can use {variables} in entries. A single line with no line breaks is split at commas instead, as in older versions.
Output Meaning
{choice} The option that was picked.
{choice_number} Its position in the list, starting at 1.

Set a value

ID tools.variable

Saves a piece of text for later steps. Give this step an ID, then use {step_id.value} in a later step to get it back.

Setting Type Details
Value Text Text to save. You can use {variables} in it. Takes {variables}.
Output Meaning
{value} The value that was set.

Web

Post to Discord

ID tools.discord

Posts a message to a Discord channel through a webhook. The webhook address works like a password and is stored in your config file.

Setting Type Details
Webhook address required Text From Discord: channel settings, Integrations, Webhooks. Stored in the config file. Left out of exports.
Message required Text Up to 2000 characters. You can use {variables}. Takes {variables}.
Name to post as Text Leave empty to use the webhook's own name. Takes {variables}.
Output Meaning
{status} The HTTP status code Discord answered with.

Send a web request

ID tools.http

Calls a web address, for example to trigger another service. Headers can carry keys, so they are never written to the log.

Setting Type Details
Method required Choice Default GET One of GET, POST, PUT, PATCH, DELETE.
Address required Text Starts with http:// or https://. You can use {variables}; use {args|url} to put viewer text into a link safely. A redirect to another site is refused. Takes {variables}.
Headers List One per line, written as Name: Value. You can use {variables} in values. A single line with no line breaks is split at commas instead, as in older versions.
Body Text Text to send with the request. Takes {variables}.
Give up after Duration Default 10s For example 10s. At most 60s.
Do not fail on error answers On/off Default Off Off: an answer such as 404 or 500 fails the step.
Output Meaning
{status} The HTTP status code the server answered with.
{response} The start of the server's answer, as text (first 4 KB).

Screen

Clear the screen flash

ID tools.screen_clear

Takes down the image that Flash an image on screen is showing, at once. Put it on a hotkey as a panic button.

No settings.

Flash an image on screen

ID tools.screen_flash

Flashes an image from your media library over your game for a moment, for example a jump scare. It never takes the keyboard focus and every click goes straight through to the game. Flashing images can trigger seizures in some people: keep it short and use a cooldown on the trigger.

Full guide: Screen flash.

Differences between Windows, macOS and Linux
System Support Notes
Windows Works Shows over windowed and borderless games. A game in exclusive fullscreen hides it.
macOS Limited Shows over windowed and borderless games; a game in exclusive fullscreen hides it. In browser mode, All monitors flashes only the main one.
Linux Limited GNOME on Wayland does not allow it; X11 and most other desktops do. Some Linux versions of CroStream report that it isn't available. On Wayland the desktop decides where each monitor's flash goes. In browser mode, All monitors flashes only the main one.
Setting Type Details
Image required Pick A PNG, JPEG, GIF (animated ones play) or WebP image from your media library. Picked from the images in your media library.
Monitor Pick Default Main monitor Where to show it. Empty is your main monitor. Choices: Main monitor, All monitors.
Show for Duration Default 1.5s How long it is on screen, fades included. For example 1.5s; 0.1s to 30s.
Fade in Duration Default 0.1s For example 0.1s. 0s makes it appear at once.
Fade out Duration Default 0.4s For example 0.4s. Fades count towards "Show for".
Opacity (1-100) Number Default 100 Lower lets the game show through the image. Empty is 100, fully solid.
Fit Pick Default Fit inside How the image is sized to the monitor. Choices: Fit inside, Fill screen, Stretch, Actual size.
Size (5-100) Number Default 100 Percent of the fitted size. Empty is 100.
Position Pick Default Center Where an image smaller than the monitor sits. Choices: Center, Top, Bottom, Left, Right, Top left, Top right, Bottom left, Bottom right.
Background color Color Default #000000 Used when Background opacity is above 0.
Background opacity (0-100) Number Default 0 Darkens or tints the whole screen behind the image. 0 leaves the game fully visible around it.
Shake (0-100) Number Default 0 Jiggles the image. 0 holds it still, 100 is violent.
Sound Pick An optional sound from your media library, played along with the image. Picked from the sounds in your media library.
Volume (1-100) Number Default 100 Volume of the sound. Empty is 100.
Output device Pick Where the sound plays. Empty is the system default. Picked from this computer's sound outputs.
If one is already showing Pick Default Replace it Replace it, or skip this one (the macro carries on either way). Choices: Replace it, Skip this one.
Wait until it is gone On/off Default Off Off: the next step starts right away while the image shows.

Sound & files

Play a sound

ID tools.sound

Plays an audio file (WAV, MP3, OGG or FLAC) on this computer, for example a sound effect for an alert. Choose the output device and the volume, or leave them for the system default.

Setting Type Details
Sound file required Text Full path to the file, such as C:\Sounds\airhorn.mp3. Takes {variables}.
Output device Pick Empty plays on the system default. Picked from this computer's sound outputs. Takes {variables}.
Volume (1-100) Number Default 100 Empty plays at full volume (100).
Wait until it finishes On/off Default Off Off: the next step starts right away while the sound plays.

Stop all sounds

ID tools.sound_stop

Ends every sound started by Play a sound, for example to cut off a long alert.

No settings.

Write to a text file

ID tools.write_file

Writes text to a file on this computer, for example a latest-follower name for an OBS text source.

Setting Type Details
File required Text Full path to the file. Its folder must already exist. Takes {variables}.
Text Text What to write. You can use {variables} in it. Takes {variables}.
If the file exists Choice Default overwrite One of overwrite, append.
Add a new line after the text On/off Default On Only used when adding to the end of the file.
Output Meaning
{path} The file that was written.

Webhooks

Built in. See Webhooks.

Send a webhook

ID webhooks.send

Sends text, JSON or a form to another system, to a saved destination or to an address of your own, and can turn a JSON answer into variables for later steps. The destination brings its address, sign-in and headers; headers and secrets are never written to the log.

See Webhooks and, for the paths, JSON paths and mapping.

Setting Type Details
Destination Pick A saved destination brings its address, sign-in and headers. Leave empty to send to an address of your own. Picked from your destinations.
Address Text With a destination: an optional path added to its address, such as /events/{reward|url}. Without one: the full address, starting with http:// or https://. A path can't lead to another site, and a redirect to another site is refused. Takes {variables}.
Method Choice Default POST One of POST, GET, PUT, PATCH, DELETE.
Headers List One per line, written as Name: Value. You can use {variables} in values. They are never written to the log. Sent after the destination's own.
Body Choice Default json One of none, text, json, form, json_raw. none sends no body; text sends Text; json builds a JSON body from fields; form sends form fields; json_raw sends JSON you write yourself.
Text Text For body text. The text to send. Takes {variables}.
JSON fields Fields For body json. Each field puts a value at a path, such as user.name, items[0] or tags[] (adds to a list), as Text, Number, Yes / no, Null or JSON. Values take {variables}. At most 200 fields. See Building JSON.
JSON Text For body json_raw. JSON written out in full. Put variables inside strings as "{name|json}" so quotes and line breaks in them stay valid. Checked after the variables are filled in.
Form fields Fields For body form. Name and value of each field. Values take {variables}.
Read the answer Fields Turns values from a JSON answer into variables for later steps: a name, a path, a type, and what to use if the value is missing. At most 100 rows.
Give up after Duration Default 10s For each try. At most 60s.
Retries Number Default 0 0 to 5. Tries again, waiting longer each time (0.5s, 1s, 2s, up to 8s), when the request gets no answer or the server answers with a 5xx error.
Fail on an error answer On/off Default On Off: an answer such as 404 or 500 lets the macro go on, with {status} saying what happened. A request that gets no answer always fails.
Output Meaning
{status} The answer's HTTP status code, such as 200.
{body} The answer's body as text (at most 64 KiB).
{content_type} The answer's content type, such as application/json.
each row of Read the answer One variable named after the row. status, body, content_type and detail can't be used as names.

In a macro started by an incoming webhook, {body} and {content_type} are already the request's, and an event's variables win. Read the answer's as {stepid.body} and {stepid.content_type}.

Viewers

These work on the viewer database.

Look up a viewer

ID viewers.lookup

Reads a viewer's points, watch time, follow date and more into variables, for chat commands such as !points, !watchtime and !followage. A viewer who is not in the database is not an error: known is false and the numbers are 0.

Setting Type Details
Viewer required Text Default {user_login} A login or @login. The person who triggered the macro by default. Takes {variables}.
Output Meaning
{known} true when the viewer is in the database, else false.
{name} The viewer's display name.
{login} The viewer's login name.
{points} Their points.
{rank} Their place by points, 1 is the richest; 0 when unranked.
{watch_time} Time watched, such as 12h 5m or 45m.
{watch_minutes} Minutes watched, as a number.
{streams} How many streams they watched or chatted in.
{messages} Chat messages written.
{bits} Bits cheered.
{gifted} Subs gifted.
{sub_months} Months subscribed, the highest count seen.
{following} true when they follow the channel, else false.
{follow_age} How long they have followed, such as 1 year, 3 months or 12 days; empty when not following.
{followed_at} The day they followed, as YYYY-MM-DD; empty when unknown.
{first_seen} The day they were first seen, as YYYY-MM-DD.
{currency} What the points are called.

Change points

ID viewers.points

Adds points to a viewer, takes points away or sets their balance. Use it for rewards, bets and shop items.

See Viewers.

Setting Type Details
Viewer required Text Default {user_login} A login or @login. The person who triggered the macro by default. Takes {variables}.
Change required Choice Default add One of add, subtract, set.
Amount required Text A whole number, 0 or more. You can use {variables}, such as {bits}. Takes {variables}.
Let the balance go below zero On/off Default Off
Reason Text Shown next to the change in the viewer's history. Takes {variables}.
Output Meaning
{points} The viewer's balance after the change.
{change} How much the balance changed, such as +5 or -20.
{viewer} The viewer's display name.

Give points to everyone watching

ID viewers.points_all

Gives every viewer who is here right now the same number of points, for example as a reward for hitting a goal.

Setting Type Details
Amount each required Text A whole number. A negative number takes points away (balances stop at zero). Takes {variables}.
Who required Choice Default watching Watching: everyone in the chat list, lurkers included. Chatting: only those who wrote recently. One of watching, chatting.
Chatted in the last (minutes) Number Default 10 Only used for chatting viewers: 1 to 240.
At least Choice Default everyone Only viewers with this role or higher. One of everyone, subscriber, vip, moderator.
Reason Text Shown next to the change in each viewer's history. Takes {variables}.
Output Meaning
{count} How many viewers got the points.
{amount} The amount each of them got.

Top viewers

ID viewers.top

Builds a leaderboard line, for example for a !top command. Points ignore the period; with the stream period an offline channel gives an empty list.

Setting Type Details
Ranked by required Choice Default points One of points, watch, messages, bits, gifted.
Period Choice Default all This stream, the last 7 days or all time. Not used for points. One of stream, week, all.
How many Number Default 5 1 to 25.
Row format Text Default {rank}. {name} ({value}) Per viewer. Uses {rank}, {name}, {login} and {value} (watch time reads like 12h 5m).
Between rows Text Default ·
Output Meaning
{list} The ranking as one line, rows joined by the separator.
{first} The display name of the viewer in first place.
{count} How many viewers are listed.

Give points to another viewer

ID viewers.transfer

Moves points from one viewer to another, for a chat command such as !give. It fails when the giver has too few points.

Setting Type Details
From required Text Default {user_login} The giver. The person who triggered the macro by default. Takes {variables}.
To required Text Default {arg1} A login or @login (the @ is removed). For a chat command such as !give bob 50, {arg1} is the receiver. Takes {variables}.
Amount required Text Default {arg2} A whole number above 0. For a chat command such as !give bob 50, {arg2} is the amount. Takes {variables}.
Reason Text Shown next to the change in both viewers' history. Takes {variables}.
Output Meaning
{from_points} The giver's balance after the gift.
{to_points} The receiver's balance after the gift.
{to} The receiver's display name.

Overlays

These drive the overlays you design in CroStream. Alerts are covered in Alerts.

Show an alert

ID overlay.alert

Brings up an alert for a while, with its texts filled in from the event ({user}, {bits}…). Alerts wait for each other, so they never overlap.

Setting Type Details
Element required Pick The alert or group to show. Picked from the alerts and groups on your overlays.
Show for Duration Default 6s For example 6s.
Animation in Choice Default pop One of none, fade, slide-up, slide-down, slide-left, slide-right, zoom, pop.
Animation out Choice Default fade One of none, fade, slide-up, slide-down, slide-left, slide-right, zoom, pop.
Animation length (ms) Number Default 500 0 uses 500 ms.
Play the sound Choice Default overlay In OBS (overlay), on this PC (pc), or both. One of overlay, pc, both.
Output device Pick For sounds on this PC. Empty uses the default output. Picked from this computer's sound outputs.
Volume (1-100) Number Default 80 For sounds on this PC. 0 uses 80.
Wait until it has played On/off Default Off Off: the next step starts right away.

Hide an overlay element

ID overlay.hide

Hides an element or group on an overlay with an animation.

Setting Type Details
Element required Pick The element or group to hide. Picked from the elements and groups on your overlays.
Animation Choice Default fade One of none, fade, slide-up, slide-down, slide-left, slide-right, zoom, pop.
Animation length (ms) Number Default 400 0 uses 400 ms. Choose the animation "none" for an instant change.

Play media or fire an effect

ID overlay.play

Starts a video or sound from the beginning, or fires a burst of a particles element (confetti, fireworks…).

Setting Type Details
Element required Pick The video, sound or particles element to play. Picked from the video, sound and particles elements on your overlays.

Reset an overlay

ID overlay.reset

Drops everything macros changed on an element, or on a whole overlay, so it looks like its design again.

Setting Type Details
Element required Pick An element, or a whole overlay. Picked from your overlays and their elements.

Set overlay media

ID overlay.set_media

Swaps the image, video or sound of an element for another file from your media library, or clears it.

Setting Type Details
Element required Pick The image, video or sound element to change. Picked from the video, sound and particles elements on your overlays.
Media file Text A file from your media library. Leave empty to clear it.

Set overlay text

ID overlay.set_text

Changes the words of a text element. The new text stays until you change it again or reset the overlay.

Setting Type Details
Element required Pick The text element to change. Picked from the text elements on your overlays.
Text Text You can use {variables}. Leave empty to clear the text. Takes {variables}.

Show an overlay element

ID overlay.show

Shows an element or group on an overlay with an animation. Optionally hides it again after a while.

Setting Type Details
Element required Pick The element or group to show. Picked from the elements and groups on your overlays.
Animation Choice Default fade One of none, fade, slide-up, slide-down, slide-left, slide-right, zoom, pop.
Animation length (ms) Number Default 400 0 uses 400 ms. Choose the animation "none" for an instant change.
Hide again after Duration For example 10s. Leave empty to keep it shown.

Control a timer

ID overlay.timer

Starts, pauses, resumes, resets, sets or changes a countdown or stopwatch shown by timer elements, e.g. add 5 minutes for every sub.

Setting Type Details
Timer required Pick The timer's name, as set on the timer element. Picked from the timers on your overlays.
Do required Choice Default start One of start, pause, resume, reset, set, add, subtract.
Amount Duration For example 5m. Needed by set, add and subtract, and by start on a new countdown; reset uses it as the countdown's new time.
Kind of timer Choice Default countdown Used when the timer doesn't exist yet. One of countdown, stopwatch.
Longest countdown Duration Limits the time left, e.g. 12h for a subathon. Empty keeps the current limit.
Output Meaning
{remaining} Seconds left on a countdown (rounded up), or seconds counted by a stopwatch, after the action.
{running} true while the timer runs, else false.

Toggle an overlay element

ID overlay.toggle

Shows the element if it is hidden and hides it if it is shown.

Setting Type Details
Element required Pick The element or group to toggle. Picked from the elements and groups on your overlays.
Animation Choice Default fade One of none, fade, slide-up, slide-down, slide-left, slide-right, zoom, pop.
Animation length (ms) Number Default 400 0 uses 400 ms. Choose the animation "none" for an instant change.

Spin the wheel

ID overlay.wheel_spin

Spins a prize wheel and picks a winner by chance (a slice's weight is its share). Later steps can use {result}.

Setting Type Details
Element required Pick The prize wheel to spin. Picked from the prize wheels on your overlays.
Wait for it to stop On/off Default Off Holds the next step until the wheel has stopped spinning.
Output Meaning
{result} The label of the slice the wheel stopped on.
{result_index} That slice's number, counting from 1 in the order of the wheel's list.