Helpers

Transform

Layer transform

Composition Diagram for Transform Transform Transform Shape
Attribute Type Title Description
a Position

Anchor Point

Anchor point: a position (relative to its parent) around which transformations are applied (ie: center for rotation / scale)

p Splittable Position

Position

Position / Translation

r Scalar

Rotation

Rotation in degrees, clockwise

s Vector

Scale

Scale factor, [100, 100] for no scaling

o Scalar

Opacity

Opacity

sk Scalar

Skew

Skew amount as an angle in degrees

sa Scalar

Skew Axis

Direction along which skew is applied, in degrees (0 skews along the X axis, 90 along the Y axis)

To make the anchor point properly line up with the center of location, p and a should have the same value.

Transforms the parent's coordinate system.

When calculating the final transform, properties MUST be applied as follows:

  1. Translate by a
  2. Scale by s100
  3. If sk0:
    1. Rotate by sa
    2. Skew x by tan(sk)
    3. Rotate by sa
  4. Rotate by r
  5. Translate by p

Steps that have no effect MAY be skipped.

Assuming a transform matrix with the following layout, with the labels equivalent to the CSS matrix transform:

(ab0cd0ef1)

The final transform is given by chaining transform matrices for each transform step:

(100010a.xa.y1)×(s.x100000s.y1000001)××(cos(sa)sin(sa)0sin(sa)cos(sa)0001)×(1tan(sk)0010001)×(cos(sa)sin(sa)0sin(sa)cos(sa)0001)××(cos(r)sin(r)0sin(r)cos(r)0001)×(100010p.xp.y1)

Note that if the transform matrix is transposed compared to the above:

(acebdf001)

The operations need to be chained using right multiplication instead of left multiplication.

Visual Object

Composition Diagram for Visual Object Visual Object Asset Precomposition Image Animation Layer Visual Layer Image Layer Solid Layer Shape Layer Precomposition Layer Null Layer Graphic Element Transform Shape Modifier Rounded Corners Trim Path Pucker Bloat Group Shape Style Fill Gradient Stroke Gradient Stroke Shape PolyStar Ellipse Rectangle Path Stroke Dash
Attribute Type Title Description
nm string

Name

Human readable name, as seen from editors and the like

Marker

Defines named portions of the composition.

Attribute Type Title Description
cm string

Comment

Comment

tm number

Time

Time

dr number

Duration

Duration

Slots

Slots are a way to define a property value once and use the value in multiple properties. Slot definitions are in a dictionary, the slot definition key is the key that is used to match all properties with a sid field to the same key for replacement.

Slot

Defines a property value that will be set to all matched properties. The type of `p` must match the type of the properties referencing this slot via `sid`.

Attribute Type Title Description
p

Property Value

The value to substitute into all properties with a matching sid. Must be type-compatible with the target properties.

Slottable Object

Object that may have its value replaced with a slot value. When `sid` is present, the object's value is determined by the corresponding slot in the animation's `slots` dictionary.

Composition Diagram for Slottable Object Slottable Object Image Slottable Property Position Property Bezier Property Scalar Property Vector Property Color Property
Attribute Type Title Description
sid string

Slot Id

Identifier that references a slot in the animation's slots dictionary. The slot's type must match this property's expected type.

Slottable Property

Property that may have its value replaced with a slot value. When `sid` is present, `a` and `k` are optional fallback values used if the referenced slot is missing.

Composition Diagram for Slottable Property Slottable Property Slottable Object Position Property Bezier Property Scalar Property Vector Property Color Property
Attribute Type Title Description
sid string

Slot Id

Identifier that references a slot in the animation's slots dictionary. The slot's type must match this property's expected type.

Slot Validation Rules

Type Consistency Rule:

Duplicate Slot ID Rule:

Missing Reference Handling:

Type Determination:

Valid example — scalar slot referenced by a scalar property:

{
    "slots": {
        "my_rotation": { "p": { "a": 0, "k": 45 } }
    }
}
{ "a": 0, "k": 0, "sid": "my_rotation" }

Valid example — vector slot referenced by a position property (dimensions match):

{
    "slots": {
        "my_position": { "p": { "a": 0, "k": [100, 200] } }
    }
}
{ "a": 0, "k": [0, 0], "sid": "my_position" }

Valid example — bezier slot referenced by a bezier property:

{
    "slots": {
        "my_path": { "p": { "a": 0, "k": { "c": true, "v": [[0, 0], [100, 0], [100, 100]], "i": [[0, 0], [0, 0], [0, 0]], "o": [[0, 0], [0, 0], [0, 0]] } } }
    }
}
{ "a": 0, "k": { "c": true, "v": [[0, 0]], "i": [[0, 0]], "o": [[0, 0]] }, "sid": "my_path" }

Invalid example — scalar slot referenced by a vector property (type mismatch):

{
    "slots": {
        "my_scale": { "p": { "a": 0, "k": 50 } }
    }
}
{ "a": 0, "k": [100, 100], "sid": "my_scale" }

Metadata

Contains metadata about the animation, such as authoring information and custom data.

Attribute Type Title Description
g string

Generator

Name and version of the software that generated this animation

a string

Author

Author of the animation

d string

Description

Human-readable description of the animation

k array of string

Keywords

List of keywords relevant to the animation content

custom object

Custom Metadata

Object where authors can store any custom data. The contents of this property are not validated by the schema.

Authors can use custom to attach tool-specific or workflow-specific data without conflicting with the standard metadata fields above.

Implementations SHOULD preserve the custom object when reading and writing animations so that data added by other tools is not lost. Because custom has no defined schema, implementations MUST NOT require specific keys to be present, assume any particular structure, or fail when encountering unknown content.

Mask

Mask for layer content.

Attribute Type Title Description
mode Mask Mode

Mode

Mode

o Scalar

Opacity

Mask opacity, as a percentage [0..100].

pt Bezier

Shape

Mask shape

Masks provide single-channel coverage information (alpha channel) that modulates the layer's content.

When multiple masks are specified, they are combined (blended) into a single coverage buffer, in order, based on the mode operator.

Masks are specified in terms of a Path plus additional properties. For a given mask path, the coverage Cpath is 1 inside the path, 0 outside the path, and possibly in the [0..1] range along the path edges (anti-aliasing).

The coverage for a given Mask is

C={Cpath·opacity,when inv=falseCpath1·opacity,when inv=true

and the cumulative coverage for all masks is

Ccumulative=k=1nCk

where the product operator is determined by mode. Then the final layer coverage (alpha channel) is

Clayer=Clayer·Ccumulative