cue:scale — Scaling Animation
scale() adjusts the size of SVG objects using sequences, patterns, continuous pulsing, or independent X/Y scaling.
BASIC FORMS
To a size, and stay
scale(1.5) at once
scale(0.5, dur:2) gliding there over 2 beats, from the size it has
scale(2, 0.5) width and height
From the live console: s3 > scale(1.5). A scale with a rotate on the
same shape: they compose.
Uniform scaling
scale(values:[1,1.5,1], dur:2)
Non-uniform (XY)
scaleXY([1,1.3],[1,0.6], dur:1)
scale(x:[1,1.3], y:[1,0.6], dur:1)
scaleXY(Prand([0.5,1.5],inf), Prand([0.5,1.5],inf), dur:0.3, interp:step)
The first list (or pattern) is the width, the second the height; each steps on its own.
Continuous pulse
scale(min:1, max:1.3, dur:2)
TRIGGERING
- automatic page-mode
- scroll edge
- cue activation
TRIGGER DELAY
tdelay:<beats>
Delays scaling start.
scale(values:[1,1.4,1], tdelay:3)
INITIAL VISIBILITY
init:
Controls how the element appears before the animation begins.
| Value | Effect |
|---|---|
show |
Visible immediately (default) |
hide |
Hidden until triggered |
ghost |
Semi-transparent (30% opacity), no interaction |
fadein(beats) |
Fade in over that many beats |
armed |
Ghost opacity (0.7), click to start animation |
armed(opacity) |
Custom ghost opacity, click to start |
armed(opacity, fade) |
Custom opacity and fade duration, click to start |
Initial scale is applied immediately regardless of init state.
scale([1,1.5,1], tdelay:4, init:ghost)
scale([1,2,1], dur:3, init:fadein(1))
scale([1,1.4,1], dur:2, init:armed)
scale([1,1.4,1], dur:2, init:armed(0.3), trig:playhead)
SEQUENCES
| Key | Meaning |
|---|---|
values |
uniform scale list |
x, y |
independent XY sequences |
dur |
duration per step |
mode |
loop / once / alternate |
interp |
smooth / step |
hold |
pause (smooth only) |
Pattern forms (Pseq, Prand, etc.) supported for all parameters.
CONTINUOUS SCALING
scale(min:1, max:1.4, dur:1.5, loop:0)
UID — Live Updates
scale(values:[1,1.2,1], uid:s1)
scale(uid:s1, dur:0.5)
NETWORK SYNCHRONIZATION
By default, scale animations are synchronized across all connected clients. The first client to start an animation becomes the leader and broadcasts positions every 10 seconds. Late-joining clients sync to the leader's position.
sync: — Enable/Disable Sync
| Value | Effect |
|---|---|
sync:1 |
Enable network sync (default) |
sync:0 |
Disable sync — animation runs independently per client |
Use sync:0 for animations that should vary between performers:
scale(values:[1,1.5,1], dur:2, sync:0)
SIGNAL-BOUND PARAMETERS
Animation speed, duration, and scale values can be controlled in real-time by binding to fader signals from the control plane.
Signal Reference Syntax
scale(min:1, max: follow(scaleFader.t, 1, 2), dur: follow(speedFader.t, 4, 0.5), uid:pulse)
The signal reference format is:
follow(source.channel, min, max[, default][, curve])
| Component | Description |
|---|---|
source |
UID of the controlling fader/o2p |
channel |
Signal channel (t, x, y, angle) |
min-max |
Output range (maps 0-1 input to this range) |
default |
Optional starting value |
curve |
Optional curve: lin, exp2, exp3, log, sqrt |
Examples
// Duration controlled by fader: 4 beats (slow) to 0.5 beats (fast)
scale(min:1, max:1.5, dur: follow(speedFader.t, 4, 0.5), uid:pulse)
// Scale max controlled by fader: 1x to 2x
scale(min:1, max: follow(sizeFader.t, 1, 2), dur:1, uid:growPulse)
// Independent X/Y scale bound to different faders
scaleXY(sx: follow(xFader.t, 1, 2), sy: follow(yFader.t, 1, 1.5), dur:2, uid:xyScale)
// With exponential curve for finer control
scale(min:1, max:1.5, dur: follow(speedFader.t, 4, 0.5, exp3), uid:smoothPulse)
How It Works
- The fader publishes its position (0-1) to the control plane
- The value is mapped through the specified range and curve
- The animation's parameter updates in real-time
See Control Plane documentation for full signal reference syntax.
FULL PARAMETER LIST
| Key | Description |
|---|---|
values |
scalar sequence |
x, y |
axis-specific sequences |
sx, sy |
signal-bound X/Y scale values |
min, max |
continuous scale range (supports signal refs) |
dur |
step duration (supports signal refs) |
hold |
pause |
ease |
tween curve |
mode |
loop logic |
interp |
smooth/step |
uid |
animation identity |
trig |
trigger |
tdelay |
delay after trigger |
init |
initial visibility state |
sync |
network sync (0/1, default 1) |
EXAMPLES
scale([1,2,1], dur:2, tdelay:3)
scaleXY([1,1.4],[1,0.6], dur:1)
scale(Pseq([1,1.5,1],inf), dur:Prand([0.5,1],inf))
Stopping: off:1
scale(off:1) on the same element stops it at the size it has reached. Run the scale again to start it from there. In the live console Ctrl+Shift+. on the line does this.
What a scale publishes
| Channel | Meaning |
|---|---|
sx |
x scale factor |
sy |
y scale factor |
uniform |
the mean of the two |
t |
where it is between the smallest and the largest size it has been sent to, 0..1 (a values: list) |
uniform is the one to reach for when a shape scales evenly and you want one
number out of it rather than picking sx arbitrarily.
follow(name.channel, lo, hi) reads its channel as 0..1, and the factors are
not: uniform going 0.1 → 3 would send a 200..4000 range up to 11 600. t
is already 0..1 across the scale's own range, so it sweeps exactly lo to hi:
synth(uid:bass, wave:saw, filter:{type:lp, freq:follow(bsc.t, 200, 4000), q:1})
bass > scale(uid:bsc, values:[0.1, 3], dur:1)
Give the scale a uid: to follow it by: without one it is named at random.
A scale can follow a signal too. Its size follows, as its sizes are given
otherwise -- first, or as values: -- both axes at once; sx: and sy:
follow one axis each (a lone sx: stretches the width only):
bass > scale(follow(bass.t, 0.2, 1.5)) the synth's pitch sets the size
bass > scale(follow(bass.t, 0.2, 1.5), uid:bsc) ... named, to follow in turn
bass > scale(uid:bsc, values:follow(bass.t, 0.2, 1.5)) the same
bass > scale(sx:follow(bass.t, 1, 3)) only wider
Following, it publishes t as well: where it is in the follow() range.
scale(uid:pulse, values:[1, 1.8, 1], dur:2, loop:0)
rotate(uid:r1, dir:1, dur: follow(pulse.uniform, 6, 0.5))
sx, sy and dur are also inlets — see the connections view.
Demo
See demo-scale — uniform and per-axis scaling, value lists, and signal-bound sx/sy.
http://localhost:8001/?project=demo-scale
Tip: use ← → or ↑ ↓ to navigate the docs