Skip to content

VTube Studio triggers

A trigger starts a macro when something happens. With VTube Studio connected, nine things can start one: you press a hotkey, your camera loses your face, you click your model, a model loads, an animation reaches an event your rigger put in it, and more. Pick them in the trigger editor under VTube Studio.

The trigger editor with "The model is clicked" chosen: the Button, Part, Any layer and Only on the model settings, and the variables this event provides

All the variables below are available as {name} in the macro's steps. The trigger editor's Variables from this event panel lists them too. The Test button on a trigger runs the macro with sample values that follow your filters, so you can try a macro without touching VTube Studio.

At a glance

Trigger Fires when Event ID
A VTube Studio hotkey runs A hotkey runs in VTube Studio. vtubestudio.hotkey_triggered
Tracking is lost or found VTube Studio loses or finds your face or a hand. vtubestudio.tracking
A model loads or unloads VTube Studio loads or unloads a model. vtubestudio.model_loaded
An expression turns on or off An expression changes. Needs VTube Studio's beta. vtubestudio.expression
The model is clicked You click your model in VTube Studio's window. vtubestudio.model_clicked
An animation event happens An animation starts, ends or reaches a custom event. vtubestudio.animation
Something happens to an item An item is added, removed, clicked, dropped, locked or unlocked. vtubestudio.item
The background changes VTube Studio changes its background. vtubestudio.background
Effects turn on/off or a preset loads VTube Studio's visual effects change. vtubestudio.post_processing

Each filter is optional: leave a text filter empty to match everything. Text filters ignore capital letters. A trigger that is not connected simply doesn't fire, so it is safe to build macros while VTube Studio is closed.

CroStream only listens to what you use

Some events are chatty, so CroStream asks VTube Studio for them only when a trigger needs them: model clicks, animation events (and their idle-animation and Live2D-item variants), clicks beside the model and expression events of Live2D items. Add the trigger and CroStream subscribes by itself within a moment.

A VTube Studio hotkey runs

ID vtubestudio.hotkey_triggered

Fires when a hotkey runs in VTube Studio: one you press, or one a plugin (CroStream included) triggers. Use it to hook your stream onto what you do in VTube Studio: a Surprised hotkey also plays a sound, a Tablet hotkey switches an OBS scene.

The hotkey trigger with the Hotkey picker, Kind of hotkey, Run by set to user and In set to model

Option Type Details
Hotkey Pick Only this hotkey (its ID or name). Empty for any.
Kind of hotkey Choice Only hotkeys of this kind. Empty for any. One of TriggerAnimation, ToggleExpression, ChangeBackground, ChangeVTSModel, TakeScreenshot, LoadEffectPreset, MoveModel and the other VTube Studio hotkey kinds.
Run by Choice Default user user: you, in VTube Studio. api: a plugin, CroStream included. any: both.
In Choice Default model Hotkeys of your model, of Live2D items, or any.
Variable Meaning Example
{hotkey_id} The hotkey's ID. 3f2a9c0d
{hotkey_name} The hotkey's name. Wave
{hotkey_action} The kind of hotkey. ToggleExpression
{hotkey_file} The file the hotkey uses (expression, animation, …), if any. smile.exp3.json
{by_api} true when a plugin ran it. false
{model_id} The model's ID. a1b2c3
{model_name} The model's name. Akari
{is_item} true for a hotkey of a Live2D item. false

Gotchas.

  • Hotkeys that plugins run also fire this. With Run by api or any a macro can start itself: a trigger on Run by any that runs the Trigger a hotkey action is a loop. The default, user, ignores everything CroStream and other plugins do, which is why it is the default.
  • VTube Studio does not say whether you pressed a key, clicked a button or a timer ran: user means "not a plugin".
  • A hotkey's name is whatever you named it in VTube Studio. Two hotkeys can share a name; use the ID to be exact. The picker lists the loaded model's hotkeys, so load the model first.
  • hotkey_file is empty for hotkeys that don't use a file (a screenshot, for example).

Tracking is lost or found

ID vtubestudio.tracking

Fires when VTube Studio loses or finds your face or a hand. Use it for a "be right back" scene when you walk away, or a wave when your hand comes into view.

Option Type Details
Part Choice Default face One of face, left_hand, right_hand, any.
When Choice Default lost One of lost, found, either.
Variable Meaning Example
{part} face, left_hand or right_hand. face
{found} true when it was found, false when lost. false
{face_found} Whether your face is tracked now. false
{left_hand_found} Whether your left hand is tracked now. true
{right_hand_found} Whether your right hand is tracked now. true

Gotchas.

  • Each part fires on its own. If you walk away and lose face and both hands in the same moment, you get up to three runs, one per part (so Part any runs the macro for each). Use Part face for a single "away" signal.
  • It fires on a change. Starting CroStream while your face is already tracked does not fire found. Only the face is read at connect: a hand that is already visible can fire found once right after connecting.
  • {face_found}, {left_hand_found} and {right_hand_found} are the state after the change, so inside a face run, {face_found} always equals {found}.
  • Hand triggers only fire if your VTube Studio setup tracks hands.
  • Tracking flickers. A person whose camera loses their face for a split second fires lost then found. Put a delay or a condition in your macro, or the trigger's Cooldown, if that matters.

A model loads or unloads

ID vtubestudio.model_loaded

Fires when VTube Studio loads or unloads a model: you switch outfits, or the Load a model action runs.

Option Type Details
Model Pick Only this model (ID or name). Empty for any.
When Choice Default loaded One of loaded, unloaded, either.
Variable Meaning Example
{model_id} The model's ID. a1b2c3
{model_name} The model's name. Akari
{loaded} true when it loaded, false when it unloaded. true

Gotchas. Switching from one model to another can give an unload and a load. Use When loaded (the default) to react once. CroStream's anchors belong to a model, so a new model has none until you set them. If CroStream was waiting to undo a change tied to the old model, it drops that undo when the new model loads.

An expression turns on or off

ID vtubestudio.expression

Fires when an expression turns on or off in VTube Studio, whether you toggled it by hotkey or a plugin did.

Needs VTube Studio's beta

VTube Studio's expression events exist only in its public beta branch. Once CroStream is connected to a version without them, it shows Needs VTube Studio's beta: expression events aren't available in this version on the trigger, and the trigger never fires. Everything else, including the expression action, works on the regular version.

Option Type Details
Expression Pick Only this expression (file or name). Empty for any.
When Choice Default on One of on, off, either.
Include Live2D items On/off Also expressions of Live2D items.
Variable Meaning Example
{expression_file} The expression's file. smile.exp3.json
{expression_name} The expression's name. Smile
{active} true when it turned on. true
{model_id} The model's ID. a1b2c3
{model_name} The model's name. Akari
{is_item} true for an expression of a Live2D item. false
{item_id} The Live2D item's instance ID, if it is one. empty

Gotchas.

  • When CroStream connects, VTube Studio reports which expressions are already on. Those are not treated as new events, so they do not fire.
  • The expression action changes an expression too and fires this trigger. A macro that turns an expression on and a trigger on the same expression turning on is a loop.
  • Expressions of Live2D items are ignored unless Include Live2D items is on.

The model is clicked

ID vtubestudio.model_clicked

Fires when you click your model in VTube Studio's window. Combined with the exact part you hit, it turns your model into a button: boop the nose for a sound, click the hat for a prop.

The model clicked trigger with Button set to left, a Part picked from the model's ArtMeshes, and the "Only on the model" switch on

Option Type Details
Button Choice Default left One of left, right, middle, any.
Part Pick Only clicks on this ArtMesh (the topmost one hit, unless Any layer). Empty for anywhere.
Any layer On/off Match the part even when another part lies over it.
Only on the model On/off Default on Turn off to also fire for clicks beside the model.
Variable Meaning Example
{button} left, right or middle (other for any further mouse button). left
{on_model} true when the click hit the model. true
{click_x} Where the click was, across the window. 0.31
{click_y} Where the click was, down the window. -0.12
{art_mesh} The topmost ArtMesh clicked. D_NOSE_00
{art_meshes} Every ArtMesh under the click, topmost first, comma-separated. D_NOSE_00,D_FACE_01
{hit_count} How many ArtMeshes the click hit. 2
{model_id} The model's ID. a1b2c3
{model_name} The model's name. Akari

Gotchas.

  • Button names are left, right and middle. Only these three can be chosen. A fourth mouse button only fires with Button any, and is reported as other.
  • Pick the Part from the model's list. To learn which part is which, use Click on model on an anchor on the VTube Studio page and click the spot in VTube Studio's window.
  • The ArtMesh IDs belong to the model. A trigger set to D_NOSE_00 does nothing after you switch to a model without that part.
  • Clicks beside the model only reach CroStream when a trigger has Only on the model off; clicks that miss the model have an empty {art_mesh}.
  • "Topmost" means the layer drawn in front. With Any layer, a click on a hat also matches the head under it.
  • Only clicks in VTube Studio's own window count, not clicks on your stream or an overlay.

An animation event happens

ID vtubestudio.animation

Fires when an animation starts or ends, or reaches an event the rigger put into it. The last kind is the powerful one: a rigger adds an event named confetti at a certain second of a dance, and your macro fires exactly then.

Option Type Details
Event Choice Default custom One of start, end, custom, any.
Animation Pick Only this animation. Empty for any.
Event text Text Only custom events with exactly this text. Empty for any.
Include idle animations On/off Also idle animations.
Include Live2D items On/off Also animations of Live2D items.
Variable Meaning Example
{animation_event} start, end or custom. custom
{animation_data} The text the rigger put on a custom event, or Anim_Start/Anim_End. confetti
{animation_name} The animation's name. wave
{animation_time} When in the animation the event is, in seconds. 0.5
{animation_length} The animation's length in seconds. 2
{is_idle} true for an idle animation. false
{model_id} The model's ID. a1b2c3
{model_name} The model's name. Akari
{is_item} true for an animation of a Live2D item. false

Gotchas.

  • Custom events are set by whoever made the animation (the rigger or animator), in Live2D Cubism's animation editor, and must be exported with "Export Event" on. CroStream cannot add them. If you don't see any, the animation has none.
  • Event text has to match exactly, capitals included, and the name of the event is the text the rigger typed.
  • Idle animations loop, so their start and end events fire over and over. They are off unless Include idle animations is on; with it on, a start trigger fires on every loop.
  • Animation events are only requested from VTube Studio while a trigger uses them. The Animation picker lists the animations your model's hotkeys use, plus any CroStream has seen play.

Something happens to an item

ID vtubestudio.item

Fires when an item is added, removed, clicked, dropped, locked or unlocked in VTube Studio. Items are the extras in the scene: pictures, GIFs, Live2D items and the props CroStream puts on.

Option Type Details
When Choice Default clicked One of added, removed, clicked, dropped_pinned, dropped_unpinned, dropped (either of those two), locked, unlocked, any.
Item file Pick Only items whose file name contains this. Empty for any.
Whose Choice Default any ours: items CroStream put there. others: the rest.
Variable Meaning Example
{item_event} added, removed, clicked, dropped_pinned, dropped_unpinned, locked or unlocked. clicked
{item_id} The item's instance ID. a5d2…
{item_file} The item's file name. confetti.png
{item_x} Where the item is, across the window. 0.4
{item_y} Where the item is, down the window. -0.2
{ours} true when CroStream put the item there. true

Gotchas.

  • Items CroStream drops fire added too, with {ours} normally true. Set Whose to others to react only to items you or other plugins add, and to avoid a loop.
  • Item file is a "contains" match: heart matches heart.png and big-heart.gif. Custom images CroStream uploads get file names that start with cs-.
  • dropped means the item was let go after being dragged, pinned or not.
  • Chain with the item actions: the trigger's {item_id} is what Remove items and Move an item take.

The background changes

ID vtubestudio.background

Fires when VTube Studio changes its background.

Option Type Details
Background Pick Only this background. Empty for any.
Variable Meaning Example
{background} The new background's name. Room

Gotcha. VTube Studio has no list of backgrounds for plugins to read. The picker offers the backgrounds your model's change background hotkeys use, plus any CroStream has seen change since it connected. If yours is missing, type its name.

Effects turn on/off or a preset loads

ID vtubestudio.post_processing

Fires when VTube Studio's visual effects (post-processing) turn on or off, or a preset loads.

Option Type Details
When Choice Default either One of on, off, either.
Preset Pick Only this preset. Empty for any.
Variable Meaning Example
{post_processing_on} true when the effects are on. true
{preset} The active preset, if any. Dreamy

Gotcha. The Set VTube Studio's effects action, and a timed revert of effects, fire this too.

Variables at a glance

Variables shared by several triggers carry the same meaning:

Variable Provided by
{model_id}, {model_name} hotkey, model loaded, expression, model clicked, animation
{is_item} hotkey, expression, animation
{item_id}, {item_file} item (and, from actions, Drop an item, Put on a prop)

The full list is in the Variables reference.