Everything the interaction system can do, in one place. These are the same catalogs the + Interaction menu reads from — if something isn't listed here, it isn't in the tool. How to write a sentence is Interactions.
01Triggers — what can start a moment
Pointer
| Trigger | Fires when |
|---|---|
| Click | The layer is clicked |
| Double Click | Two quick clicks on the layer |
| Hover | The pointer enters the layer |
| Hover End | The pointer leaves it |
| Press Start | The button goes down on it |
| Press End | The button comes back up |
| Drag Start | A drag begins on a draggable layer |
| Drag Move | Continuously, while dragging |
| Drag End | The drag is released |
| Collide | Every frame two physics bodies touch |
| Collide Start | The first frame of a physics contact |
| Sensor Enter | A body enters this sensor zone |
| Sensor Exit | A body leaves it |
| Unit Click | An interactive letter or word unit is clicked |
| Key Down | A key is pressed (in Simulate and Play). Key: type w, 1, space, up… — saved as KeyW, Digit1, Space, ArrowUp; empty = any key |
| Key Up | A key is released — same Key field as Key Down |
| Swipe | A drag of at least 48 px, mostly along one axis (optional Direction). The page hears it even from a child |
| Wheel | The mouse wheel or a trackpad scrolls over the layer, in Simulate or Play (optional Direction; empty = any). Over empty space the canvas keeps zooming |
Time
| Trigger | Fires when |
|---|---|
| Every Frame | Every tick, while the engine is awake |
| At a time | The timeline crosses a given point going forward |
| On Sequence End | A sequence reaches its end (playback or a forward scrub) |
| On Scroll | A scroll artboard crosses a progress threshold (both directions) |
| Every N seconds | Repeats while the scene plays — rotate a headline, tick a clock |
| After idle | Once after N seconds with no pointer, keyboard or signal input; any input re-arms it |
Logic
| Trigger | Fires when |
|---|---|
| On Variable | A scene variable — Changes, Becomes true (0→1), Becomes false (1→0), or While true |
| On Condition | An expression flips from false to true |
| On Signal | A named signal is broadcast |
| Screen becomes | The window matches a different screen — Any screen, one named screen (Phone…), or the stage turning Portrait / Landscape (Responsive & Screens) |
| On Data | A list was written — Updated, Row count changes, or A field changes (with a path) |
| Field Input | The visitor typed in a Field on this layer |
| Field Submit | Enter in a Field on this layer |
| Field Blur | A Field on this layer lost focus |
On Signal first asks where the signal comes from:
| Family | Choices |
|---|---|
| Audio | Beat, Onset (any hit), Bar (every 4 beats) |
| Custom signal | A name another rule sends with Emit Signal |
02Targets — where a value can go
The menu asks "what do I connect this to?" The mode column shows which are available for a moment, a stream, or both.
| Target | Mode | What it does |
|---|---|---|
| Layer property | ⚡ ∿ | Opacity, position, scale, rotation… — writes to an animatable value |
| Motion Pose | ⚡ | Moves the layer to its From / To pose |
| Colour | ⚡ | Fill, stroke, shadow or a gradient end — instantly, or blended over a Duration |
| Text content | ⚡ | Changes the text of a text layer |
| Visibility | ⚡ | Hides or shows the layer |
| Layout | ⚡ | Gap and column count — with a duration it animates the reflow |
| Texture (3D) | ⚡ | Writes an image into a material texture slot |
| Video (3D) | ⚡ | Play / pause a texture video |
| Scroll position | ⚡ | Scrolls an artboard to a position |
| Map camera | ⚡ | Flies a map layer to a marker |
| Physics | ⚡ | Pushes, stops, wakes, or switches the body of a layer with physics on — Physics |
| Scene variable | ⚡ | Writes a value in the Variables panel |
| Signal | ⚡ | Triggers every rule listening for that name |
| Sound | ⚡ | Plays or stops an audio file from Files — no timeline track needed |
| Spawn copy | ⚡ | Adds a copy of a template layer to the scene — Spawn and Destroy |
| Destroy layer | ⚡ | Removes a layer from the scene. Last spawn ($lastSpawn) is the copy this rule just made |
| Sequence playback | ⚡ | Play / pause / restart, forward or backward, go to a flag |
| Sequence transition | ⚡ | A named or inline blend between two sequences |
| Sequence blend weight | ⚡ | The 0–1 weight between two sequences |
| Sequence playhead | ∿ | A continuous source drives a sequence's time — Sequence drivers |
| Page playhead | ∿ | The artboard gets its own playhead and its own length — Page playheads |
| Image | ⚡ | Changes the image of an image or video layer — a URL, a library asset, or {Source.path} from data |
| Data source | ⚡ | Writes into a Data source — set a field, append a row, remove a row, clear |
| Send request | ⚡ | Calls a URL (GET / POST / PUT / DELETE); the response can land in a Data source |
| Go to artboard | ⚡ | Plays another artboard — the page of your app — cut, dissolved, pushed, slid, or with Smart animate — Moving between artboards |
| Open URL | ⚡ | Opens a link in a new tab (or the same tab) |
| Wait | ⚡ | Delays the rest of the chain |
03The THEN vocabulary
Inside a rule, each numbered step is one of these actions. The targets above compile down to them — this is what you see when you open a rule.
| Action | Group | Settings it offers |
|---|---|---|
| Set Property | Property | target, property, value, duration, easing, wait-for-finish |
| Set Appearance | Property | target, Key (Fill, Stroke, Shadow, Gradient start, Gradient end), Value (a colour, or =expression), duration, easing. Duration 0 is instant; above 0 the colour blends smoothly — blue to yellow does not pass through grey |
| Set Text | Property | text layer, content |
| Set Visible | Property | target, visible / hidden |
| Set Layout | Property | target, gap, columns |
| Motion Pose | Property | target, which pose, duration, easing |
| Sequence Control | Flow | play / pause / toggle / restart / seek, flag commands, layered playback. Settings: start flag, direction, speed or weight, glide, driver, wait-for-finish |
| Sequence Blend | Flow | transition name, from, to, duration, easing |
| Blend Weight | Flow | from, to, weight, time mode (Crossfade / Sync / Parallel) |
| Set Variable | Flow | name, value |
| Emit Signal | Flow | name, Scope (must match the listening rule) |
| Play sound | Flow | play / stop, file from Files, gain, loop |
| Scroll To | Flow | target, position |
| Wait | Flow | milliseconds |
| Spawn | Entity | template, position |
| Destroy | Entity | target |
| Physics | Entity | target, command (Impulse (add velocity) / Set velocity / Stop / Enable body / Disable body / Wake), velocity X / Y, and Z for a 3D body — Physics |
| Text Physics | Entity | text layer, command |
| Refresh Data | Entity | source (or the target repeater) |
| Set Data | Entity | source, operation (set / append / remove at / clear), path, value |
| Send Request | Entity | method, URL, body, response → source |
| Set Image | Media | image layer, URL / asset / template |
| Open URL | Flow | URL, new tab |
| Go to Artboard | Flow | Artboard, Transition (Instant · Dissolve · Smart animate · Push · Slide in), Direction (Push and Slide in), duration, easing |
| Go Back | Flow | none — returns to the artboard you came from. In Play it runs the arrival transition in reverse; in the player it is the browser's Back (Routes). Nothing to go back to = nothing happens |
| Map: Fly to Marker | Map | map layer, marker, duration, easing |
| Set Texture | Media | mesh, slot, image |
| Video Control | Media | mesh, slot, play / pause / toggle |
Every step also carries an Only if — a condition that must hold, or that step is skipped (the rest of the chain still runs).
Play sound does not need a clip on the timeline. Loop plus a later stop is how you do ambience. See Playing a sound from a rule.
04Stream sources — what can feed a continuous connection
| Group | Source | Gives you |
|---|---|---|
| Basic | Fixed number | A constant — no live source |
| Basic | Custom expression | Written by hand |
| Layer | This layer | This layer's own value — drive rotation from its own X |
| Layer | Another layer | A value read from a different layer |
| Scroll | Scroll progress | 0 at the top of a scrolling artboard, 1 at the bottom |
| Scroll | Enters the screen | 0 as the layer is about to appear, 1 once it has fully left |
| Scroll | While held in place | 0 → 1 across the stretch where the layer holds |
| Scroll | Scroll section | 0 → 1 across a named section, then stays at 1 |
| Pointer | Mouse X · Mouse Y | Pointer position on the canvas (px) |
| Pointer | Mouse X / Y in artboard | Pointer position inside the artboard (px) |
| Pointer | Mouse X / Y across artboard | 0–1 across the artboard — ideal for parallax and tilt |
| Pointer | Mouse X / Y across this layer | 0–1 across the layer itself |
| Pointer | Mouse proximity | 1 at the layer's centre, 0 at half the radius, −1 outside |
| Pointer | Mouse distance | Distance in px from the pointer to the layer's centre |
| Pointer | Mouse speed X · Mouse speed Y | Pointer velocity in px/s — add Sign in the chain for the direction |
| Pointer | Mouse speed | Pointer speed in px/s, whichever way it moves |
| Pointer | Mouse sign X · Mouse sign Y | −1, 0 or +1 — which way the pointer is moving |
| Pointer | Wheel ΔX · Wheel ΔY | The last wheel step in px (right / down is positive). Use it with the Wheel trigger, not Every Frame |
| Pointer | Wheel X · Wheel Y | Where the pointer was at the last wheel step |
| Pointer | Wheel sign X · Wheel sign Y | −1, 0 or +1 — which way the wheel turned |
| Pointer | Wheel amount | The length of the last wheel step in px |
| Time | Timeline time | Playhead position in ms — loops with the composition |
| Time | Clock (never loops) | Milliseconds since start, regardless of the timeline |
| Time | Time of day | Hour, minute, second, weekday, day, month, year, or the day as 0 → 1 |
| Audio | Audio | Live audio band level, 0–1 |
| Keyboard | Key held | 1 while the key is held, 0 otherwise |
| Data | Variable | A scene variable |
| Data | Data field | A number from a list at a dotted path — Data sources |
| Copies | Copy index | Which copy is being drawn (0, 1, 2 …) |
| Copies | Copy progress | Position across the whole set, 0 → 1 — ideal for staggering |
| Copies | Clicked copy | Index of the last clicked copy (−1 = none) |
| Copies | Clicked instance (3D) | Index of the last clicked 3D instance |
| Screen | Screen width · Screen height | The stage in px — the window when played, the preview size in the editor |
| Screen | Screen aspect | Width ÷ height; below 1 is portrait |
| Screen | Portrait | 1 while taller than wide, 0 otherwise |
| Screen | On screen | 1 while the named screen (Desktop, Phone…) is active — the natural Only if |
Above the catalog groups, the picker lists your own values first: Controls (the output of every Slider, Toggle and Choice — Fields) and Variables (each scene variable by name). Custom expression… sits under Advanced, and only when you are editing an expression written by hand.
05The transform chain — shaping a value on its way
Any stream can pass through a chain of these before it reaches its target. They apply in order, and you can stack as many as you need.
| Stage | What it does |
|---|---|
| Add / subtract | Adds a fixed amount — "8 less than its own Y" |
| Multiply | Multiplies by a factor — "1.1× its own scale" |
| Clamp | Keeps the value inside a min–max range |
| Map Range | Linear mapping from one range to another |
| Snap | Snaps to steps (e.g. 90 for 90° steps, 0.25 for four steps on 0–1) |
| Ease | Shapes the value with a curve over its current range |
| Smooth | Exponential smoothing — filters sudden jumps |
| Spring | Spring–damper follow; bouncy and organic |
| Delay | Reads the value from the past — trail and follow effects |
The More group in the step menu holds the logic stages:
| Stage | What it does |
|---|---|
| Sign | −1, 0 or +1 — the direction of a speed or a wheel step |
| Absolute | Drops the sign — the size only |
| Not | Flips a yes/no value: 1 becomes 0 and back |
| Compare | Compares the value to a Threshold (< ≤ > ≥ =) and writes 0 or 1 |
| Mix | Blends from A (at 0) to B (at 1), using the incoming value as 0 → 1 |
| Accumulate | Adds the incoming value up — Per second (× dt) or Per event |