OmniMotion®
GuideDraft

Streams & variables

Binding a value to a live source with ∿, the transform chain, scene variables and the Variables tab.

In the interface a stream is called a binding (∿). A stream is a number that keeps changing — scroll progress, the pointer, an audio level, a variable — and a bind points one at a property so the property follows it every frame. This page covers binding, the sources on offer, the transform chain that shapes a value on its way, and the scene variables you define yourself. For the difference between a moment and a stream, read Interactions first.

01Quick tour

  1. Select a layer. Right-click the ◇ badge next to Rotation and choose ∿ Add binding….
  2. In the source picker choose Mouse X across artboard (0–1).
  3. Press ƒ to open the chain, add a Map Range step, set Out Min / Out Max to −15 and 15.

Move the pointer across the artboard: the layer tilts, and the row shows the live value it is receiving.

Right-clicking the Rotation badge: the menu with Add keyframe, Bind a stream…, Expose

02Where a bind starts

FromHow
A property rowRight-click the badge → ∿ Add binding… (or Edit binding… once bound)
Any value field in a ruleThe small button beside a value — take this value from somewhere — swaps the number for a source
Sentences+ Interaction › ∿ Bindings (or ✋ Gestures for drag / rotate / hover — see Gestures), pick a target such as Layer property or Sequence playhead, then change the Source in the row that opens
A section in the Scroll viewThe Drives list under a section

They all create the same thing, and it shows up in the Sentences list either way.

Once bound, the badge turns ∿ and the row shows the live value after the chain, with × (Remove link) next to it. The badge menu also offers ∿ Remove binding. If something else is also writing that property — a rule, physics, another bind — the badge shows ⚠ and clicking it opens the rule that is losing.

03Sources

The picker is grouped; each entry has a one-line hint as its tooltip. Your own values come first: Controls lists the output of every Slider, Toggle and Choice (Fields), and Variables lists each scene variable by name — one click, no second picker.

GroupSourceGives you
BasicFixed numberA constant — no live source
LayerThis layerOne of this layer's own values: X, Y, Z, Width, Height, Rotation, Scale, Opacity, Center X/Y (world), Scroll X/Y, Held in place (0→1), Enters the screen (0→1)
LayerAnother layerThe same list, read from a layer you pick
ScrollScroll progress0 at the top of an artboard, 1 at the bottom — pick the artboard and the axis
ScrollEnters the screen0 as this layer is about to appear from the bottom, 1 once it has fully left the top
ScrollWhile held in place0 → 1 across the stretch where this layer holds
ScrollScroll section0 → 1 across a named section, then stays at 1
PointerMouse X · Mouse YPointer on the canvas, in px
PointerMouse X / Y in artboardPointer inside this layer's artboard, in px
PointerMouse X / Y across artboard (0–1)0 at one edge of the artboard, 1 at the other — parallax and tilt
PointerMouse X / Y across this layer (0–1)The same, across the layer itself
PointerMouse proximity1 at the layer's center, 0 at half the Radius, −1 outside
PointerMouse distanceDistance in px from the pointer to the layer's center
PointerMouse speed X · Mouse speed Y · Mouse speedHow fast the pointer moves, in px/s
PointerMouse sign X · Mouse sign Y−1, 0 or +1 — which way the pointer is moving
PointerWheel ΔX · Wheel ΔY · Wheel amountThe last wheel step in px — pair with the Wheel trigger
PointerWheel X · Wheel Y · Wheel sign X · Wheel sign YWhere the pointer was at the last wheel step, and which way the wheel turned
TimeTimeline timeThe playhead in ms — loops with the composition
TimeClock (never loops)Milliseconds since start, whatever the timeline does
TimeTime of dayThe wall clock — hour, minute, second, weekday, day, month, year, or the day as 0 → 1
AudioAudioA band level 0–1: Level (RMS), Peak, Sub, Bass, Low mid, Mid, High mid, Treble, Onset, Beat, BPM
KeyboardKey held1 while the key is held, 0 otherwise
DataVariableA scene variable, by name
DataData fieldA number from a Data source at a dotted path — items.0.price, stats.cpu, items.length; clicked.price for the clicked copy's row
CopiesCopy index · Copy progressWhich copy is being drawn (0, 1, 2…), or its position across the set 0 → 1
CopiesClicked copy · Clicked instance (3D)Index of the last clicked copy or 3D instance (−1 = none)
Custom expression… appears only when you are editing an expression that was written by hand (from a file or the assistant). The picker covers everything else, and what it builds it can always read back.

04The transform chain

Between the source and the property sits a chain of steps. The ƒ button opens it (it shows the step count once there are any). Read it top to bottom:

The transform chain: Source with its live value, a Map Range step and a Smooth step with their outputs on the wires, then Output
  • The top node is the source with the value entering the chain; the bottom node is the output — what gets written.
  • Each step is one node. Its title line shows a summary (0…1 → 0…360); click it to open the parameters. The number on its right is the step's output, and every wire carries the value flowing through it.
  • + Step at the bottom adds a step; ▲ ▼ move it earlier or later; × deletes it. Steps run in order.
  • Each step knows the range arriving at it (in 0 … 1), so Map Range and Ease work on the real range without you copying numbers.
StepParametersWhat it does
Add / subtractAmountAdds a fixed amount — "8 less than its own Y"
MultiplyFactorMultiplies — "1.1× its own scale"
ClampMin, MaxKeeps the value inside a range
Map RangeInput range (auto or In Min / In Max), Out Min, Out Max, ClampLinear mapping from one range to another. Auto uses the previous step's output range
SnapStepSnaps to steps, e.g. 90 for 90° steps, 0.25 for four steps on 0–1
EasePresetShapes the value with an easing curve over its current range
SmoothTime (s)Exponential smoothing — filters sudden jumps
SpringStiff, DampA spring–damper follow: bouncy, organic
DelaySecReads the value from the past — trail and follow effects
Sign—−1, 0 or +1 — the direction of a speed or a wheel step
Absolute—Drops the sign
Not—Flips a yes/no value
CompareOp, ThresholdWrites 1 when the value passes the threshold (< ≤ > ≥ =), 0 otherwise
MixA (at 0), B (at 1)Blends from A to B using the incoming value as 0 → 1
AccumulateModeAdds the value up — Per second (× dt) or Per event

The last six sit under More in the step menu.

The same editor appears inside rule actions and sequence drivers, so a chain you learn here is the chain everywhere.

05Variables

A variable is a number, text, on/off or color that the scene owns — a score, a selected tab, a theme color. Define them in the Variables tab of the left panel. The switch at its top has three faces:

  • Values — the variables on this page.
  • Lists — rows of data that Repeat, Chart and rules share. A list is not a variable; see Data sources.
  • Theme — color and font tokens with modes (Light, Dark…), part of the design system.
The Variables tab on Values: a Number called score and a Color called accent, each with its type icon, value and trash; score shows a Drives row
  • Press + and pick a type — Number (count, progress, amount), Text (a label or message), Toggle (on or off) or Color (a shared swatch). The new variable is called var and its name is ready to type; click a name any time to rename it.
  • The value next to the name is the starting value — what rules and bindings read before anything writes to it.
  • The icon on the left is the type. Click it to change the type, or to switch Persist (the player keeps the value after a refresh — a cart, a setting) and Exposed to host (the page embedding your scene can read and set it — Embedding). A switched-on option reads Persist · on / Host · on.
  • The trash icon deletes the variable.

Under a Number or Toggle, Drives lists every property that follows it, with its live value — click one to open that bind in Sentences. + Drive… lets you click a layer on the canvas; the variable then drives one of its properties (Esc cancels). Written by appears when rules change the variable with Set Variable, one chip per rule — click it to open the rule.

Where variables show up:

PlaceHow
A bindSource Variable → the name. Chain it like any stream
A rule actionSet Variable writes a value (a number, or another source)
A triggerOn Variable — see the watch modes below
A textFrom… on a text's Content row writes {$score} into the text — Data sources
A guard or conditionCompare a variable against a number or another source — score is greater than 10

A click that does Set Variable score = score + 1, a text layer whose Opacity is bound to score through Clamp 0–1, and an On Condition rule that fires when score equals 10: that's a counter, a meter and a win screen in three sentences.

On Variable — watch modes

The trigger is not only "when it changes". The WHEN pane offers four watches:

WatchFires
ChangesAny write (the default)
Becomes true (0→1)Crossing from false to true
Becomes false (1→0)Crossing the other way
While trueEvery tick for as long as the value is true

A Toggle variable that should start an intro once uses Becomes true. A hold that should keep a glow up uses While true.

06Shortcut recap

Bindright-click a badge → ∿ Add binding… · × or ∿ Remove binding to unbind
Chainƒ opens · + Step · ▲ ▼ reorder · × delete
Variablesleft panel → Variables → Values · + picks a type · type icon for Persist / Exposed to host · trash deletes
Checked against the tool on 2026-09-30.