> ## 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 properties, easing and fonts

> The property names, units and ranges setProperty and setKeyframes take in Tella Motion, with every easing, blend mode, text animation preset and font.

These are the values the [Tella Motion commands](https://www.tella.com/docs/mcp-tools/motion-commands.md) take, the same over MCP and the REST API. `inspect_motion_node_properties` (REST: `GET /v1/motion/documents/{id}/nodes?path=…`) shows a node's properties with their current values, keys and key IDs.

## Properties

`setProperty`, `setKeyframes`, `editKeyframe`, `removeKeyframes`, `setExpression` and `bindProperty` name a property with `property`. Commands take values in the units below. Percentages are fractions, even where the editor shows %: opacity `0.5` is half, scale `2` doubles.

| Property | Group | Unit in commands | Range | Notes |
| - | - | - | - | - |
| `anchorX` | Transform | px | | The point the node scales and rotates around. |
| `anchorY` | Transform | px | | The point the node scales and rotates around. |
| `x` | Transform | px | | Horizontal position. |
| `y` | Transform | px | | Vertical position. |
| `scale` | Transform | fraction (`1` is 100%) | ≥ 0 | `2` doubles the size. |
| `rotation` | Transform | degrees | | Clockwise. |
| `opacity` | Transform | fraction (`1` is 100%) | 0 to 1 | `0` is invisible, `1` opaque. |
| `rotateX` | 3D | degrees | | 3D tilt around the horizontal axis. |
| `rotateY` | 3D | degrees | | 3D turn around the vertical axis. |
| `perspective` | 3D | px | ≥ 0 | Distance of the 3D camera. |
| `blur` | Effects | px | ≥ 0 | Gaussian blur radius. |
| `shadowX` | Effects | px | | Drop shadow offset. |
| `shadowY` | Effects | px | | Drop shadow offset. |
| `shadowBlur` | Effects | px | ≥ 0 | Drop shadow softness. |
| `shadowOpacity` | Effects | fraction (`1` is 100%) | 0 to 1 | Drop shadow strength. |
| `cornerRadius` | Effects | px | ≥ 0 | Rounds the node's corners. |
| `brightness` | Color | fraction (`1` is 100%) | 0 to 4 | `1` leaves it unchanged. |
| `contrast` | Color | fraction (`1` is 100%) | 0 to 4 | `1` leaves it unchanged. |
| `saturation` | Color | fraction (`1` is 100%) | 0 to 4 | `1` leaves it unchanged; `0` is grey. |
| `color` | Color | colour `#rrggbb` | | A title's text colour or a shape's fill. |
| `shadowColor` | Color | colour `#rrggbb` | | Drop shadow colour. |
| `volume` | Audio | dB | -60 to 24 | Gain of anything with sound; -60 is silent. |
| `pan` | Audio | fraction (`1` is 100%) | -1 to 1 | `-1` is left, `1` right. |
| `blendMode` | Style | name, set without `at` | see [Blend modes](#blend-modes) | Not animatable. |
| `flipX`, `flipY` | Style | boolean, set without `at` | | Mirror the node. Not animatable. |

Some properties exist only on some nodes: `color` on titles and shapes, `volume` and `pan` on anything with sound. Blur, shadow, corner and colour properties are added to a node's style when you first set them.

### Other numbers a node stores

Any other animatable number is a `field:` property, named by where it sits in the node. `inspect_motion_node_properties` lists a node's with their exact names. Common ones:

* **An effect's parameters**: `field:@e.<effectId>/effect/<param>`, e.g. `field:@e.glow1/effect/radius`.
* **A title's weight** on a variable font: `field:content/style/fontWeight` (1–1000), e.g. a word settling from 300 to 700 as it lands. The [fonts table](#fonts) says which fonts can animate it.

## Easing

Keys ease into the next key. Commands take these names wherever a field says easing:

| Easing | Feel |
| - | - |
| `linear` | Constant speed |
| `hold` | Jumps to the next key's value when it arrives |
| `easyEase` | After Effects' Easy Ease, in and out |
| `easyEaseIn` | Easy Ease into the next key |
| `easyEaseOut` | Easy Ease out of this key |
| `easeInOutSine` | Smooth |
| `easeInOutCubic` | Smooth, strong |
| `easeInOutExpo` | Dramatic |
| `easeOutCubic` | Decelerate |
| `easeInCubic` | Accelerate |
| `easeOutBack` | Overshoot |
| `easeInOutBack` | Anticipate |
| `springGentle` | Spring |
| `springBouncy` | Bouncy spring |
| `continuous` | `setKeyframes` only: After Effects' auto bezier. Speed carries through each key, so a fast move eases into a slow drift without a jolt or overshoot. Numbers only. |
| `{"x1", "y1", "x2", "y2"}` | A cubic bezier, as in CSS `cubic-bezier()`; `x1` and `x2` are 0–1. |

`setTimeRemap` keys take `linear`, `hold` or `ease`; `setCurve` keys take `linear`, `hold`, `ease`, `easeIn` or `easeOut`.

## In and Out animations

`animate` takes `in` and `out`, each `{kind, duration, easing?}` with `kind` one of `fade`, `slideLeft`, `slideRight`, `slideUp`, `slideDown` or `pop`.

## Text animations

`setTextAnimation` animates a title per `unit` (`character`, `word` or `line`), starting `from` `start`, `end`, `center`, `edges` or `random`. Presets: `typewriter`, `fade`, `rise`, `drop`, `pop`, `blur`, `slideLeft`, `slideRight`, `spread`, `spin`.

## Expressions

`setExpression` adds one of these to a property; the value and keys underneath stay editable.

* `{"kind": "wiggle", "frequency", "amount", "seed"?}`: random drift, `frequency` wiggles per second, `amount` in the property's units. `{"kind": "noWiggle"}` removes it.
* `{"kind": "loop", "direction": "in" | "out", "mode": "cycle" | "pingPong" | "offset" | "continue", "keyframes"?}`: repeats the keys after the last (`out`) or before the first (`in`). `{"kind": "noLoop", "direction"}` removes it.

`bindProperty` and `setCurve` take a different kind of expression: a number, `{"curve": name}`, `{"time": "seconds"}`, `{"op", "args"}` with `op` one of `add`, `subtract`, `multiply`, `divide`, `min`, `max`, `abs`, `negate`, `sin`, `cos`, `pow`, `sqrt`, `floor`, `round`, `mod`, `mix`, `clamp`, `step`, `smoothstep`, or `{"project": {"point", "camera"}, "axis"}` for where a canvas point lands when a lens shader films the canvas as a tilted plane.

## Blend modes

`setProperty` with `property: "blendMode"` takes `normal` or: `clear`, `src`, `dst`, `srcOver`, `dstOver`, `srcIn`, `dstIn`, `srcOut`, `dstOut`, `srcATop`, `dstATop`, `xor`, `plus`, `modulate`, `screen`, `overlay`, `darken`, `lighten`, `colorDodge`, `colorBurn`, `hardLight`, `softLight`, `difference`, `exclusion`, `multiply`, `hue`, `saturation`, `color`, `luminosity`, `linearBurn`, `vividLight`, `linearLight`, `pinLight`, `hardMix`, `subtract`, `divide`, `darkerColor`, `lighterColor`, `stencilAlpha`, `stencilLuma`, `silhouetteAlpha`, `silhouetteLuma`, `dissolve`.

## Fonts

`addTitle` and `setTitle` take a font by `slug`. `weight` takes 100 (thin) to 900 (black); a font that can't draw a weight draws the nearest one it has, and the batch result's notes say so. `list_motion_fonts` (REST: `GET /v1/motion/fonts`) returns this list.

| Slug | Family | Weights | Weight animates |
| - | - | - | - |
| `inter` | Inter | 100–900 | Yes |
| `roboto-mono` | Roboto Mono | 100–700 | Yes |
| `archivo` | Archivo | 100–900 | Yes |
| `barlow` | Barlow | 500 | No |
| `caveat` | Caveat | 400–700 | Yes |
| `dm-sans` | DM Sans | 100–1000 | Yes |
| `figtree` | Figtree | 300–900 | Yes |
| `lora` | Lora | 400–700 | Yes |
| `merriweather` | Merriweather | 300–900 | Yes |
| `montserrat` | Montserrat | 100–900 | Yes |
| `nunito-sans` | Nunito Sans | 200–1000 | Yes |
| `open-sans` | Open Sans | 300–800 | Yes |
| `oswald` | Oswald | 200–700 | Yes |
| `playfair-display` | Playfair Display | 400–900 | Yes |
| `poppins` | Poppins | 500 | No |
| `raleway` | Raleway | 100–900 | Yes |
| `roboto` | Roboto | 100–900 | Yes |
| `roboto-flex` | Roboto Flex | 100–1000 | Yes |
| `source-sans-3` | Source Sans 3 | 200–900 | Yes |
| `space-grotesk` | Space Grotesk | 300–700 | Yes |

### Your own fonts

Fonts uploaded to your library or your workspace's (with the font picker in the editor) work too: `list_motion_fonts` returns them under `libraryFonts`, and `addTitle` and `setTitle` take one by its `id` (`mi_…`) as `font`. A family uploaded as several files lists the weight of each, and a title draws the file nearest its `weight`. A font uploaded as one file draws the weights that file has: its weight animates only if the file is a variable font.


## Related topics

- [List Tella Motion fonts](https://www.tella.com/docs/api-reference/tella-motion/list-tella-motion-fonts.md)
- [Tella Motion commands](https://www.tella.com/docs/mcp-tools/motion-commands.md)
- [Tella Motion](https://www.tella.com/docs/mcp-tools/motion.md)
- [Duplicate a Tella Motion document](https://www.tella.com/docs/api-reference/tella-motion/duplicate-a-tella-motion-document.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.