> ## Documentation Index
> Fetch the complete documentation index at: https://www.tella.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Tella Motion effects

> The 48 effect kinds the Tella Motion addEffect command takes (blurs, glows, shadows, colour grading, keying, distortion, wipes, path effects, echo, repeater), with every parameter's type, range and default.

`addEffect` puts one of these 48 effects on a node's stack by `kind`, with `params` by name (the defaults below apply to any you leave out) and an optional `preset`. `list_motion_effects` (REST: `GET /v1/motion/effects`) returns the same list.

```json theme={"system"}
{
  "type": "addEffect",
  "node": "title",
  "kind": "glow",
  "effectId": "glow1",
  "params": {
    "radius": 40,
    "intensity": 1.5
  }
}
```

* After it is added, each number is a property you can key: `field:@e.<effectId>/effect/<param>`, e.g. `setKeyframes` on `field:@e.glow1/effect/radius`.
* `backdrop: true` filters what is drawn beneath the node's bounds instead of the node (pixel filters only). On a shape filled `#00000000` that makes an adjustment layer; with `fx.liquidGlass` it makes a pane of glass.
* Points are `[x, y]` in the node's pixels, or `"center"` for its centre.
* `kind: "shader"` runs your own SkSL from `source`: `uniform shader image;` is the node and `half4 main(float2 p)` returns each pixel; `uniform float2 resolution` is bound to the node's size. Pass other uniforms' values in `uniforms` and other nodes as shader inputs in `inputs`.

| Kind | Name | Group |
| - | - | - |
| [`blur`](#blur) | Gaussian blur | Blur |
| [`boxBlur`](#boxblur) | Box blur | Blur |
| [`glow`](#glow) | Glow | Light |
| [`dropShadow`](#dropshadow) | Drop shadow | Light |
| [`curves`](#curves) | Curves | Color |
| [`lut`](#lut) | LUT | Color |
| [`colorMatrix`](#colormatrix) | Color matrix | Color |
| [`matteChoker`](#mattechoker) | Matte choker | Key |
| [`dilate`](#dilate) | Grow | Key |
| [`erode`](#erode) | Shrink | Key |
| [`echo`](#echo) | Echo | Time |
| [`repeater`](#repeater) | Repeater | Generate |
| [`trimPath`](#trimpath) | Trim path | Path |
| [`dashPath`](#dashpath) | Dashes | Path |
| [`cornerPath`](#cornerpath) | Round corners | Path |
| [`discretePath`](#discretepath) | Roughen edges | Path |
| [`fx.spinBlur`](#fxspinblur) | Spin blur | Blur |
| [`fx.liquidGlass`](#fxliquidglass) | Liquid glass | Light |
| [`fx.bevelAlpha`](#fxbevelalpha) | Bevel alpha | Light |
| [`fx.levels`](#fxlevels) | Levels | Color |
| [`fx.exposure`](#fxexposure) | Exposure | Color |
| [`fx.vibrance`](#fxvibrance) | Vibrance | Color |
| [`fx.tint`](#fxtint) | Tint | Color |
| [`fx.tritone`](#fxtritone) | Tritone | Color |
| [`fx.fill`](#fxfill) | Fill | Color |
| [`fx.gradientRamp`](#fxgradientramp) | Gradient ramp | Color |
| [`fx.posterize`](#fxposterize) | Posterize | Color |
| [`fx.threshold`](#fxthreshold) | Threshold | Color |
| [`fx.vignette`](#fxvignette) | Vignette | Color |
| [`fx.linearColorKey`](#fxlinearcolorkey) | Color key | Key |
| [`fx.waveWarp`](#fxwavewarp) | Wave warp | Distort |
| [`fx.turbulentDisplace`](#fxturbulentdisplace) | Turbulent displace | Distort |
| [`fx.bulge`](#fxbulge) | Bulge | Distort |
| [`fx.twirl`](#fxtwirl) | Twirl | Distort |
| [`fx.mirror`](#fxmirror) | Mirror | Distort |
| [`fx.polarCoordinates`](#fxpolarcoordinates) | Polar coordinates | Distort |
| [`fx.chromaticAberration`](#fxchromaticaberration) | Chromatic aberration | Distort |
| [`fx.sharpen`](#fxsharpen) | Sharpen | Stylize |
| [`fx.mosaic`](#fxmosaic) | Mosaic | Stylize |
| [`fx.addGrain`](#fxaddgrain) | Add grain | Stylize |
| [`fx.findEdges`](#fxfindedges) | Find edges | Stylize |
| [`fx.fractalNoise`](#fxfractalnoise) | Fractal noise | Generate |
| [`fx.grid`](#fxgrid) | Grid | Generate |
| [`fx.checkerboard`](#fxcheckerboard) | Checkerboard | Generate |
| [`fx.linearWipe`](#fxlinearwipe) | Linear wipe | Transition |
| [`fx.radialWipe`](#fxradialwipe) | Radial wipe | Transition |
| [`fx.venetianBlinds`](#fxvenetianblinds) | Venetian blinds | Transition |
| [`fx.gradientWipe`](#fxgradientwipe) | Gradient wipe | Transition |

## Blur

### blur

**Gaussian blur.** Blurs the node; set one radius to 0 for a directional blur.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `radiusX` | number, 0–1000 px | `10` | Horizontal blur radius. |
| `radiusY` | number, 0–1000 px | `10` | Vertical blur radius. |

### boxBlur

**Box blur.** Box blur: `iterations` passes of a box `radius` pixels either side.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `radius` | number, 0–1000 px | `10` | Box radius. |
| `iterations` | number, 1–8 | `3` | Passes; 3 approach a Gaussian. |
| `dimensions` | `both` \| `horizontal` \| `vertical` | `both` | Axes blurred. |

### fx.spinBlur

**Spin blur.** Radial blur of kind spin about `center`.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `center` | `[x, y]` px or `"center"` | `center` | Centre of the spin, in the node's pixels. |
| `amount` | number, 0–360 ° | `10` | Rotation blurred over. |
| `sampleCount` | integer, 2–64 | `32` | Taps averaged. |

## Light

### glow

**Glow.** Glow: what is brighter than `threshold` is blurred over `radius` and added.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `radius` | number, 0–1000 px | `30` | Glow size. |
| `threshold` | number, 0–1 | `0.6` | Luminance that glows. |
| `intensity` | number, 0–10 | `1` | Strength. |
| `softness` | number, 0–1 | `0.2` | Softness of the threshold. |
| `screen` | boolean | `false` | Screen the glow instead of adding it. |

### dropShadow

**Drop shadow.** A shadow behind the node; with no offset and a light colour, a halo (outer glow).

| Parameter | Type | Default | Description |
| - | - | - | - |
| `color` | colour `#rrggbbaa` | `#00000099` | Shadow colour with alpha. |
| `dx` | number px | `0` | Horizontal offset. |
| `dy` | number px | `12` | Vertical offset. |
| `radiusX` | number, 0–1000 px | `24` | Softness. |
| `radiusY` | number, 0–1000 px | `24` | Softness. |
| `shadowOnly` | boolean | `false` | Draw only the shadow. |
| `inner` | boolean | `false` | Cast the shadow inward from the edges (an inner shadow). |

### fx.liquidGlass

**Liquid glass.** Apple's Liquid Glass: the node's box becomes a pane of frosted glass that bends what lies beneath it at its rim. Use it as a backdrop on a #00000000 shape, or set shapeBlur to make a title's letters (in a transparent or faint colour) glass. Defaults are macOS 26's clear glass in dark mode; presets give its other styles (regular, control, bright, edgeBleed, deepLens, lens, magnifier, thinBevel, subdued, scrim, each also as …Light). Distances are signed, negative inside the pane.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `cornerRadius` | number, 0–2000 px | `48` | Corner radius, continuous like Apple's; half the shorter side makes a capsule. |
| `backdropScale` | number, 0.125–1 | `0.5` | The scale the backdrop is captured at before it is frosted (macOS: 0.5 for clear glass, 0.25 for regular); 1 reads it at full size. |
| `frost` | number, 0–200 | `1` | Apple's blur radius for what is seen through the glass, read from the captured backdrop's mip levels. |
| `frostRamp` | array of numbers | `[1,0.5,0.5,1]` | The frost scaled by these four amounts, reached at the distances in frostRampAt. |
| `frostRampAt` | array of numbers | `[-130,-1,0,0]` | The signed distances (px) frostRamp's amounts are reached at, deepest first. |
| `refraction` | number, -1000–1000 px | `60` | How far in the rim reaches for what it shows (negative reaches outward). |
| `bevel` | number, 0–1000 px | `20` | Depth of the bending rim. |
| `outerRefraction` | number, -1000–1000 px | `-52` | A second lens's reach, taking over between outerFrom and outerTo. |
| `outerBevel` | number, 0–1000 px | `32.5` | The second lens's depth. |
| `outerFrom` | number, -1000–1000 px | `-1` | Signed distance where the second lens starts to take over. |
| `outerTo` | number, -1000–1000 px | `0` | Signed distance where it has taken over (by outerMix). |
| `outerMix` | number, 0–1 | `0` | How far the second lens takes over. |
| `dispersion` | number, 0–200 px | `0` | Width of the rainbow fringe in the rim. |
| `shapeBlur` | number, 0–200 px | `0` | 0 makes the pane the node's box with cornerRadius corners; above 0 the pane is the node's own outline (a title's letters, any shape), read through a blur this wide: about bevel / 1.5, and under half the thinnest stroke. |
| `faceOpacity` | number, 0–1 | `1` | How much the face colour matrix (white and black points, saturation, tint) applies. |
| `saturation` | number, 0–3 | `1.06` | Colour through the glass; 0 is grey. |
| `whitePoint` | number, 0–2 | `1.15` | What white shows as through the glass. |
| `blackPoint` | number, 0–1 | `0.075` | What black shows as through the glass. |
| `tint` | colour `#rrggbbaa` | `#ffffff00` | Colour the face is mixed toward; its alpha is the amount. |
| `bleed` | number, -1000–1000 px | `0` | How far out beyond the rim the bleed reads the scene (negative reads inward). |
| `bleedBevel` | number, 0–1000 px | `0` | Depth over which the bleed's reach eases to nothing. |
| `bleedBlur` | number, 0–200 px | `0` | Blur of the bled scene. |
| `bleedFrom` | number, -1000–1000 px | `1` | Signed distance where the bleed starts. |
| `bleedTo` | number, -1000–1000 px | `0` | Signed distance where it is full. |
| `bleedOpacity` | number, 0–1 | `0` | How strongly the bleed washes over the face. |
| `bleedDarken` | `0` or `1` | `true` | Weight the bleed by the face's luminance (on) or by its darkness (off). |
| `bleedWhite` | number, 0–1 | `1` | What white shows as in the bleed. |
| `bleedBlack` | number, 0–1 | `0.75` | What black shows as in the bleed. |
| `bleedSaturation` | number, 0–3 | `1.2` | Colour of the bleed. |
| `bleedTint` | colour `#rrggbbaa` | `#00000000` | Colour the bleed is mixed toward; its alpha is the amount. |
| `shadowX` | number, -1000–1000 px | `0` | Shadow offset, right. |
| `shadowY` | number, -1000–1000 px | `8` | Shadow offset, down. |
| `shadowSoftness` | number, 0–1000 px | `0` | How far the shadow's edge fades. |
| `shadowOpacity` | number, 0–1 | `0` | Shadow strength; it shows outside the pane but within its box. |
| `shadowWhite` | number, 0–1 | `1` | What white beneath the shadow shows as (Apple's shadow colour matrix). |
| `shadowBlack` | number, 0–1 | `0` | What black beneath the shadow shows as. |
| `shadowBlur` | number, 0–200 | `0` | Apple's blur radius for what is seen beneath the shadow. |
| `shadowFill` | colour `#rrggbbaa` | `#0000001a` | Colour the shadow is mixed toward from what lies beneath it; its alpha is the amount. |
| `shadowLens` | array of numbers | `[75,104,0,0]` | Apple's shadow lens: how far outward the shadow reads what lies beneath it, the depth it eases over, its distance offset, and its vibrancy (how much of what it reads shows under shadowFill). |
| `shadowSaturation` | number, 0–3 | `1.2` | Colour of what is seen beneath the shadow. |
| `shadowSdr` | number, 0–1 | `0.24` | Alpha that SDR adds to shadowFill (Apple's SDR shadow opacity). |
| `toneWhite` | number, 0–1 | `0.97` | What the face dims to between toneFrom and toneTo, by toneOpacity. |
| `toneFrom` | number, -1000–1000 px | `-2` | Signed distance from which the face is fully dimmed (inward). |
| `toneTo` | number, -1000–1000 px | `-1` | Signed distance where the dimming ends. |
| `toneOpacity` | number, 0–1 | `1` | How far the face dims to toneWhite. |
| `shade` | number, 0–1 | `0` | Apple's tint layer: mixes in the face desaturated to shadeSaturation and offset by shadeOffset. |
| `shadeSaturation` | number, 0–3 | `1` | Saturation the shade layer keeps. |
| `shadeOffset` | number, -1–1 | `0` | Brightness the shade layer adds (macOS: 0.1 in dark mode, -0.1 in light). |
| `screen` | number, 0–1 | `0` | A grey screened over the glass, lifting it. |
| `press` | number, 0–1 | `0` | A pressed (0.1) or hovered (0.05) control: darkens by pressDepth times luminance and lifts by pressLift. |
| `pressDepth` | number, -2–2 | `0.9501` | How much luminance pressing takes away. |
| `pressLift` | number, 0–2 | `0.95` | How much pressing lifts (macOS: 0.95 in dark mode, 0 in light). |
| `lightAngle` | number, -360–360 ° | `-45` | Where the key light shines from (0 above, 90 right); a fill light shines from opposite. |
| `highlight` | number, 0–2 | `1` | Brightness of the rim the key light catches. |
| `highlightFill` | number, 0–2 | `1` | Brightness of the rim the fill light catches. |
| `highlightWidth` | number, 0–100 px | `1` | Width of the lit rim. |
| `highlightSpread` | number, 0–360 ° | `160.0002` | How far round the rim each light reaches. |
| `highlightCurve` | number, 0–1 | `0.7` | How the lit rim fades inward: 0 flat, 1 linearly to nothing. |
| `highlightMatrix` | array of numbers | `[2.6492,-1.1803,-0.1189,0.15,-0.3507,1.8199,-0.1192,0.15,-0.3509,-1.1799,2.8809,0.15,0,0,0,0]` | What the glass under the lit rim turns into: Apple's vibrant colour matrix, as red, green and blue rows of (r, g, b weight, bias) then four unused values. |
| `ring` | number, 0–1 | `0` | Strength of a colour matrix applied around the rim. |
| `ringFrom` | number, -1000–1000 px | `-1` | Signed distance where the ring starts to fade in. |
| `ringTo` | number, -1000–1000 px | `0` | Signed distance where it is full. |
| `ringMatrix` | array of numbers | `[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0]` | The ring's colour matrix, laid out as highlightMatrix's. |
| `aberration` | number, 0–100 px | `0` | Apple's magnifier fringe: how far (px) red and blue are pulled apart along the rim. |
| `aberrationBevel` | number, 0–1000 px | `0` | Depth over which the fringe eases out. |
| `aberrationOffset` | number, 0–1000 px | `0` | Depth inside the rim where the fringe ends. |
| `aberrationAngle` | number, -7–7 | `0` | Radians the fringe's direction is turned from the rim. |
| `fringe` | array of numbers | `[0,-1,0,0]` | Where the fringe fades: signed start and end distances, then its strength at each (0 full, 1 none). |
| `adaptive` | number, 0–1 | `1` | 1 sizes the glass by the pane's shorter side as AppKit does, with the values here being those of a 260 pt side; 0 uses them as they are. |
| `kneeLens` | array of numbers | `[60,55.556,-260,-260]` | How refraction, bevel, outerRefraction and outerBevel size: a positive knee grows the value with the shorter side up to it, a negative one in proportion to side / -knee, 0 keeps it. |
| `kneeBleed` | array of numbers | `[0,0,0,-260]` | Knees, as kneeLens's, for bleed, bleedBevel, bleedBlur and frostRampAt's first distance. |
| `kneeFringe` | array of numbers | `[0,0,0,0]` | Knees, as kneeLens's, for aberration, aberrationOffset and fringe's end, then one unused. |
| `kneeShadow` | array of numbers | `[120,-260,0.3333,0]` | Knees, as kneeLens's, for the shadow lens's amount and depth, then shadowSdr's share at a 48 px side (full at 160) and one unused; the lens's vibrancy fades in from a 64 to a 160 px side. |
| `smallPane` | array of numbers | `[1,160,1,0]` | Small panes: the frost's share at a 48 px side and the side it is full at, the shadow's share at 48 px (full at 160), and 1 to fade the bleed in from 64 to 160 px. |
| `small` | number, 0–1 | `1` | 1 swaps in smallFace under a 64 px side, as AppKit's small-pane material. |
| `smallFace` | array of numbers | `[0.9,0.35,0.4286,0.2782]` | A small pane's white point, black point, tint alpha and shadow fill alpha; its shadow is unblurred. |
| `adapt` | array of numbers | `[1,3,1,0]` | AppKit's adaptive material, from the luma read beneath the pane four times a second: 1 adapts panes whose shorter side is at most 64 px, 2 any pane, 0 none; then the tints' colours (dark + 2 × light, 0 black, 1 white); 1 to ramp the face with the luma as control glass does, 2 only the tint's alpha as subdued glass does; 1 to switch the bleed's darkening and the shade's offset by materialShade. |
| `darkFace` | array of numbers | `[0,0,0,1.06]` | The dark material's face: white point, black point, tint alpha, saturation (with the ramp only saturation). |
| `lightFace` | array of numbers | `[0,0,0,1.06]` | The light material's face, as darkFace. |
| `darkLook` | array of numbers | `[1,0.75,1.2,-1]` | The dark material's bleed white, black and saturation, then its shadow fill alpha (negative: ramped with the luma). |
| `lightLook` | array of numbers | `[1,0.75,1.2,-1]` | The light material's bleed and shadow fill, as darkLook. |
| `shadowLooks` | array of numbers | `[1,1.2,1,1.2]` | The shadow's white point and saturation on the dark, then the light material. |
| `darkHighlight` | array of numbers | `[2.6492,-1.1803,-0.1189,0.15,-0.3507,1.8199,-0.1192,0.15,-0.3509,-1.1799,2.8809,0.15,0,0,0,0]` | The rim highlight's matrix on the dark material, laid out as highlightMatrix's. |
| `lightHighlight` | array of numbers | `[1.2024,-1.0014,-0.101,0.9,-0.2976,0.4987,-0.1011,0.9,-0.2977,-1.0012,1.3989,0.9,0,0,0,0]` | The rim highlight's matrix on the light material. |
| `materialPress` | array of numbers | `[0.9501,0.95,0.9001,0]` | pressDepth and pressLift on the dark, then the light material. |
| `materialShade` | array of numbers | `[0,0,0,0]` | With adapt's fourth value 1: the bleed's darkening on the dark and the light material (0 or 1), then shadeOffset on the dark and the light appearance. |
| `appearanceSwitch` | array of numbers | `[0.6,0.875,0,0]` | Where AppKit's appearance switches, which the press and (with adapt's fourth value) the shade follow: as hysteresis. Most styles switch it with the material. |
| `hysteresis` | array of numbers | `[0.6,0.875,0,0]` | Where the material switches: to dark under the first luma level, to light over the second; then 1 to start light (light appearance), 0 dark; one unused. |

Presets (`preset` in `addEffect` and `setEffect`):

* `clear`: macOS's clear glass (also AppKit variants 2, 3, 7, 8 and 10): a light frost and a strong rim lens. Dark appearance.
* `clearLight`: macOS's clear glass (also AppKit variants 2, 3, 7, 8 and 10): a light frost and a strong rim lens. Light appearance.
* `regular`: macOS's regular glass: more frost and a paler face. Dark appearance.
* `regularLight`: macOS's regular glass: more frost and a paler face. Light appearance.
* `control`: A small control's glass: a shallower lens and a thinner bevel (variant 4). Dark appearance.
* `controlLight`: A small control's glass: a shallower lens and a thinner bevel (variant 4). Light appearance.
* `bright`: Glass lifted by a grey screen layer (variant 5). Dark appearance.
* `brightLight`: Glass lifted by a grey screen layer (variant 5). Light appearance.
* `edgeBleed`: No face colouring, the scene bleeding in from beyond the rim, darkened, with a lit rim (variant 6). Dark appearance.
* `edgeBleedLight`: No face colouring, the scene bleeding in from beyond the rim, darkened, with a lit rim (variant 6). Light appearance.
* `deepLens`: A deeper, stronger lens (variant 9). Dark appearance.
* `deepLensLight`: A deeper, stronger lens (variant 9). Light appearance.
* `lens`: Unfrosted glass with a lit rim and an outer lens (variant 11). Dark appearance.
* `lensLight`: Unfrosted glass with a lit rim and an outer lens (variant 11). Light appearance.
* `magnifier`: A sharp lens and nothing else, like a loupe (variant 19). Dark appearance.
* `magnifierLight`: A sharp lens and nothing else, like a loupe (variant 19). Light appearance.
* `thinBevel`: Regular glass with a 5 px bevel (variant 20). Dark appearance.
* `thinBevelLight`: Regular glass with a 5 px bevel (variant 20). Light appearance.
* `subdued`: Regular glass dimmed, as AppKit's subdued state draws it. Dark appearance.
* `subduedLight`: Regular glass dimmed, as AppKit's subdued state draws it. Light appearance.
* `scrim`: Regular glass without its lens, as AppKit's scrim state draws it. Dark appearance.
* `scrimLight`: Regular glass without its lens, as AppKit's scrim state draws it. Light appearance.

### fx.bevelAlpha

**Bevel alpha.** The alpha edge lit from `lightAngle`.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `edgeThickness` | number, 0–200 px | `4` | Edge width. |
| `lightAngle` | number, -360–360 ° | `-60` | Light direction. |
| `intensity` | number, 0–1 | `0.4` | Strength. |

## Color

### curves

**Curves.** Channel curves: each a list of \[x, y] points in 0..1 with increasing x.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `rgb` | `[x0, y0, x1, y1, …]` | `[]` | The rgb curve as \[x0, y0, x1, y1, …] (2 to 8 points). |
| `red` | `[x0, y0, x1, y1, …]` | `[]` | The red curve as \[x0, y0, x1, y1, …] (2 to 8 points). |
| `green` | `[x0, y0, x1, y1, …]` | `[]` | The green curve as \[x0, y0, x1, y1, …] (2 to 8 points). |
| `blue` | `[x0, y0, x1, y1, …]` | `[]` | The blue curve as \[x0, y0, x1, y1, …] (2 to 8 points). |
| `alpha` | `[x0, y0, x1, y1, …]` | `[]` | The alpha curve as \[x0, y0, x1, y1, …] (2 to 8 points). |

### lut

**LUT.** A colour look-up table from the document's LUT assets.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `lut` | asset id | \`\` | The LUT asset id. |
| `intensity` | number, 0–1 | `1` | Mix with the original. |

### colorMatrix

**Color matrix.** A 4×5 colour matrix, row-major (20 numbers), for hue turns and channel mixing.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `matrix` | array of numbers | `[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0]` | 20 numbers. |

### fx.levels

**Levels.** Inputs mapped from inputBlack..inputWhite through gamma onto outputBlack..outputWhite.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `inputBlack` | number, 0–1 | `0` | Input black point. |
| `inputWhite` | number, 0–1 | `1` | Input white point. |
| `gamma` | number, 0.1–10 | `1` | Midtone gamma. |
| `outputBlack` | number, 0–1 | `0` | Output black. |
| `outputWhite` | number, 0–1 | `1` | Output white. |

### fx.exposure

**Exposure.** Exposure in linear light: stops, offset, gamma.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `exposure` | number, -10–10 | `0` | Stops. |
| `offset` | number, -1–1 | `0` | Offset. |
| `gammaCorrection` | number, 0.1–10 | `1` | Gamma. |
| `inputIsLinear` | `0` or `1` | `0` | The working space is linear. |

### fx.vibrance

**Vibrance.** Vibrance raises saturation most where it is lowest; saturation raises it evenly.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `vibrance` | number, -1–1 | `0` | Vibrance. |
| `saturation` | number, -1–1 | `0` | Saturation. |

### fx.tint

**Tint.** Luminance mapped from mapBlackTo to mapWhiteTo.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `mapBlackTo` | colour `#rrggbb` | `#000000` | Colour for black. |
| `mapWhiteTo` | colour `#rrggbb` | `#ffffff` | Colour for white. |
| `amount` | number, 0–1 | `1` | Mix. |

### fx.tritone

**Tritone.** Luminance mapped through shadows, midtones and highlights.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `shadows` | colour `#rrggbb` | `#000000` | Shadow colour. |
| `midtones` | colour `#rrggbb` | `#7f6a4f` | Midtone colour. |
| `highlights` | colour `#rrggbb` | `#ffffff` | Highlight colour. |
| `blend` | number, 0–1 | `0` | Mix with the original (0 is fully toned). |

### fx.fill

**Fill.** Colour replaced by `color`, alpha kept.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `color` | colour `#rrggbb` | `#ffffff` | Fill colour. |
| `opacity` | number, 0–1 | `1` | Mix. |

### fx.gradientRamp

**Gradient ramp.** Colour replaced by a ramp from `color1` at `start` to the last of `colorCount` colours at `end`, alpha kept: gradient text or shapes. Points are the node's own pixels, so the ramp moves and scales with it.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `start` | `[x, y]` px or `"center"` | `[0,0]` | Where the ramp starts, in the node's pixels. |
| `end` | `[x, y]` px or `"center"` | `[1920,0]` | Where it ends. |
| `color1` | colour `#rrggbb` | `#000000` | Colour at start. |
| `color2` | colour `#rrggbb` | `#ffffff` | Next colour. |
| `color3` | colour `#rrggbb` | `#ffffff` | Third colour, with colorCount 3 or 4. |
| `color4` | colour `#rrggbb` | `#ffffff` | Fourth colour, with colorCount 4. |
| `colorCount` | integer, 2–4 | `2` | Colours in the ramp, evenly spaced. |
| `radial` | integer, 0–1 | `0` | 1 for a radial ramp outward from start. |
| `opacity` | number, 0–1 | `1` | Mix. |

### fx.posterize

**Posterize.** Each channel rounded to `levels` steps.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `levels` | number, 2–64 | `6` | Steps. |

### fx.threshold

**Threshold.** White where luminance reaches `level`, black elsewhere.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `level` | number, 0–1 | `0.5` | Level. |

### fx.vignette

**Vignette.** Darkens (or colours) the edges.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `amount` | number, 0–1 | `0.6` | Strength. |
| `size` | number, 0–1 | `0.35` | Radius of the untouched centre, as a fraction of the height. |
| `softness` | number, 0–1 | `0.35` | Width of the falloff. |
| `color` | colour `#rrggbbaa` | `#000000ff` | Edge colour. |

## Key

### matteChoker

**Matte choker.** Softens the alpha, then cuts it at a threshold moved by `choke`: positive shrinks the matte, negative spreads it.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `choke` | number, -127–127 | `0` | Shrink (+) or spread (−). |
| `softness` | number, 0–200 px | `2` | Edge softness. |
| `graySoftness` | number, 0–1 | `0.1` | Width of the cut. |

### dilate

**Grow.** Dilates the node's pixels by `radius`.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `radiusX` | number, 0–200 px | `2` | Radius. |
| `radiusY` | number, 0–200 px | `2` | Radius. |

### erode

**Shrink.** Erodes the node's pixels by `radius`.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `radiusX` | number, 0–200 px | `2` | Radius. |
| `radiusY` | number, 0–200 px | `2` | Radius. |

### fx.linearColorKey

**Color key.** Pixels within `tolerance` of `keyColor` turn transparent (green screen).

| Parameter | Type | Default | Description |
| - | - | - | - |
| `keyColor` | colour `#rrggbb` | `#00ff00` | Colour keyed out. |
| `tolerance` | number, 0–1 | `0.3` | Distance keyed fully. |
| `softness` | number, 0–1 | `0.1` | Fade beyond it. |

## Time

### echo

**Echo.** Copies of the node from other times (motion trails): `count` copies `interval` seconds apart (negative looks back).

| Parameter | Type | Default | Description |
| - | - | - | - |
| `count` | number, 1–64 | `4` | Echoes. |
| `interval` | seconds | `-0.05` | Time between echoes. |
| `decay` | number, 0–1 | `0.6` | Each echo's strength of the one before. |
| `operator` | `add` \| `screen` \| `maximum` \| `minimum` \| `compositeInBack` \| `compositeInFront` \| `blend` | `compositeInBack` | How echoes combine. |

## Generate

### repeater

**Repeater.** Copies of the node, each moved, turned and scaled from the one before.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `copies` | number, 0–100 | `3` | Copies. |
| `positionX` | number px | `100` | Each copy's move. |
| `positionY` | number px | `0` | Each copy's move. |
| `rotation` | number ° | `0` | Each copy's turn. |
| `scaleX` | number, 0–10 | `1` | Each copy's scale (1 is the same). |
| `scaleY` | number, 0–10 | `1` | Each copy's scale (1 is the same). |
| `startOpacity` | number, 0–1 | `1` | First copy's opacity. |
| `endOpacity` | number, 0–1 | `1` | Last copy's opacity. |

### fx.fractalNoise

**Fractal noise.** Replaces the pixels with animated fractal noise.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `scale` | number, 1–4000 px | `200` | Noise size. |
| `offset` | `[x, y]` px or `"center"` | `[0,0]` | Offset. |
| `evolution` | number ° | `0` | Animate to make it move (360 is one cell). |
| `complexity` | integer, 1–10 | `6` | Octaves. |
| `subInfluence` | number, 0–1 | `0.7` | Weight of finer octaves. |
| `subScaling` | number, 0.1–1 | `0.56` | How much finer. |
| `contrast` | number, 0–10 | `1` | Contrast. |
| `brightness` | number, -1–1 | `0` | Brightness. |

### fx.grid

**Grid.** Grid lines over the node.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `anchor` | `[x, y]` px or `"center"` | `[0,0]` | Grid origin. |
| `size` | `[x, y]` px or `"center"` | `[100,100]` | Cell size. |
| `border` | number, 0–200 px | `2` | Line width. |
| `color` | colour `#rrggbbaa` | `#ffffffff` | Line colour. |

### fx.checkerboard

**Checkerboard.** Alternate squares in `color` over the node.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `anchor` | `[x, y]` px or `"center"` | `[0,0]` | Origin. |
| `size` | `[x, y]` px or `"center"` | `[80,80]` | Square size. |
| `color` | colour `#rrggbbaa` | `#ffffffff` | Square colour. |

## Path

### trimPath

**Trim path.** Keeps start..end of a shape's outline: key end from 0 to 1 to draw a line on.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `start` | number, 0–1 | `0` | Start. |
| `end` | number, 0–1 | `1` | End. |
| `offset` | number, -10–10 | `0` | Slides the kept part. |

### dashPath

**Dashes.** Dashes a stroked shape.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `dash` | number, 0–2000 px | `20` | Dash length. |
| `gap` | number, 0–2000 px | `10` | Gap length. |
| `phase` | number px | `0` | Offset along the path; animate to march. |

### cornerPath

**Round corners.** Rounds a shape's corners.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `radius` | number, 0–2000 px | `12` | Radius. |

### discretePath

**Roughen edges.** Breaks a shape's outline into jittered segments.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `length` | number, 1–1000 px | `10` | Segment length. |
| `deviation` | number, 0–200 px | `3` | Jitter. |

## Distort

### fx.waveWarp

**Wave warp.** A sine wave along `angle` moves pixels across it; animate phase to make it travel.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `waveHeight` | number, 0–500 px | `10` | Wave height. |
| `waveWidth` | number, 1–2000 px | `80` | Wavelength. |
| `angle` | number, -360–360 ° | `90` | Direction. |
| `phase` | number, -3600–3600 ° | `0` | Phase. |

### fx.turbulentDisplace

**Turbulent displace.** Pixels taken from up to `amount` away along fractal noise.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `amount` | number, 0–500 px | `20` | Displacement. |
| `size` | number, 1–2000 px | `100` | Noise size. |
| `complexity` | integer, 1–10 | `3` | Octaves. |
| `evolution` | number ° | `0` | Animate to make it move (360 is one cell). |

### fx.bulge

**Bulge.** Magnifies (positive height) or pinches the ellipse about `center`.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `center` | `[x, y]` px or `"center"` | `center` | Centre. |
| `radius` | `[x, y]` px or `"center"` | `[200,200]` | Ellipse radii. |
| `height` | number, -4–4 | `0.5` | Strength; negative pinches. |

### fx.twirl

**Twirl.** Turns pixels about `center`, easing to none at `radius`.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `angle` | number, -3600–3600 ° | `90` | Turn at the centre. |
| `radius` | number, 0–4000 px | `300` | Reach. |
| `center` | `[x, y]` px or `"center"` | `center` | Centre. |

### fx.mirror

**Mirror.** Reflects one side of the line through `center` onto the other.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `center` | `[x, y]` px or `"center"` | `center` | A point on the line. |
| `angle` | number, -360–360 ° | `0` | Line direction. |

### fx.polarCoordinates

**Polar coordinates.** Wraps the image around its centre (toPolar 1) or unwraps it.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `interpolation` | number, 0–1 | `1` | How far. |
| `toPolar` | `0` or `1` | `1` | Wrap (1) or unwrap (0). |

### fx.chromaticAberration

**Chromatic aberration.** Splits red and blue outward from the centre.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `amount` | number, 0–200 px | `6` | Split at the edges. |

## Stylize

### fx.sharpen

**Sharpen.** Unsharp mask.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `amount` | number, 0–5 | `0.5` | Strength. |

### fx.mosaic

**Mosaic.** Blocks of solid colour (pixelate).

| Parameter | Type | Default | Description |
| - | - | - | - |
| `horizontalBlocks` | number, 1–4000 | `40` | Blocks across. |
| `verticalBlocks` | number, 1–4000 | `22` | Blocks down. |

### fx.addGrain

**Add grain.** Film grain; it changes every frame.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `intensity` | number, 0–1 | `0.15` | Strength. |
| `size` | number, 0.5–20 px | `1.5` | Grain size. |
| `monochrome` | `0` or `1` | `1` | Grey grain rather than colour. |

### fx.findEdges

**Find edges.** Dark lines where luminance changes.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `invert` | `0` or `1` | `0` | Light lines on dark. |
| `blend` | number, 0–1 | `0` | Mix with the original. |

## Transition

### fx.linearWipe

**Linear wipe.** Wipes the node away from one side; key completion from 0 to 1.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `completion` | number, 0–1 | `0` | How much is wiped. |
| `angle` | number, -360–360 ° | `90` | 90 wipes from the left. |
| `feather` | number, 0–1000 px | `0` | Edge softness. |

### fx.radialWipe

**Radial wipe.** Wipes the node away clockwise about `center`.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `completion` | number, 0–1 | `0` | How much is wiped. |
| `startAngle` | number, -360–360 ° | `0` | Where it starts. |
| `center` | `[x, y]` px or `"center"` | `center` | Centre. |
| `feather` | number, 0–1000 px | `0` | Edge softness. |
| `counterclockwise` | `0` or `1` | `0` | Reverse. |

### fx.venetianBlinds

**Venetian blinds.** Stripes, each wiped away by completion.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `completion` | number, 0–1 | `0` | How much is wiped. |
| `angle` | number, -360–360 ° | `0` | Stripe direction. |
| `width` | number, 1–2000 px | `40` | Stripe width. |
| `feather` | number, 0–1000 px | `0` | Edge softness. |

### fx.gradientWipe

**Gradient wipe.** Pixels wiped in order of another node's luminance, darkest first.

| Parameter | Type | Default | Description |
| - | - | - | - |
| `completion` | number, 0–1 | `0` | How much is wiped. |
| `softness` | number, 0–1 | `0.1` | Edge softness. |
| `invert` | `0` or `1` | `0` | Reverse the order. |
| `gradient` | node id | \`\` | The node whose luminance orders the wipe (hide it to use it only for this). |


## Related topics

- [Tella Motion](https://www.tella.com/docs/mcp-tools/motion.md)
- [List Tella Motion effects](https://www.tella.com/docs/api-reference/tella-motion/list-tella-motion-effects.md)
- [Tella Motion commands](https://www.tella.com/docs/mcp-tools/motion-commands.md)
- [Tella Motion properties, easing and fonts](https://www.tella.com/docs/mcp-tools/motion-values.md)
- [Edit a Tella Motion document](https://www.tella.com/docs/api-reference/tella-motion/edit-a-tella-motion-document.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.