Skip to content

Compose schema

This content is for v0.4. Switch to the latest version for up-to-date documentation.

Generated from compose.v1.schema.json. A compose spec describes a whole video (a body, what is drawn over it and what plays under it) and compiles to a project document. The model types it embeds are the same as in the project schema.

ComposeSpec

A whole video: a body, what is drawn over it, and what plays under it.

FieldTypeDescription
audioNode[]

Sound beside the body's: audio and music_bed nodes, placed as overlays are.

bodyrequiredNode

The main picture, from time zero. Its length is the video's unless duration says otherwise.

canvasCanvas

Size, rate and background. Default youtube-1080p.

Default: "youtube-1080p"

compose_version1

Spec version. This build reads only COMPOSE_VERSION.

Default: 1

durationnumber | null

The video's length in seconds. Default: the body's.

loudnessLoudness | null

The loudness an export normalizes the mix to. The project does not hold it: it comes back as an export option.

namestring | null

The project's name. Default video.

overlaysNode[]

Nodes drawn over the body, each over the ones before, placed by their own at (default 0) and lasting to the end unless they say otherwise.

themeThemeChoice

Fonts, colors, sizes and default timings. Default clean-dark.

Default: "clean-dark"

Align

A point of an area: its center, an edge's middle or a corner.

  • "center" The center.
  • "top" The top edge's middle.
  • "bottom" The bottom edge's middle.
  • "left" The left edge's middle.
  • "right" The right edge's middle.
  • "top-left" The top-left corner.
  • "top-right" The top-right corner.
  • "bottom-left" The bottom-left corner.
  • "bottom-right" The bottom-right corner.

AlignContent

Where the lines of a wrapping flex container, or a grid's rows, lie across the container.

  • "start" Packed at the start.
  • "center" Packed in the middle.
  • "end" Packed at the end.
  • "space_between" The first at the start, the last at the end, equal space between.
  • "space_around" Equal space around each.
  • "space_evenly" Equal space between each and at both ends.
  • "stretch" Grown to fill the container.

AlignItems

Where children lie across a flex container's main axis, or in their grid areas.

  • "start" At the start.
  • "center" In the middle.
  • "end" At the end.
  • "stretch" Across the whole line or area.

AnimatedPoint

A position that can move along curves between its keyframes.

Its JSON is that of an Animated<Vec2>, plus optional spatial tangents on each keyframe: with them, the value travels along the cubic Bezier from one keyframe's value through its out_tangent and the next keyframe's in_tangent, at the speed its timing curve sets along the curve's length. Without them it moves in a straight line, as an Animated<Vec2> does.

One of:

mode: "constant"

A value without animation.

FieldTypeDescription
valuerequiredVec2

Value used at every timestamp.

mode: "keyframes"

Values evaluated from their keyframe sequence.

FieldTypeDescription
keyframesrequiredPointKeyframe[]

Strictly ascending keyframes. The evaluator clamps outside the sequence.

Animated_EffectValue

A value that is either constant or controlled by sorted keyframes.

One of:

mode: "constant"

A value without animation.

FieldTypeDescription
valuerequiredEffectValue

Value used at every timestamp.

mode: "keyframes"

Values evaluated from their keyframe sequence.

FieldTypeDescription
keyframesrequiredKeyframe_EffectValue[]

Strictly ascending keyframes. The evaluator clamps outside the sequence.

Animated_Insets

A value that is either constant or controlled by sorted keyframes.

One of:

mode: "constant"

A value without animation.

FieldTypeDescription
valuerequiredInsets

Value used at every timestamp.

mode: "keyframes"

Values evaluated from their keyframe sequence.

FieldTypeDescription
keyframesrequiredKeyframe_Insets[]

Strictly ascending keyframes. The evaluator clamps outside the sequence.

Animated_LayoutLength

A value that is either constant or controlled by sorted keyframes.

One of:

mode: "constant"

A value without animation.

FieldTypeDescription
valuerequiredLayoutLength

Value used at every timestamp.

mode: "keyframes"

Values evaluated from their keyframe sequence.

FieldTypeDescription
keyframesrequiredKeyframe_LayoutLength[]

Strictly ascending keyframes. The evaluator clamps outside the sequence.

Animated_LayoutOffset

A value that is either constant or controlled by sorted keyframes.

One of:

mode: "constant"

A value without animation.

FieldTypeDescription
valuerequiredLayoutOffset

Value used at every timestamp.

mode: "keyframes"

Values evaluated from their keyframe sequence.

FieldTypeDescription
keyframesrequiredKeyframe_LayoutOffset[]

Strictly ascending keyframes. The evaluator clamps outside the sequence.

Animated_LayoutSize

A value that is either constant or controlled by sorted keyframes.

One of:

mode: "constant"

A value without animation.

FieldTypeDescription
valuerequiredLayoutSize

Value used at every timestamp.

mode: "keyframes"

Values evaluated from their keyframe sequence.

FieldTypeDescription
keyframesrequiredKeyframe_LayoutSize[]

Strictly ascending keyframes. The evaluator clamps outside the sequence.

Animated_Paint

A value that is either constant or controlled by sorted keyframes.

One of:

mode: "constant"

A value without animation.

FieldTypeDescription
valuerequiredPaint

Value used at every timestamp.

mode: "keyframes"

Values evaluated from their keyframe sequence.

FieldTypeDescription
keyframesrequiredKeyframe_Paint[]

Strictly ascending keyframes. The evaluator clamps outside the sequence.

Animated_Path

A value that is either constant or controlled by sorted keyframes.

One of:

mode: "constant"

A value without animation.

FieldTypeDescription
valuerequiredPath

Value used at every timestamp.

mode: "keyframes"

Values evaluated from their keyframe sequence.

FieldTypeDescription
keyframesrequiredKeyframe_Path[]

Strictly ascending keyframes. The evaluator clamps outside the sequence.

Animated_Vec2

A value that is either constant or controlled by sorted keyframes.

One of:

mode: "constant"

A value without animation.

FieldTypeDescription
valuerequiredVec2

Value used at every timestamp.

mode: "keyframes"

Values evaluated from their keyframe sequence.

FieldTypeDescription
keyframesrequiredKeyframe_Vec2[]

Strictly ascending keyframes. The evaluator clamps outside the sequence.

Animated_float

A value that is either constant or controlled by sorted keyframes.

One of:

mode: "constant"

A value without animation.

FieldTypeDescription
valuerequirednumber (float)

Value used at every timestamp.

mode: "keyframes"

Values evaluated from their keyframe sequence.

FieldTypeDescription
keyframesrequiredKeyframe_float[]

Strictly ascending keyframes. The evaluator clamps outside the sequence.

Animated_string

A value that is either constant or controlled by sorted keyframes.

One of:

mode: "constant"

A value without animation.

FieldTypeDescription
valuerequiredstring

Value used at every timestamp.

mode: "keyframes"

Values evaluated from their keyframe sequence.

FieldTypeDescription
keyframesrequiredKeyframe_string[]

Strictly ascending keyframes. The evaluator clamps outside the sequence.

AudioEffect

A serializable single-input audio effect applied to a clip or track bus.

Sidechain ducking is not an entry here because it consumes a second input. It is authored per track through Ducking.

One of:

type: "eq"

Cascaded biquad sections.

FieldTypeDescription
bandsrequiredEqBand[]

Ordered filter sections, 1 to MAX_EQ_BANDS of them.

type: "compressor"

Lookahead dynamic range compression.

FieldTypeDescription
attack_msrequirednumber (float)

Attack time in milliseconds, positive and at most MAX_ENVELOPE_MS.

lookahead_msnumber (float)

Lookahead in milliseconds, at most MAX_LOOKAHEAD_MS. Reported as graph latency.

Default: 0

ratiorequirednumber (float)

Downward ratio, from one (unity) to MAX_COMPRESSOR_RATIO.

release_msrequirednumber (float)

Release time in milliseconds, positive and at most MAX_ENVELOPE_MS.

threshold_dbrequirednumber (float)

Level above which gain reduction begins, in decibels from MIN_LEVEL_DB to 0.

type: "reverb"

Schroeder reverberation.

FieldTypeDescription
dampingrequirednumber (float)

High-frequency damping, in 0..=1.

mixrequirednumber (float)

Wet mix, in 0..=1.

room_sizerequirednumber (float)

Room size, in 0..=1.

AudioProperties

Per-clip audio presentation controls.

FieldTypeDescription
effectsAudioEffect[]

Ordered single-input effects applied before the track bus, at most MAX_CHAIN_EFFECTS.

Default: []

fade_inMediaTime

Fade-in duration measured from the clip's timeline start. Non-negative.

Default: 0

fade_outMediaTime

Fade-out duration measured back from the clip's timeline end. Non-negative.

Default: 0

fade_shapeFadeShape

Curve used by both fades.

Default: "linear"

gainAnimated_float

Animated linear amplitude constrained to 0..=MAX_GAIN.

Default: {"mode":"constant","value":1}

mutedboolean

Silences this clip without removing it.

Default: false

panAnimated_float

Animated stereo position from -1 (left) to 1 (right).

Default: {"mode":"constant","value":0}

AudioStreamShape

An audio stream's channel count and sample rate.

FieldTypeDescription
channelsrequiredinteger (uint32)

Channel count.

sample_raterequiredinteger (uint32)

Samples per second per channel.

CacheIntent

Whether a runtime may keep and reuse a clip's rendered picture.

  • "auto" The runtime decides, keeping pictures whose inputs it can identify.
  • "pin" Keep it ahead of other pictures, and bake its range when a host bakes render caches.
  • "bypass" Always render it live: nothing it draws is read from or kept in a cache.

Canvas

The canvas: a preset name, or its parts.

One of:

string

A preset: youtube-1080p (1920x1080), youtube-4k (3840x2160), youtube-720p (1280x720), shorts (1080x1920), square (1080x1080), or portrait (1080x1350); all at 30 fps.

<a href="#customcanvas">CustomCanvas</a>

A preset with some parts replaced, or every part given.

CaptionCue

Text shown over one timeline interval.

FieldTypeDescription
textrequiredstring

The text; \n starts a line. Non-empty, at most MAX_TEXT_CONTENT_BYTES bytes.

timeline_rangerequiredTimeRange

When the cue shows. Non-empty and not before zero.

CaptionStyle

How captions look.

  • "outline" Text with a dark band around the glyphs, near the bottom.
  • "boxed" Text on a panel behind each line, near the bottom.
  • "bar-bottom" Text centered on a translucent bar across the canvas, near the bottom, the bar shown as long as the captions.
  • "bold-center" Larger outlined text a little below the middle, as short-form video draws it.

Captions

What a caption track shows: its cues, in one style.

FieldTypeDescription
cuesrequiredCaptionCue[]

Cues in timeline order, none overlapping another: a track shows one cue at a time. Simultaneous captions take one track each.

styleTextStyle

How every cue of the track looks.

Default: {"align":"center","anchor":{"x":0.5,"y":1},"background":n…

CaptionsNode

Timed text.

FieldTypeDescription
atnumber | null

Seconds from the parent's start (an overlay's: the video's). Ignored in a sequence, which places its children one after another.

colorRgba | null

Text color. Default: the theme's.

cuesCue[]

Cues as given, in seconds from the node's start.

durationnumber | null

Length in seconds. Default: the node's own (a video's, a caption file's), else what its parent gives it.

filestring | null

A SubRip (.srt) or WebVTT (.vtt) file, read by the binding.

font_sizenumber | null

Font size in pixels. Default: the theme's caption size.

idstring | null

The node's name, for other nodes to refer to.

max_charsinteger | null

The longest cue words are grouped into, in characters. Default 32 on a tall canvas, 42 on a wide one.

positionnumber | null

Where the text's middle lies, as a fraction of the canvas height. Default: the style's, which depends on the canvas's shape.

srtstring | null

SubRip text.

styleCaptionStyle

How the captions look. Default outline.

Default: "outline"

vttstring | null

WebVTT text.

wordsCue[]

Words with their times, as speech recognition gives them; they are grouped into cues of up to max_chars characters.

Clip

A reference to a source over independent timeline and source ranges.

FieldTypeDescription
audioAudioProperties

Presentation controls applied to this clip's audio.

Default: {"effects":[],"fade_in":0,"fade_out":0,"fade_shape":"line…

blend_modeClipBlendMode

Artistic operation used when this clip is composited over earlier layers.

Default: "normal"

cacheCacheIntent

Whether a runtime may keep and reuse the clip's rendered picture. Never changes what renders: a kept picture is the one a live render draws.

compositionClipComposition | null

The composition graph that builds the clip's picture from its source, with the clip's time mapping onto it. Without one the clip shows its source as it is. Visual clips only.

Default: null

idrequiredClipId

Stable clip identity.

masksShapeMask[]

Shapes that limit where the clip is visible, applied in order after its composition and before its transform. At most MAX_CLIP_MASKS; visual clips only.

Default: []

matteMatte | null

Another visual clip whose picture sets where this clip is visible.

Default: null

source_idrequiredSourceId

Source consumed by this clip.

source_rangerequiredTimeRange

Interval read from the source timeline.

time_mapTimeMap

How timeline time maps onto the source range.

Default: {"type":"forward"}

timeline_rangerequiredTimeRange

Destination interval on the project timeline.

visualVisualProperties

Resolution-independent visual presentation controls.

Default: {"anchor":{"x":0.5,"y":0.5},"opacity":{"mode":"constant",…

ClipBlendMode

Artistic blend operation stored independently from a renderer implementation.

The modes are those of W3C Compositing and Blending Level 1 (the CSS mix-blend-mode values), with the specification's formulas.

  • "normal" Preserve source color and apply source-over coverage.
  • "multiply" Multiply source and backdrop components.
  • "screen" Inverse-multiply source and backdrop components.
  • "overlay" Multiply dark backdrop regions and screen light regions.
  • "darken" The darker of source and backdrop, per channel.
  • "lighten" The lighter of source and backdrop, per channel.
  • "color_dodge" Brighten the backdrop to reflect the source.
  • "color_burn" Darken the backdrop to reflect the source.
  • "hard_light" Multiply or screen, depending on the source.
  • "soft_light" Darken or lighten, depending on the source: a diffused hard light.
  • "difference" The absolute difference of source and backdrop.
  • "exclusion" Like difference, with lower contrast.
  • "hue" The source's hue with the backdrop's saturation and luminosity.
  • "saturation" The source's saturation with the backdrop's hue and luminosity.
  • "color" The source's hue and saturation with the backdrop's luminosity.
  • "luminosity" The source's luminosity with the backdrop's hue and saturation.

ClipComposition

A clip's use of a Composition, and how its time maps onto it.

Composition time is offset + (t - clip start) * scale for timeline time t, rounded down to a tick. Moving a clip keeps its offset, so its animation moves with it; trimming its start by d adds d * scale to the offset, so what remains of the animation stays where it was. Extending the start before composition time zero makes the offset negative: settings hold their first keyframe there, and media nodes show their first frame.

FieldTypeDescription
idrequiredCompositionId

The composition shown.

offsetMediaTime

Composition time at the clip's start.

Default: 0

scaleTimeScale

Composition time per timeline time.

Default: {"den":1,"num":1}

ClipEffect

One versioned runtime effect invocation: a composition's effect or transition node, or a timeline transition.

FieldTypeDescription
idrequiredstring

Stable effect definition identifier.

params{ [name]: Animated_EffectValue }

Named parameter values, constant or keyframed. Omitted entries use definition defaults.

Keyframe times are composition times in a composition node and timeline times in a timeline transition. A parameter's keyframes all have one value type, and enum and bool keyframes only hold. An interpolated value that a timing curve carries past the parameter's range is clamped to it; an authored value outside it is an error.

Default: {}

resources{ [name]: EffectResourceId }

Named external resources matched against the effect definition.

Default: {}

versionrequiredinteger (uint32)

Exact effect definition version required by the project.

ClipId

A stable timeline-clip identifier.

Type: string

ClipTransition

A two-input transition over the overlap of two visual clips.

FieldTypeDescription
easingrequiredEasing

Timing curve applied to the transition's linear progress. The eased progress is clamped to 0..=1, the domain transition shaders define.

effectrequiredClipEffect

Versioned transition shader and named parameter values.

from_cliprequiredClipId

Clip sampled as transition progress zero.

timeline_rangerequiredTimeRange

Half-open timeline interval over which both clips must be active.

to_cliprequiredClipId

Clip sampled as transition progress one.

ColorMatrix

Coefficients used to decode source components.

  • "bt601" SD BT.601 YUV coefficients.
  • "bt709" HD BT.709 YUV coefficients.
  • "bt2020_ncl" BT.2020 non-constant-luminance YUV coefficients.
  • "rgb" Source components are already RGB.

ColorMetadata

Host-independent video color description.

FieldTypeDescription
dynamic_rangerequiredDynamicRange

SDR or HDR signal classification: HDR exactly when transfer is PQ or HLG (is_consistent).

matrixrequiredColorMatrix

YUV-to-RGB coefficient family, or RGB for already converted sources.

primariesrequiredColorPrimaries

RGB chromaticity standard.

rangerequiredColorRange

Encoded component range.

transferrequiredTransferFunction

Nonlinear transfer curve.

ColorPrimaries

RGB primary chromaticities a source or export declares.

  • "bt601" SD video primaries.
  • "bt709" HD video and sRGB primaries.
  • "bt2020" Wide-gamut BT.2020 primaries, normally indicating HDR input.

ColorRange

Nominal encoded component range.

  • "limited" Studio/video range.
  • "full" Full component range.

Composition

An acyclic graph of image operations with one selected output.

FieldTypeDescription
controlsCompositionControl[]

The node settings a group node may set, by name.

idrequiredCompositionId

Stable composition identity.

inputsstring[]

The images a group node gives it, by name, in port order: its GroupInput nodes read them.

nodesCompositionNode[]

The graph's nodes. Their order has no meaning: a node may name a node listed after it as its input.

Default: []

outputNodeId | null

The node whose image is the composition's picture. A composition without one saves, but cannot be rendered.

Default: null

CompositionControl

A node setting a composition exposes to the group nodes that use it: an effect or transition parameter of one of its nodes.

FieldTypeDescription
namerequiredstring

The name a group node sets it by; unique in the composition.

noderequiredNodeId

The effect or transition node.

paramrequiredstring

The parameter of its effect.

CompositionId

A stable composition-graph identifier.

Type: string

CompositionNode

One image operation in a Composition.

FieldTypeDescription
bypassboolean

Whether the node passes its bypass_input through unchanged instead of operating. A node without inputs cannot be bypassed.

Default: false

idrequiredNodeId

Identity, unique within its composition.

oprequiredNodeOp

What the node does, with its inputs and settings.

Cue

Text over an interval.

FieldTypeDescription
endrequirednumber (double)

End in seconds.

startrequirednumber (double)

Start in seconds.

textrequiredstring

The text.

CustomCanvas

A canvas by its parts.

FieldTypeDescription
backgroundRgba | null

The opaque color under everything. Default: the theme's.

frame_rateFrameRateChoice | null

Frames per second: an integer, 23.976, 29.97 or 59.94, or the project's exact {num, den}.

heightinteger | null

Height in pixels.

presetstring | null

The preset the other parts replace parts of. Default youtube-1080p.

widthinteger | null

Width in pixels.

Dash

A dash pattern.

FieldTypeDescription
offsetAnimated_float

How far into the pattern the stroke starts.

Default: {"mode":"constant","value":0}

patternrequiredAnimated_float[]

Alternating dash and gap lengths, as fractions of the shorter side: one to MAX_DASH_ENTRIES non-negative entries, not all zero. An odd count repeats once more to pair up.

Display

How a box lays its children out.

  • "flex" CSS flexbox.
  • "grid" CSS grid.

Ducking

Sidechain ducking authored on the track that is attenuated.

FieldTypeDescription
attack_msrequirednumber (float)

Attack time in milliseconds, positive and at most MAX_ENVELOPE_MS.

depth_dbrequirednumber (float)

Maximum attenuation in decibels, from MIN_LEVEL_DB to 0.

release_msrequirednumber (float)

Release time in milliseconds, positive and at most MAX_ENVELOPE_MS.

sidechain_trackrequiredTrackId

Track whose mixed output drives the envelope follower.

thresholdrequirednumber (float)

Linear level above which attenuation begins. Positive.

DynamicRange

Whether a signal is standard or high dynamic range. It follows the transfer: hdr exactly when the transfer is PQ or HLG, and a color whose two fields disagree is refused.

  • "sdr" Standard dynamic range: a BT.709 or sRGB transfer.
  • "hdr" High dynamic range: a PQ or HLG transfer, which a project tone-maps into the SDR working space or refuses, as its color pipeline says.

Easing

A timing curve from linear progress to eased progress, without a hold.

Transitions use it directly; keyframe Interpolation adds hold.

One of:

type: "linear"

Progress advances at a constant rate.

type: "cubic_bezier"

Progress follows a CSS cubic-bezier() curve.

FieldTypeDescription
x1requirednumber (float)

Horizontal coordinate of the first control point, in 0..=1.

x2requirednumber (float)

Horizontal coordinate of the second control point, in 0..=1.

y1requirednumber (float)

Vertical coordinate of the first control point.

y2requirednumber (float)

Vertical coordinate of the second control point.

EffectResourceId

A stable effect-resource identifier.

Type: string

EffectValue

Serializable value supplied to one runtime effect parameter.

One of:

type: "float"

One finite scalar.

FieldTypeDescription
valuerequirednumber (float)

type: "vec2"

Two finite components, normally in normalized coordinates.

FieldTypeDescription
valuerequirednumber (float)[]

type: "vec4"

Four finite components that are not a color, such as per-channel thresholds; they keyframe component by component.

FieldTypeDescription
valuerequirednumber (float)[]

type: "color"

Straight (not premultiplied), sRGB-encoded RGBA components in the inclusive unit interval, as a color picker shows them.

FieldTypeDescription
valuerequirednumber (float)[]

type: "enum"

Index into an effect definition's enum choices.

FieldTypeDescription
valuerequiredinteger (uint32)

type: "bool"

Boolean toggle.

FieldTypeDescription
valuerequiredboolean

EqBand

A single equalizer section stored independently from its DSP implementation.

FieldTypeDescription
frequency_hzrequirednumber (float)

Center or corner frequency in hertz, within EQ_FREQUENCY_RANGE_HZ.

gain_dbnumber (float)

Peaking gain in decibels, at most MAX_EQ_GAIN_DB either way. Ignored by the pass filters.

Default: 0

kindrequiredEqBandKind

Filter shape.

qrequirednumber (float)

Resonance, within EQ_Q_RANGE. Larger values produce narrower bands.

EqBandKind

The filter shape of one equalizer band.

  • "peaking" Bell-shaped parametric band.
  • "low_pass" Second-order low-pass.
  • "high_pass" Second-order high-pass.

FadeShape

Curve applied by a clip's fade in and fade out.

  • "linear" Amplitude moves linearly. Two linear fades over one overlap dip by 6 dB.
  • "equal_power" Amplitude follows a quarter sine. Two of these crossfade at constant power, which is what overlapping clips normally want.

FileKind

What a media file holds, when its extension does not say.

  • "video" Moving pictures, perhaps with sound.
  • "image" A still picture.
  • "audio" Sound alone.

FillRule

Which regions of a path are inside it.

  • "nonzero" Where the outline winds around a point at all.
  • "evenodd" Where it winds around a point an odd number of times.

Fit

How a picture fills its area.

  • "contain" All of it, as large as fits; the rest of the area stays empty.
  • "cover" All of the area, cropped to it.
  • "fill" Stretched to the area.
  • "none" At its own size in pixels, cropped to the area.

FlexDirection

The main axis of a flex container.

  • "row" Left to right.
  • "column" Top to bottom.
  • "row_reverse" Right to left.
  • "column_reverse" Bottom to top.

FlexWrap

Whether a flex container's children wrap.

  • "nowrap" One line.
  • "wrap" As many lines as the children need.

FrameRate

A positive rational frame rate in reduced form, at most one frame per tick (120 000 frames per second).

FieldTypeDescription
denrequiredinteger (uint32)

Seconds per num frames. Positive.

numrequiredinteger (uint32)

Frames per den seconds. Positive, and at most 120 000 times den.

FrameRateChoice

A frame rate, as a number or exactly.

One of:

number <span class="a2-muted">(double)</span>

Frames per second: an integer, or 23.976, 29.97 or 59.94 for the NTSC rates.

<a href="#framerate">FrameRate</a>

The project's exact rate.

Generator

The picture of a generated source.

A generated picture has the canvas's size and aspect, like a source that fills the frame at scale 1. Positions are in its normalized space, (0, 0) top-left to (1, 1) bottom-right; lengths (radii, stroke widths) are fractions of its shorter side, so the picture is the same at any render resolution. A fill or text does not change over time (a clip animates it with its transform, effects, and masks); shapes and layouts may.

One of:

type: "fill"

Paint over the whole picture.

FieldTypeDescription
paintrequiredPaint

What covers the picture.

type: "shapes"

Shapes drawn from an ordered content tree, as an After Effects shape layer or a Lottie shape layer draws them. Unlike the other generators, its picture changes over time: every value in the tree may be keyframed, in the picture's time.

FieldTypeDescription
itemsrequiredShapeItem[]

The content tree, front first. See ShapeItem.

type: "text"

Text on a transparent picture, laid out and placed by its style as a caption track's cues are: its size and wrapping width fractions of the canvas, its anchor at style.position. The engine draws it with the fonts its host registered.

FieldTypeDescription
styleTextStyle

How it looks and where it lies. The font size is at most MAX_TEXT_GENERATOR_FONT_SIZE.

Default: {"align":"center","anchor":{"x":0.5,"y":1},"background":n…

textrequiredstring

The text; \n starts a line. Non-empty, at most MAX_TEXT_CONTENT_BYTES bytes.

type: "layout"

Boxes laid out by CSS flexbox around their text and shapes. Its picture changes over time when any value in the tree is keyframed, in the picture's time. The engine lays it out with the fonts it draws with. See LayoutNode.

FieldTypeDescription
rootrequiredLayoutNode

The root box: the whole picture.

GradientStop

One color of a gradient.

FieldTypeDescription
colorrequiredRgba

Color at that position.

offsetrequirednumber (float)

Position along the gradient, in 0..=1, not before the previous stop.

GridAutoFlow

How a grid places items that have no placement of their own.

  • "row" Filling each row, adding rows.
  • "column" Filling each column, adding columns.
  • "row_dense" As row, filling earlier holes.
  • "column_dense" As column, filling earlier holes.

GridLength

How long a grid of clips of different lengths lasts.

  • "shortest" As long as its shortest cell.
  • "longest_freeze" As long as its longest; shorter clips hold their last frame.
  • "longest_loop" As long as its longest; shorter clips play again from their start.

GridPlacement

Where a grid item lies on one axis, as CSS writes it: 2, "1 / 3", "span 2", "2 / span 3", "auto". Lines count from 1, or from -1 at the end.

One of:

integer

string

Inset

Space kept clear inside an area.

One of:

number <span class="a2-muted">(float)</span>

The same on every side.

number <span class="a2-muted">(float)</span>[]

[top, right, bottom, left].

Insets

A length on each side of a box: one length for every side, the CSS shorthand of one to four lengths ("8px 16px": top first, clockwise), or the sides object, missing sides 0.

One of:

number <span class="a2-muted">(float)</span>

string

object

FieldTypeDescription
bottomLayoutSize
leftLayoutSize
rightLayoutSize
topLayoutSize

Interpolation

Interpolation from one keyframe to the next.

Values are interpolated numerically: a rotation from 0 to 720 degrees turns twice, and one from 0 to 360 turns once. A host that wants the shortest path normalizes its keyframe values.

One of:

type: "hold"

Keep this keyframe's value until the next keyframe.

type: "linear"

Move to the next value at a constant rate.

type: "cubic_bezier"

Move to the next value along a CSS cubic-bezier() timing curve.

FieldTypeDescription
x1requirednumber (float)

Horizontal coordinate of the first control point, in 0..=1.

x2requirednumber (float)

Horizontal coordinate of the second control point, in 0..=1.

y1requirednumber (float)

Vertical coordinate of the first control point.

y2requirednumber (float)

Vertical coordinate of the second control point.

JustifyContent

Where children lie along a container's main axis, or a grid's columns in it.

  • "start" Packed at the start.
  • "center" Packed in the middle.
  • "end" Packed at the end.
  • "space_between" The first at the start, the last at the end, equal space between.
  • "space_around" Equal space around each.
  • "space_evenly" Equal space between each and at both ends.

Keyframe_EffectValue

One timestamped control value.

FieldTypeDescription
interpolationrequiredInterpolation

Interpolation from this keyframe to its successor.

timerequiredMediaTime

Timestamp of this value: timeline time, except in a composition node's settings, which are keyed in composition time, and in a shapes or layout generator's tree, which is keyed in its picture's time.

valuerequiredEffectValue

Value at time.

Keyframe_Insets

One timestamped control value.

FieldTypeDescription
interpolationrequiredInterpolation

Interpolation from this keyframe to its successor.

timerequiredMediaTime

Timestamp of this value: timeline time, except in a composition node's settings, which are keyed in composition time, and in a shapes or layout generator's tree, which is keyed in its picture's time.

valuerequiredInsets

Value at time.

Keyframe_LayoutLength

One timestamped control value.

FieldTypeDescription
interpolationrequiredInterpolation

Interpolation from this keyframe to its successor.

timerequiredMediaTime

Timestamp of this value: timeline time, except in a composition node's settings, which are keyed in composition time, and in a shapes or layout generator's tree, which is keyed in its picture's time.

valuerequiredLayoutLength

Value at time.

Keyframe_LayoutOffset

One timestamped control value.

FieldTypeDescription
interpolationrequiredInterpolation

Interpolation from this keyframe to its successor.

timerequiredMediaTime

Timestamp of this value: timeline time, except in a composition node's settings, which are keyed in composition time, and in a shapes or layout generator's tree, which is keyed in its picture's time.

valuerequiredLayoutOffset

Value at time.

Keyframe_LayoutSize

One timestamped control value.

FieldTypeDescription
interpolationrequiredInterpolation

Interpolation from this keyframe to its successor.

timerequiredMediaTime

Timestamp of this value: timeline time, except in a composition node's settings, which are keyed in composition time, and in a shapes or layout generator's tree, which is keyed in its picture's time.

valuerequiredLayoutSize

Value at time.

Keyframe_Paint

One timestamped control value.

FieldTypeDescription
interpolationrequiredInterpolation

Interpolation from this keyframe to its successor.

timerequiredMediaTime

Timestamp of this value: timeline time, except in a composition node's settings, which are keyed in composition time, and in a shapes or layout generator's tree, which is keyed in its picture's time.

valuerequiredPaint

Value at time.

Keyframe_Path

One timestamped control value.

FieldTypeDescription
interpolationrequiredInterpolation

Interpolation from this keyframe to its successor.

timerequiredMediaTime

Timestamp of this value: timeline time, except in a composition node's settings, which are keyed in composition time, and in a shapes or layout generator's tree, which is keyed in its picture's time.

valuerequiredPath

Value at time.

Keyframe_Vec2

One timestamped control value.

FieldTypeDescription
interpolationrequiredInterpolation

Interpolation from this keyframe to its successor.

timerequiredMediaTime

Timestamp of this value: timeline time, except in a composition node's settings, which are keyed in composition time, and in a shapes or layout generator's tree, which is keyed in its picture's time.

valuerequiredVec2

Value at time.

Keyframe_float

One timestamped control value.

FieldTypeDescription
interpolationrequiredInterpolation

Interpolation from this keyframe to its successor.

timerequiredMediaTime

Timestamp of this value: timeline time, except in a composition node's settings, which are keyed in composition time, and in a shapes or layout generator's tree, which is keyed in its picture's time.

valuerequirednumber (float)

Value at time.

Keyframe_string

One timestamped control value.

FieldTypeDescription
interpolationrequiredInterpolation

Interpolation from this keyframe to its successor.

timerequiredMediaTime

Timestamp of this value: timeline time, except in a composition node's settings, which are keyed in composition time, and in a shapes or layout generator's tree, which is keyed in its picture's time.

valuerequiredstring

Value at time.

LayoutBorder

A border inside the border box, as wide on every side.

FieldTypeDescription
paintrequiredAnimated_Paint

What covers the border. Positions are normalized to the border box.

widthrequiredAnimated_LayoutSize

Width. At least 0.

LayoutInset

Where an absolute box lies in its parent's padding box. A missing side is auto: with neither left nor right, the box keeps its place in the flow on that axis.

FieldTypeDescription
bottomAnimated_LayoutLength | null

Distance from the parent's bottom padding edge.

leftAnimated_LayoutLength | null

Distance from the parent's left padding edge.

rightAnimated_LayoutLength | null

Distance from the parent's right padding edge.

topAnimated_LayoutLength | null

Distance from the parent's top padding edge.

LayoutLength

A length: a number is a fraction of the layout picture's shorter side, "<n>px" pixels of the project canvas, "<n>%" a percent of the parent's content box along the field's axis.

One of:

number <span class="a2-muted">(float)</span>

string

LayoutNode

One box of a layout tree.

A box lays its children out by flexbox (display: flex, the default) or grid (display: grid). It is a container when it has children, a leaf when it has text or shape content, and empty otherwise (a spacer or a decoration). Per box, its background is drawn first, then its border, then its content. Boxes are drawn in document order; a reversed direction or a grid placement moves them, not their order.

FieldTypeDescription
align_contentAlignContent | null

Where lines of a wrapping flex container, or a grid's rows, lie across the container. Default stretch.

align_itemsAlignItems | null

Where children lie across the main axis, or in their grid areas' rows. Default stretch.

align_selfAlignItems | null

Where the box lies across its flex container's main axis, or in its grid area's row. None follows the parent's align_items.

aspect_rationumber | null

Width over height. Positive.

backgroundAnimated_Paint | null

What covers the border box, rounded by border_radius. Positions are normalized to the border box.

borderLayoutBorder | null

A border inside the border box.

border_radiusAnimated_LayoutSize | null

The corner radius of the border box. At least 0; default 0. A radius past half the box's shorter side is capped.

childrenLayoutNode[]

Boxes laid out in this one, in document (and paint) order. Not with text or shape.

colorRgba | null

Text color. Inherited; the root's is white.

column_gapAnimated_LayoutSize | null

Space between columns, in place of gap. At least 0.

displayDisplay | null

How the box lays its children out. Default flex. Not on a box with text or shape content, as every container field.

flex_basisAnimated_LayoutLength | null

The main size before growing and shrinking. None is auto.

flex_directionFlexDirection | null

The main axis of a flex container's children. Default row.

flex_growAnimated_float | null

How much of a flex container's free space the box takes. At least 0; default 0. Not in a grid, as every flex item field.

flex_shrinkAnimated_float | null

How much the box gives up when a flex container's space runs short. At least 0; default 1.

flex_wrapFlexWrap | null

Whether a flex container's children wrap onto more lines. Default nowrap.

font_familystring | null

The family the box's text draws in, as a text style's font_family. Inherited; the root's is the host's first font.

font_sizeAnimated_LayoutSize | null

Font size: positive, at most MAX_LAYOUT_FONT_SIZE of the picture's shorter side. Inherited; the root's is 0.05.

font_weightinteger | null

The weight, in [1, 1000], the family's faces are matched by, as CSS Fonts 4 matches font-weight; a variable face draws at it. Not animated. Inherited; the root's is 400.

gapAnimated_LayoutSize | null

Space between children, on both axes. At least 0; default 0.

grid_auto_columnsTrackList | null

The size of a grid's implicit columns. Default auto.

grid_auto_flowGridAutoFlow | null

How a grid places items without a placement. Default row.

grid_auto_rowsTrackList | null

The size of a grid's implicit rows. Default auto.

grid_columnGridPlacement | null

The box's columns in its grid, as CSS writes them (2, "1 / 3", "span 2"). Default auto.

grid_rowGridPlacement | null

The box's rows in its grid. Default auto.

grid_template_columnsTrackList | null

A grid's explicit columns, as CSS writes them ("1fr 2fr", "repeat(3, minmax(100px, 1fr))"). Default none.

grid_template_rowsTrackList | null

A grid's explicit rows. Default none.

heightAnimated_LayoutLength | null

Border-box height. None is auto.

insetLayoutInset | null

Where an absolute box lies in its parent's padding box.

justify_contentJustifyContent | null

Where children lie along the main (inline, for a grid) axis. Default start.

justify_itemsAlignItems | null

Where a grid's children lie in their grid areas' columns. Default stretch.

justify_selfAlignItems | null

Where the box lies in its grid area's column. None follows the parent's justify_items. Not in a flex container, as every grid item field.

letter_spacingnumber | null

Space after each character, as a fraction of the font size, in [-0.5, 1], as CSS letter-spacing adds it: none after a line's last character, and none after a character of a cursive script. Not animated. Inherited; the root's is 0.

line_heightnumber | null

Baseline-to-baseline distance in font sizes, in [0.5, 3]. Each line's em box, 0.8 of a font size above its baseline and 0.2 below, is centred in its line when the line is taller than an em. Inherited; the root's is 1.2.

marginAnimated_Insets | null

Space outside the border, written as padding is. Sides may be negative; there is no auto.

max_heightAnimated_LayoutLength | null

Largest height. None is none.

max_widthAnimated_LayoutLength | null

Largest width. None is none.

min_heightAnimated_LayoutLength | null

Smallest height. None is auto.

min_widthAnimated_LayoutLength | null

Smallest width. None is auto, the CSS automatic minimum size.

opacityAnimated_float | null

Opacity of the box and everything in it, as one group, in 0..=1. Drawn after layout; it never moves a box.

outlineTextOutline | null

A band around the glyphs; its width a fraction of the font size. Inherited; the root has none.

overflowOverflow | null

Whether content past the padding box is drawn. Default visible.

paddingAnimated_Insets | null

Space inside the border: a length, the CSS shorthand ("8px 16px"), or the sides object. Sides at least 0; default 0.

positionPosition | null

Whether the box is in its parent's flow. Default relative.

rotation_degreesAnimated_float | null

Clockwise rotation of the box and everything in it about its border-box centre, in degrees, after layout.

row_gapAnimated_LayoutSize | null

Space between rows (between lines of a wrapping row flex container), in place of gap. At least 0.

scaleAnimated_Vec2 | null

Per-axis scale of the box and everything in it about its border-box centre, after layout.

shapeLayoutShape | null

Shapes drawn on a picture the size of the box's content box. Not with children or text.

textAnimated_string | null

The box's text, wrapped at its content width and drawn in the style it inherits; \n starts a line. At most MAX_TEXT_CONTENT_BYTES bytes per value; may be empty. Its keyframes all hold. Not with children or shape.

text_alignTextAlign | null

How lines align within the content width. Inherited; the root's is start.

translateAnimated_LayoutOffset | null

Offset of the box and everything in it, after layout: the object, or one or two lengths as CSS translate writes them.

widthAnimated_LayoutLength | null

Border-box width. None is auto. Not on the root, as every item field.

LayoutOffset

An offset, x right and y down: one or two lengths as CSS translate writes them (y 0 when missing), or {x, y}.

One of:

string

object

FieldTypeDescription
xrequiredLayoutSize
yrequiredLayoutSize

LayoutShape

A box's shapes, drawn as a shapes generator draws its items on a picture the size of the box's content box: positions normalized to that box, lengths fractions of its shorter side. A shape box has no size of its own.

FieldTypeDescription
itemsrequiredShapeItem[]

The content tree, front first.

LayoutSize

A length that may not be a percent: a number is a fraction of the layout picture's shorter side, "<n>px" pixels of the project canvas.

One of:

number <span class="a2-muted">(float)</span>

string

LineCap

How an open stroke ends.

  • "butt" Flat at the end point.
  • "round" A half circle past the end point.
  • "square" A half square past the end point.

LineJoin

How stroke segments meet at a vertex.

  • "miter" Extended edges meeting at a point, up to the miter limit.
  • "round" A circular arc.
  • "bevel" A straight cut across the corner.

LinearPrimaries

Named RGB primaries linear-light media may be in, each with its own white point.

  • "bt709" ITU-R BT.709 and sRGB, D65 white.
  • "bt2020" ITU-R BT.2020, D65 white.
  • "p3_d65" DCI-P3 primaries with a D65 white, as Display P3.
  • "aces_ap0" ACES AP0 (SMPTE ST 2065-1), the ACES white.
  • "aces_ap1" ACES AP1 (ACEScg), the ACES white.

LoopMode

How each pass of a Loop follows the one before.

  • "repeat" Every pass plays forward, from the start again. Sound fades out and in over LOOP_FADE_SECONDS at each wrap, so the jump does not click.
  • "ping_pong" Passes alternate forward and backward.

Loudness

The loudness an export normalizes to: a target, or a target and a ceiling.

One of:

number <span class="a2-muted">(double)</span>

Integrated loudness in LUFS, under a -1 dBTP ceiling.

<a href="#loudnesstarget">LoudnessTarget</a>

Integrated loudness and a true-peak ceiling.

LoudnessTarget

The loudness an export normalizes to.

FieldTypeDescription
target_lufsrequirednumber (double)

Integrated loudness, -60..=0 LUFS.

true_peak_ceiling_dbtpnumber (double)

True-peak ceiling, -20..=0 dBTP. Default -1.

Default: -1

MaskMode

How a mask combines with the coverage of the masks before it.

Coverage starts empty when the first mask adds, and full otherwise, so a clip whose only mask subtracts is visible outside the shape.

  • "add" Union: c + m - c * m.
  • "subtract" Difference: c * (1 - m).
  • "intersect" Intersection: c * m.

Matte

Another visual clip whose picture sets where this clip is visible.

The matte clip is drawn, with its own transform and effects, only into the matte; a clip that is any clip's matte is never composited itself. Where the matte clip is not active, its coverage is zero.

FieldTypeDescription
moderequiredMatteMode

What of that picture is the coverage.

sourcerequiredClipId

The clip whose picture is the matte.

MatteMode

Which property of the matte clip's picture is coverage.

  • "alpha" Its alpha.
  • "alpha_inverted" One minus its alpha.
  • "luma" Its luminance over black: BT.709 weights on linear light, times alpha.
  • "luma_inverted" One minus that luminance.

MediaFingerprint

Evidence of a source's media, each part recorded only when it was known.

A matching content hash proves the same bytes. Without one, the other parts can only show a difference. modified_ms narrows a search for candidates and never decides whether a candidate is the same media.

FieldTypeDescription
byte_lengthinteger | null

The file's length in bytes.

colorColorMetadata | null

The color the decoded pictures carry.

content_sha256string | null

SHA-256 of the whole file, as 64 lowercase hexadecimal digits.

duration_ticksinteger | null

Where the media ends on its own timeline, in ticks: its first presentation plus its length, the end of any source range that reads it. A transport stream that starts at 1.4 s and lasts 2 s ends at 3.4 s. Non-negative.

modified_msinteger | null

The file's modification time, in milliseconds since the Unix epoch.

streamsStreamTopology | null

The streams the file carries.

MediaItem

A file given by its path alone, or a media node.

One of:

string

The file, everything else by default.

<a href="#node">Node</a>

A media node.

MediaKind

The payload domain of a source.

  • "video" A video stream, potentially with an audio stream.
  • "audio" An audio stream.
  • "image" A still visual image.
  • "generated" A picture the engine draws from the source's Generator. The host supplies nothing for it.
  • "composition" A composition of the project, drawn at the source time as its own time. The host supplies nothing for it; the media its nodes read, it supplies as for any composition.

MediaSource

A host-resolved media resource.

FieldTypeDescription
color_metadataColorMetadata | null

The color a Video source's pictures are in, which wins over what its frames and its stream are tagged with on every host: a host records it at import, or a document declares it to correct missing or wrong tags. None leaves the tags in charge. A still is read as sRGB code values whatever it declares.

Default: null

compositionCompositionId | null

The composition a Composition source shows; present exactly for that kind.

fingerprintMediaFingerprint | null

What the host found at the locator when the project recorded it, so another host can tell whether media it finds is the same. A generated source has none.

generatorGenerator | null

What a Generated source draws; present exactly for that kind.

Default: null

has_audioboolean

Whether this source's media has an audio stream: a fact of the file, so every host that imports it records the same, whether or not that host can decode the stream. A host that cannot reports so at run time and plays the source silent; the document keeps the stream for the hosts that can.

Audio always does. A Video source declares it so that clips on a visual track contribute to the mix; leaving it unset keeps a video clip silent.

Default: false

idrequiredSourceId

Stable source identity.

kindrequiredMediaKind

Media payload domain.

locatorstring

Opaque URI or host locator. The engine does not open it directly. Required, except that a Generated or Composition source has none.

Default: ""

providerProviderSource | null

The extension provider that supplies this source's media, and its settings, when the host's own decoders do not read it.

MediaTime

A signed position or duration in timeline ticks (120 000 per second), at most the largest integer a JavaScript number holds exactly either way.

Type: integer (int64)

MergeLayer

One layer of a Merge.

FieldTypeDescription
blend_modeClipBlendMode

How the layer blends with the layers under it.

Default: "normal"

inputNodeId | null

The layer's image.

Default: null

opacityAnimated_float

The layer's opacity, in 0..=1.

Default: {"mode":"constant","value":1}

MissingFrames

How an image sequence shows a frame missing from its numbering.

  • "reject" A sequence with a missing frame is refused.
  • "hold" The frame before it is shown.
  • "blank" Nothing is shown: a transparent frame.

Node

One part of a video.

One of:

type: "sequence"

Children one after another, with transitions between them.

FieldTypeDescription
atnumber | null

Seconds from the parent's start (an overlay's: the video's). Ignored in a sequence, which places its children one after another.

childrenrequiredNode[]

The children, in play order.

durationnumber | null

Length in seconds. Default: the node's own (a video's, a caption file's), else what its parent gives it.

idstring | null

The node's name, for other nodes to refer to.

transitionTransitionChoice | null

What joins neighbours: a transition overlaps them by its duration. Default none. Only single pictures (media, text, color, layout) can transition into each other.

type: "stack"

Children over each other, each over the ones before.

FieldTypeDescription
atnumber | null

Seconds from the parent's start (an overlay's: the video's). Ignored in a sequence, which places its children one after another.

childrenrequiredNode[]

The children, each drawn over the ones before. Each starts at its own at.

durationnumber | null

Length in seconds. Default: the node's own (a video's, a caption file's), else what its parent gives it.

idstring | null

The node's name, for other nodes to refer to.

insetInset | null

Pixels kept clear inside the parent's area: one number for every side, or [top, right, bottom, left].

type: "grid"

Children in the cells of a grid, row by row.

FieldTypeDescription
atnumber | null

Seconds from the parent's start (an overlay's: the video's). Ignored in a sequence, which places its children one after another.

childrenrequiredNode[]

The cells' contents, row by row.

columnsinteger | null

Columns. Default: as square a grid as the children make.

durationnumber | null

Length in seconds. Default: the node's own (a video's, a caption file's), else what its parent gives it.

gapnumber (float)

Pixels between cells.

Default: 0

idstring | null

The node's name, for other nodes to refer to.

insetInset | null

Pixels kept clear inside the parent's area: one number for every side, or [top, right, bottom, left].

lengthGridLength

How long the grid lasts when its cells differ, and what a cell that ends early shows. Default shortest.

Default: "shortest"

type: "media"

A video or still file.

FieldTypeDescription
alignAlign | null

Where in its area the picture or text lies. Default center.

atnumber | null

Seconds from the parent's start (an overlay's: the video's). Ignored in a sequence, which places its children one after another.

blurnumber | null

A Gaussian blur's radius, as a fraction of the picture's shorter side.

durationnumber | null

Length in seconds. Default: the node's own (a video's, a caption file's), else what its parent gives it.

fade_innumber | null

Seconds of fade in from transparent.

fade_outnumber | null

Seconds of fade out to transparent.

fitFit | null

How a picture fills its area. Default contain.

idstring | null

The node's name, for other nodes to refer to.

insetInset | null

Pixels kept clear inside the parent's area: one number for every side, or [top, right, bottom, left].

kindFileKind | null

What the file holds. Default: by its extension.

labelstring | null

A label a comparison grid shows on the cell.

loopboolean

Plays a video again from its start while the node lasts.

mutedboolean

Silences a video's sound.

opacitynumber | null

Opacity, 0..=1. Default 1.

pathrequiredstring

The file. It becomes the source's locator and the export's asset.

speednumber | null

Playback speed of a video: 2 plays it twice as fast. Default 1.

trim_endnumber | null

Where in the file a video ends, in seconds. Default: its end.

trim_startnumber | null

Where in the file a video starts, in seconds.

volumenumber | null

Linear gain of a video's sound. Default 1.

zoomarray | null

A slow zoom over the node's length, [from, to], as multiples of the fitted size.

type: "text"

Text.

FieldTypeDescription
alignAlign | null

Where in its area the picture or text lies. Default center.

atnumber | null

Seconds from the parent's start (an overlay's: the video's). Ignored in a sequence, which places its children one after another.

backgroundRgba | null

A box of this color behind each line.

colorRgba | null

Color. Default: the theme's text color.

durationnumber | null

Length in seconds. Default: the node's own (a video's, a caption file's), else what its parent gives it.

fadenumber | null

Seconds of fade in and out. Default none.

font_familystring | null

Family. Default: the theme's.

font_sizenumber | null

Font size in pixels. Default: the style's.

idstring | null

The node's name, for other nodes to refer to.

insetInset | null

Pixels kept clear inside the parent's area: one number for every side, or [top, right, bottom, left].

max_linesinteger | null

The most lines it may take: with fonts to measure by, a longer text shrinks until it fits. Default: no limit.

opacitynumber | null

Opacity, 0..=1. Default 1.

outlineRgba | null

A band of this color around the glyphs.

styleTextRole

The theme style it starts from. Default body.

Default: "body"

textrequiredstring

The text; \n starts a line.

type: "color"

An area painted one color.

FieldTypeDescription
atnumber | null

Seconds from the parent's start (an overlay's: the video's). Ignored in a sequence, which places its children one after another.

colorRgba | null

The color. Default: the theme's surface.

durationnumber | null

Length in seconds. Default: the node's own (a video's, a caption file's), else what its parent gives it.

idstring | null

The node's name, for other nodes to refer to.

insetInset | null

Pixels kept clear inside the parent's area: one number for every side, or [top, right, bottom, left].

type: "captions"

Timed text from cues, a SubRip or WebVTT file, or word timestamps.

FieldTypeDescription
atnumber | null

Seconds from the parent's start (an overlay's: the video's). Ignored in a sequence, which places its children one after another.

colorRgba | null

Text color. Default: the theme's.

cuesCue[]

Cues as given, in seconds from the node's start.

durationnumber | null

Length in seconds. Default: the node's own (a video's, a caption file's), else what its parent gives it.

filestring | null

A SubRip (.srt) or WebVTT (.vtt) file, read by the binding.

font_sizenumber | null

Font size in pixels. Default: the theme's caption size.

idstring | null

The node's name, for other nodes to refer to.

max_charsinteger | null

The longest cue words are grouped into, in characters. Default 32 on a tall canvas, 42 on a wide one.

positionnumber | null

Where the text's middle lies, as a fraction of the canvas height. Default: the style's, which depends on the canvas's shape.

srtstring | null

SubRip text.

styleCaptionStyle

How the captions look. Default outline.

Default: "outline"

vttstring | null

WebVTT text.

wordsCue[]

Words with their times, as speech recognition gives them; they are grouped into cues of up to max_chars characters.

type: "layout"

A layout generator: boxes, text and shapes laid out by CSS flexbox and grid, as the project writes them.

FieldTypeDescription
alignAlign | null

Where in its area the picture or text lies. Default center.

atnumber | null

Seconds from the parent's start (an overlay's: the video's). Ignored in a sequence, which places its children one after another.

durationnumber | null

Length in seconds. Default: the node's own (a video's, a caption file's), else what its parent gives it.

idstring | null

The node's name, for other nodes to refer to.

insetInset | null

Pixels kept clear inside the parent's area: one number for every side, or [top, right, bottom, left].

rootrequiredLayoutNode

The root box, as a project's layout generator writes it.

type: "audio"

A sound file.

FieldTypeDescription
atnumber | null

Seconds from the parent's start (an overlay's: the video's). Ignored in a sequence, which places its children one after another.

duck_depth_dbnumber | null

How far ducking lowers it, in dB (negative). Default -12.

duck_understring | null

The id of a node (or body) whose sound this ducks under.

durationnumber | null

Length in seconds. Default: the node's own (a video's, a caption file's), else what its parent gives it.

fade_innumber | null

Seconds of fade in.

fade_outnumber | null

Seconds of fade out.

idstring | null

The node's name, for other nodes to refer to.

loopboolean

Plays the file again from its start while the node lasts.

pathrequiredstring

The file.

trim_endnumber | null

Where in the file it ends, in seconds. Default: its end.

trim_startnumber | null

Where in the file it starts, in seconds.

volumenumber | null

Linear gain. Default 1.

type: "raw"

Part of a project, as the project writes it: its sources, tracks and compositions, at its own times. Only as an overlay.

FieldTypeDescription
assets{ [name]: string }

Each file a media source of the fragment reads, by source id: the export's assets.

compositionsComposition[]

Compositions its clips show.

sourcesMediaSource[]

Sources its tracks read. Their ids must not be the compiler's (s1, s2, ...); a src- prefix keeps them apart.

tracksTrack[]

Tracks drawn over what comes before, at timeline times.

type: "slideshow"

Stills or clips in turn, with transitions and slow zooms.

FieldTypeDescription
atnumber | null

When it starts in its parent; its length is the slides'.

fitFit | null

How slides fill the canvas. Default cover.

fit_tostring | null

A sound file whose length the slides share out. It is not played: add it as a music bed.

idstring | null

The node's name, for other nodes to refer to.

itemsrequiredMediaItem[]

The slides.

ken_burnsnumber | null

How far each slide zooms in over its time, as a multiple: 1.15 ends 15% larger. Default none.

secondsnumber | null

How long each slide shows, transitions included, in seconds. Default: fit_to's length shared out, else the theme's still length.

transitionTransitionChoice | null

What joins slides. Default theme.

type: "captioned_video"

A video under its captions.

FieldTypeDescription
atnumber | null

When it starts in its parent; its length is the video's.

captionsrequiredCaptionsNode

The captions, timed from the video's start.

fitFit | null

How the video fills the canvas. Default cover.

idstring | null

The node's name, for other nodes to refer to. Its sound is the video's.

videorequiredMediaItem

The video.

type: "title"

A title (and subtitle) over what is under it, laid out on the whole canvas.

FieldTypeDescription
alignAlign | null

Where it lies. Default center.

atnumber | null

Seconds from the parent's start (an overlay's: the video's). Ignored in a sequence, which places its children one after another.

backgroundRgba | null

A card's color. Default: the theme's surface.

durationnumber | null

Length in seconds. Default: the node's own (a video's, a caption file's), else what its parent gives it.

fadenumber | null

Seconds of fade in and out. Default: the theme's.

idstring | null

The node's name, for other nodes to refer to.

subtitlestring | null

A smaller line under it.

textrequiredstring

The title.

type: "title_card"

A title (and subtitle) on the theme's surface, over the whole canvas.

FieldTypeDescription
alignAlign | null

Where it lies. Default center.

atnumber | null

Seconds from the parent's start (an overlay's: the video's). Ignored in a sequence, which places its children one after another.

backgroundRgba | null

A card's color. Default: the theme's surface.

durationnumber | null

Length in seconds. Default: the node's own (a video's, a caption file's), else what its parent gives it.

fadenumber | null

Seconds of fade in and out. Default: the theme's.

idstring | null

The node's name, for other nodes to refer to.

subtitlestring | null

A smaller line under it.

textrequiredstring

The title.

type: "lower_third"

A name and role in the canvas's lower left.

FieldTypeDescription
atnumber | null

Seconds from the parent's start (an overlay's: the video's). Ignored in a sequence, which places its children one after another.

durationnumber | null

Length in seconds. Default: the node's own (a video's, a caption file's), else what its parent gives it.

fadenumber | null

Seconds of fade in and out. Default: the theme's.

idstring | null

The node's name, for other nodes to refer to.

subtitlestring | null

The role, under it.

textrequiredstring

The name.

type: "end_card"

A closing card over the whole canvas: a logo, a title and a subtitle on the theme's surface.

FieldTypeDescription
atnumber | null

Seconds from the parent's start (an overlay's: the video's). Ignored in a sequence, which places its children one after another.

backgroundRgba | null

The card's color. Default: the theme's surface.

durationnumber | null

Length in seconds. Default: the node's own (a video's, a caption file's), else what its parent gives it.

fadenumber | null

Seconds of fade in and out. Default: the theme's.

idstring | null

The node's name, for other nodes to refer to.

logostring | null

A picture above the title.

subtitlestring | null

A smaller line under it.

textrequiredstring

The title.

type: "comparison_grid"

Clips side by side in a grid, each labeled.

FieldTypeDescription
atnumber | null

Seconds from the parent's start (an overlay's: the video's). Ignored in a sequence, which places its children one after another.

audio_frominteger | null

Which item's sound plays, by index. Default: none.

columnsinteger | null

Columns. Default: as square a grid as the items make.

durationnumber | null

Length in seconds. Default: the node's own (a video's, a caption file's), else what its parent gives it.

gapnumber (float)

Pixels between cells.

Default: 0

idstring | null

The node's name, for other nodes to refer to.

itemsrequiredMediaItem[]

The clips, row by row; each one's label names its cell.

lengthGridLength

How long the grid lasts when its clips differ. Default shortest.

Default: "shortest"

type: "reframe"

A video fitted to a canvas of another shape, over a blurred copy of itself.

FieldTypeDescription
atnumber | null

When it starts in its parent; its length is the video's.

blurnumber | null

The background's blur radius, as a fraction of its shorter side. Default 0.05.

idstring | null

The node's name, for other nodes to refer to. Its sound is the video's.

videorequiredMediaItem

The video.

type: "logo"

A picture in a corner.

FieldTypeDescription
atnumber | null

Seconds from the parent's start (an overlay's: the video's). Ignored in a sequence, which places its children one after another.

cornerAlign | null

The corner. Default top-right.

durationnumber | null

Length in seconds. Default: the node's own (a video's, a caption file's), else what its parent gives it.

idstring | null

The node's name, for other nodes to refer to.

marginnumber | null

Pixels from the edges. Default: the theme's margin.

opacitynumber | null

Opacity, 0..=1. Default 1.

pathrequiredstring

The picture.

sizenumber | null

Its longer side, in pixels. Default: 15% of the canvas's shorter side.

type: "music_bed"

Music under the video, faded in and out and ducked under speech.

FieldTypeDescription
atnumber | null

Seconds from the parent's start (an overlay's: the video's). Ignored in a sequence, which places its children one after another.

duck_depth_dbnumber | null

How far ducking lowers it, in dB (negative). Default -12.

duck_understring | null

The id of a node (or body) whose sound it ducks under.

durationnumber | null

Length in seconds. Default: the node's own (a video's, a caption file's), else what its parent gives it.

fade_innumber | null

Seconds of fade in. Default 1.

fade_outnumber | null

Seconds of fade out at the end. Default 2.

idstring | null

The node's name, for other nodes to refer to.

loopboolean

Plays the file again from its start while the video lasts. Default true.

Default: true

pathrequiredstring

The file.

volumenumber | null

Linear gain. Default 1.

NodeId

A stable identifier of a node within one composition graph. It has no /, which joins the IDs of the group and media nodes a step was drawn through.

Type: string

NodeOp

The operation of a CompositionNode.

Animated settings are keyed in composition time (see ClipComposition), not timeline time.

One of:

type: "clip"

The picture of the clip showing the composition: its source at the source time the clip's time map gives, or what its generated source draws.

type: "media"

Another visual source, read at start plus the composition time. A media node adds no sound to the mix.

FieldTypeDescription
source_idrequiredSourceId

The source; a video, image, or generated source.

startMediaTime

Source time shown at composition time zero. Non-negative.

Default: 0

type: "generator"

A picture the engine draws.

FieldTypeDescription
generatorrequiredGenerator

What is drawn.

type: "effect"

A registered effect: its input and the named images it samples besides.

FieldTypeDescription
effectrequiredClipEffect

The versioned effect and its parameters.

inputNodeId | null

The image the effect processes; a bypassed node passes it through.

Default: null

inputs{ [name]: NodeId | null }

The images the effect samples besides its input, by the names its definition declares (sample_<name> in its shader); at most MAX_EFFECT_INPUTS. A name the definition does not declare, or one it declares and this leaves out, fails the frames that draw the node.

type: "transition"

A registered two-input transition at an explicit progress.

FieldTypeDescription
effectrequiredClipEffect

The versioned transition and its parameters.

fromNodeId | null

The image at progress zero.

Default: null

progressrequiredAnimated_float

Progress through the transition, in 0..=1.

toNodeId | null

The image at progress one.

Default: null

type: "transform"

The input placed on the canvas by a transform and opacity.

FieldTypeDescription
inputNodeId | null

The image placed.

Default: null

transformVisualProperties

Position, anchor, scale, rotation, and opacity.

Default: {"anchor":{"x":0.5,"y":0.5},"opacity":{"mode":"constant",…

type: "merge"

Ordered layers composited over transparency.

FieldTypeDescription
layersMergeLayer[]

Layers from bottom to top.

Default: []

type: "matte"

The input kept where a second image says.

FieldTypeDescription
inputNodeId | null

The image kept.

Default: null

matteNodeId | null

The image whose alpha or luminance is coverage.

Default: null

moderequiredMatteMode

Which property of the matte image is coverage.

type: "shape_mask"

The input kept inside shapes.

FieldTypeDescription
inputNodeId | null

The image masked.

Default: null

masksrequiredShapeMask[]

The shapes, combined in order; at most MAX_CLIP_MASKS. Geometry is in the input image's normalized space.

type: "group"

Another composition drawn in this one's time, as a group: its output, with its group inputs fed from inputs and its controls set from controls.

FieldTypeDescription
compositionrequiredCompositionId

The composition drawn.

controls{ [name]: Animated_EffectValue }

Values for its controls, by name; a control not set keeps the composition's own value. Keyed in composition time.

inputsNodeId | null[]

The image for each of its inputs, in its port order.

Default: []

type: "group_input"

In a composition used as a group, the image the group node gives its input index.

FieldTypeDescription
indexrequiredinteger (uint32)

The input, in the composition's port order.

Overflow

Whether content past a box's padding box is drawn.

  • "visible" Drawn.
  • "hidden" Clipped to the padding box.

Paint

A color or gradient.

Gradients interpolate between stops premultiplied, in linear light: the engine's working space, so a gradient between two colors passes through the physical mix of them, and a stop fading to transparent does not darken its neighbour.

A color (hex or object) is read as a solid paint of it; a paint is written back tagged.

One of:

type: "solid"

One color.

FieldTypeDescription
colorrequiredRgba

The color.

type: "linear_gradient"

Colors along the line from start to end, constant across it.

FieldTypeDescription
endrequiredVec2

Where offset 1 lies. Distinct from start.

spreadSpread

What lies beyond the first and last offsets.

Default: "pad"

startrequiredVec2

Where offset 0 lies.

stopsrequiredGradientStop[]

Two to MAX_GRADIENT_STOPS stops.

type: "radial_gradient"

Colors along the radius of a circle.

FieldTypeDescription
centerrequiredVec2

Where offset 0 lies.

radiusrequirednumber (float)

The distance of offset 1 from the centre, as a fraction of the picture's shorter side. Positive.

spreadSpread

What lies beyond the first and last offsets.

Default: "pad"

stopsrequiredGradientStop[]

Two to MAX_GRADIENT_STOPS stops.

type: "conic_gradient"

Colors around a point: offsets 0 to 1 are one clockwise turn.

FieldTypeDescription
angle_degreesnumber (float)

Where offset 0 lies, in degrees clockwise from straight up.

Default: 0

centerrequiredVec2

The point the gradient turns around.

stopsrequiredGradientStop[]

Two to MAX_GRADIENT_STOPS stops.

<a href="#rgba">Rgba</a>

Path

One or more subpaths.

FieldTypeDescription
subpathsrequiredSubpath[]

The subpaths, at most MAX_PATH_SUBPATHS, with at most MAX_PATH_VERTICES vertices among them.

PathVertex

A path vertex and its tangents. The segment from vertex a to vertex b is the cubic Bezier through a.point, a.point + a.out_tangent, b.point + b.in_tangent, and b.point; zero tangents make it straight.

FieldTypeDescription
in_tangentVec2

The control point of the segment ending here, relative to point.

Default: {"x":0,"y":0}

out_tangentVec2

The control point of the segment starting here, relative to point.

Default: {"x":0,"y":0}

pointrequiredVec2

Where the vertex lies.

PointKeyframe

One keyframe of an AnimatedPoint.

FieldTypeDescription
in_tangentVec2

The end of the way here from the previous keyframe's value, relative to this value: that curve's second control point.

interpolationrequiredInterpolation

Interpolation from this keyframe to its successor: how fast the value travels along the way there.

out_tangentVec2

The start of the way to the next keyframe's value, relative to this value: the curve's first control point.

timerequiredMediaTime

Timestamp of this value, as a Keyframe's.

valuerequiredVec2

Value at time.

PolystarKind

What kind of figure a polystar is.

  • "star" Points joined by inner corners.
  • "polygon" Points joined by straight sides.

Position

Whether a box is in its parent's flow.

  • "relative" In the flow.
  • "absolute" Out of the flow, placed by inset.

ProviderSource

A source whose media an extension provider supplies, rather than the host's video and image decoders.

A host picks the provider by probing the bytes at import, never by a file name, and records it here with the settings the source needs, so every host opens the source the same way. The engine does not read it: a provider source needs frames like any video or image source.

One of:

format: "svg"

A static SVG document, rasterized at the size it is shown. The source's kind is image.

format: "animated_image"

A GIF, animated WebP, or APNG: one cycle of frames, each with its own duration. Repetition is the clip's. The source's kind is video.

format: "lottie"

A Lottie animation, from a Lottie JSON file or a dotLottie package, evaluated at its own frames. The source's kind is video.

FieldTypeDescription
animationstring | null

The dotLottie animation shown, by its ID; the package's first when absent, and absent for a Lottie JSON file.

format: "image_sequence"

Still images played in order at a fixed rate. The source's kind is video.

FieldTypeDescription
frame_raterequiredFrameRate

The rate the frames play at.

framesrequiredstring | null[]

Each frame's locator, in play order. null is a number missing from the sequence, allowed only when missing says how to show it.

missingMissingFrames

How a missing frame is shown.

Default: "reject"

primariesLinearPrimaries | null

The primaries OpenEXR frames' linear RGB is in, overriding what the first frame's chromaticities say. Only for OpenEXR frames.

start_numberinteger (uint64)

The number of the first frame, as its file was numbered.

Default: 0

format: "exr"

A still OpenEXR image: linear-light RGB(A), read at half precision. The source's kind is image.

FieldTypeDescription
primariesLinearPrimaries | null

The primaries its linear RGB is in, overriding what the file's chromaticities say (BT.709 when it says nothing, as OpenEXR defines).

Rgba

A straight (not premultiplied), sRGB-encoded color with alpha, each component in 0..=1.

Written as the object, or as CSS hex: "#rgb", "#rgba", "#rrggbb" or "#rrggbbaa", any case, each digit pair a component times 255. It is written back as the object: a component need not be a multiple of 1/255.

One of:

object

FieldTypeDescription
alpharequirednumber (float)

Coverage.

bluerequirednumber (float)

Blue component.

greenrequirednumber (float)

Green component.

redrequirednumber (float)

Red component.

string

ShapeGeometry

A geometry alone, as a mask's outline is.

One of:

type: "rectangle"

A rectangle, optionally with rounded corners.

FieldTypeDescription
centerrequiredAnimatedPoint

Centre.

corner_radiusAnimated_float

Corner radius, as a fraction of the shorter side. Non-negative; a radius past half the rectangle is capped.

Default: {"mode":"constant","value":0}

rotation_degreesAnimated_float

Clockwise rotation about the centre, in degrees.

Default: {"mode":"constant","value":0}

sizerequiredAnimated_Vec2

Full width and height, before rotation, per axis: x a fraction of the picture's width, y of its height. Non-negative.

type: "ellipse"

An ellipse.

FieldTypeDescription
centerrequiredAnimatedPoint

Centre.

rotation_degreesAnimated_float

Clockwise rotation about the centre, in degrees.

Default: {"mode":"constant","value":0}

sizerequiredAnimated_Vec2

Full width and height, before rotation, per axis: x a fraction of the picture's width, y of its height. Non-negative.

type: "polystar"

A regular polygon or star.

FieldTypeDescription
centerrequiredAnimatedPoint

Centre.

inner_radiusAnimated_float

A star's distance of its inner corners from the centre. Non-negative.

Default: {"mode":"constant","value":0}

inner_roundnessAnimated_float

How round a star's inner corners are, in 0..=1.

Default: {"mode":"constant","value":0}

kindrequiredPolystarKind

A polygon or a star.

outer_radiusrequiredAnimated_float

Distance of the points from the centre, as a fraction of the shorter side. Non-negative.

outer_roundnessAnimated_float

How round the outer corners are: 0 sharp, 1 a smooth curve through them. In 0..=1.

Default: {"mode":"constant","value":0}

pointsrequiredAnimated_float

Number of points (corners of a polygon, tips of a star), from MIN_POLYSTAR_POINTS to MAX_POLYSTAR_POINTS. A fraction is dropped when drawn, as Lottie drops it, so an animated count changes the figure one whole point at a time.

rotation_degreesAnimated_float

Clockwise rotation about the centre, in degrees.

Default: {"mode":"constant","value":0}

type: "path"

A Bezier path.

FieldTypeDescription
pathrequiredAnimated_Path

The path.

ShapeItem

One entry of a shapes generator's content tree.

A group is read front to back. Geometry accumulates in its group; a fill or a stroke paints the geometry listed before it in the same group, nested groups before it included; a trim cuts that geometry and replaces it. A paint listed earlier is drawn on top of one listed later, as in After Effects and Lottie.

One of:

type: "group"

Items drawn together, through one transform and opacity. Their geometry also counts as the enclosing group's, for the paints and trims after the group.

FieldTypeDescription
itemsrequiredShapeItem[]

The group's items, front first.

transformShapeTransform

Where the group lies, and how opaque it is.

Default: {"anchor":{"mode":"constant","value":{"x":0,"y":0}},"opac…

type: "rectangle"

A rectangle, optionally with rounded corners.

FieldTypeDescription
centerrequiredAnimatedPoint

Centre.

corner_radiusAnimated_float

Corner radius, as a fraction of the shorter side. Non-negative; a radius past half the rectangle is capped.

Default: {"mode":"constant","value":0}

rotation_degreesAnimated_float

Clockwise rotation about the centre, in degrees.

Default: {"mode":"constant","value":0}

sizerequiredAnimated_Vec2

Full width and height, before rotation, per axis: x a fraction of the picture's width, y of its height. Non-negative.

type: "ellipse"

An ellipse.

FieldTypeDescription
centerrequiredAnimatedPoint

Centre.

rotation_degreesAnimated_float

Clockwise rotation about the centre, in degrees.

Default: {"mode":"constant","value":0}

sizerequiredAnimated_Vec2

Full width and height, before rotation, per axis: x a fraction of the picture's width, y of its height. Non-negative.

type: "polystar"

A regular polygon or star.

FieldTypeDescription
centerrequiredAnimatedPoint

Centre.

inner_radiusAnimated_float

A star's distance of its inner corners from the centre. Non-negative.

Default: {"mode":"constant","value":0}

inner_roundnessAnimated_float

How round a star's inner corners are, in 0..=1.

Default: {"mode":"constant","value":0}

kindrequiredPolystarKind

A polygon or a star.

outer_radiusrequiredAnimated_float

Distance of the points from the centre, as a fraction of the shorter side. Non-negative.

outer_roundnessAnimated_float

How round the outer corners are: 0 sharp, 1 a smooth curve through them. In 0..=1.

Default: {"mode":"constant","value":0}

pointsrequiredAnimated_float

Number of points (corners of a polygon, tips of a star), from MIN_POLYSTAR_POINTS to MAX_POLYSTAR_POINTS. A fraction is dropped when drawn, as Lottie drops it, so an animated count changes the figure one whole point at a time.

rotation_degreesAnimated_float

Clockwise rotation about the centre, in degrees.

Default: {"mode":"constant","value":0}

type: "path"

A Bezier path.

FieldTypeDescription
pathrequiredAnimated_Path

The path.

type: "fill"

Paints the inside of the geometry listed before it in its group, all of it as one compound path under rule. An open path is closed for it.

FieldTypeDescription
opacityAnimated_float

Opacity in 0..=1.

Default: {"mode":"constant","value":1}

paintrequiredAnimated_Paint

What covers it.

ruleFillRule

Which regions of the compound path are inside.

Default: "nonzero"

type: "stroke"

Strokes the geometry listed before it in its group.

FieldTypeDescription
capLineCap

How open ends look.

Default: "butt"

dashDash | null

Dashes, or a solid stroke when absent.

Default: null

joinLineJoin

How segments meet.

Default: "miter"

miter_limitnumber (float)

Longest a miter join reaches, as a multiple of half the width, before it is beveled. At least 1.

Default: 4

opacityAnimated_float

Opacity in 0..=1.

Default: {"mode":"constant","value":1}

paintrequiredAnimated_Paint

What covers the stroke.

widthrequiredAnimated_float

Full width, as a fraction of the shorter side. Non-negative; zero draws nothing.

type: "trim"

Keeps part of the geometry listed before it in its group, by length.

FieldTypeDescription
endrequiredAnimated_float

Where it ends, in 0..=1. Nothing is kept unless it is after start.

modeTrimMode

Whether the span is of all the geometry together or of each part.

Default: "together"

offsetAnimated_float

Turns the span is shifted by; it wraps around a closed path.

Default: {"mode":"constant","value":0}

startrequiredAnimated_float

Where the kept span starts, as a fraction of the length, in 0..=1.

ShapeMask

A shape that limits where a clip is visible.

Geometry is in the clip's source space, before its transform, so the mask moves with the clip: (0, 0) is the source's top-left corner and (1, 1) its bottom-right. Distances (feather, a rectangle's corner_radius, a polystar's radii) are fractions of that space's shorter side, so a mask covers the same part of the picture at any render resolution.

FieldTypeDescription
featherAnimated_float

How soft the edge is. Non-negative; zero is the outline's antialiased edge. The coverage is blurred by a Gaussian of standard deviation 0.3125 * feather, which spreads its 10 to 90 percent ramp over 0.8 * feather across the outline.

Default: {"mode":"constant","value":0}

fill_ruleFillRule

Which regions of the outline are inside it.

Default: "nonzero"

invertboolean

Whether the mask keeps the outside of the shape instead of its inside.

Default: false

modeMaskMode

How this mask combines with the ones before it.

Default: "add"

shaperequiredShapeGeometry

The shape's outline, as a shapes generator's geometry.

ShapeTransform

A group's placement: in pixel space, translate by position, rotate, scale, and translate by minus anchor, so anchor lands on position. The default leaves its items where they are.

FieldTypeDescription
anchorAnimated_Vec2

The point of the items that is placed at position.

Default: {"mode":"constant","value":{"x":0,"y":0}}

opacityAnimated_float

Opacity of the group as a whole, in 0..=1: overlapping items are composited first and faded together.

Default: {"mode":"constant","value":1}

positionAnimatedPoint

Where anchor is placed.

Default: {"mode":"constant","value":{"x":0,"y":0}}

rotation_degreesAnimated_float

Clockwise rotation, in degrees.

Default: {"mode":"constant","value":0}

scaleAnimated_Vec2

Per-axis scale; 1 leaves the items unscaled. Stroke widths scale with it.

Default: {"mode":"constant","value":{"x":1,"y":1}}

SourceId

A stable media-source identifier.

Type: string

Spread

What a linear or radial gradient shows outside its first and last stops.

  • "pad" The end colors continue.
  • "repeat" The gradient starts again.
  • "reflect" The gradient runs back and forth.

StreamTopology

The streams a media file carries.

FieldTypeDescription
audioAudioStreamShape | null

The primary audio stream, if there is one.

videoVideoStreamShape | null

The primary video stream, if there is one.

Subpath

A run of vertices joined by cubic Bezier segments.

FieldTypeDescription
closedboolean

Whether a segment joins the last vertex back to the first.

Default: false

verticesrequiredPathVertex[]

The vertices, in order.

TextAlign

How lines of text align within it.

  • "start" Left.
  • "center" Centred.
  • "end" Right.

TextBackground

A box behind each line of text.

FieldTypeDescription
colorrequiredRgba

Box color.

paddingnumber (float)

Space between the text and the box edge, as a fraction of the font size, in [0, 2].

Default: 0

TextOutline

A band around the glyphs, drawn behind them.

FieldTypeDescription
colorrequiredRgba

Band color.

widthrequirednumber (float)

Band width as a fraction of the font size, in (0, 0.5].

TextRole

A theme text style.

  • "title" The largest.
  • "subtitle" Under a title.
  • "body" Running text.
  • "label" A cell's label.

TextStyle

How text looks and where it lies: a caption track's cues, or a text Generator.

Sizes are resolution-independent: the font size is a fraction of the canvas's shorter side, as every other length is, the wrapping width a fraction of the canvas width, and the outline and background padding fractions of the font size. The engine draws with the fonts its host registered: those of font_family first, then the rest in their fallback order.

FieldTypeDescription
alignTextAlign

How lines align within the text.

Default: "center"

anchorVec2

The point of the text, background included, placed at position: (0.5, 1) is its bottom centre.

Default: {"x":0.5,"y":1}

backgroundTextBackground | null

A box behind each line.

Default: null

colorRgba

Text color.

Default: {"alpha":1,"blue":1,"green":1,"red":1}

font_familystring | null

The family the text draws in, as the font's own name table gives it (typographic family, else family), matched without regard to ASCII case. Glyphs its fonts lack, and a family no registered font has, draw from the other fonts in fallback order. None draws from the fallback order alone. Non-empty, at most MAX_FONT_FAMILY_BYTES bytes.

font_sizenumber (float)

Font size as a fraction of the canvas's shorter side: positive, at most MAX_CAPTION_FONT_SIZE on a caption track and MAX_TEXT_GENERATOR_FONT_SIZE in a text generator.

Default: 0.05

font_weightinteger (uint16)

The weight, in [1, 1000], a family's faces are matched by, as CSS Fonts 4 matches font-weight; a variable face draws at it, clamped to its wght axis. No face is emboldened: a weight the family lacks draws its nearest face.

Default: 400

letter_spacingnumber (float)

Space after each character, as a fraction of the font size, in [-0.5, 1], as CSS letter-spacing adds it: none after a line's last character, and none after a character of a cursive script (Arabic, say), whose joins it would break. Not zero, it turns optional ligatures off.

Default: 0

line_heightnumber (float)

Baseline-to-baseline distance in font sizes, in [0.5, 3]. Each line's em box, 0.8 of a font size above its baseline and 0.2 below, is centred in its line when the line is taller than an em.

Default: 1.2

max_widthnumber (float)

Width text wraps at, as a fraction of the canvas width, in (0, 1].

Default: 0.9

outlineTextOutline | null

A band around the glyphs.

Default: null

positionVec2

Where on the canvas the text's anchor lies, (0, 0) top-left to (1, 1) bottom-right.

Default: {"x":0.5,"y":0.92}

Theme

How text, panels and timings look. Every part left out is the base theme's. Sizes are fractions of the canvas's shorter side, so a theme looks the same on a wide and a tall canvas.

FieldTypeDescription
accentRgba | null

A highlight: a lower third's bar.

backgroundRgba | null

The canvas background.

basestring | null

The built-in theme this one changes. Default clean-dark.

body_sizenumber | null

Body text size.

caption_sizenumber | null

Caption size.

fade_secondsnumber | null

How long text and cards fade in and out, in seconds.

font_familystring | null

The family text draws in, as the font names it. Unset, text draws in the first font an export registers.

label_sizenumber | null

Label size: a grid cell's.

marginnumber | null

The space kept clear at the canvas's edges.

panelRgba | null

The boxes behind labels, lower thirds and boxed captions.

still_secondsnumber | null

How long a still shows when nothing says, in seconds.

subtitle_sizenumber | null

Subtitle size.

surfaceRgba | null

What title and end cards are drawn on.

textRgba | null

Text color.

text_secondsnumber | null

How long a card or text shows when nothing says, in seconds.

title_sizenumber | null

Title size.

transitionTransition | null

The transition a slideshow, or a sequence asking for theme, puts between its children.

ThemeChoice

A theme by name, or one built on a named theme.

One of:

string

A built-in theme: clean-dark or clean-light.

<a href="#theme">Theme</a>

A theme of its own.

TimeMap

How a clip plays its source range over its timeline range.

forward and reverse stretch the source range over the timeline range, so their speed is the ratio of the two. A loop plays the source range at its own speed, again and again, for as long as the timeline range lasts.

One of:

type: "forward"

From the start of the source range to its end.

type: "reverse"

From the end of the source range to its start: pictures in reverse order and sound played backwards.

type: "freeze"

One source instant for the whole clip, and silence.

FieldTypeDescription
source_timerequiredMediaTime

The instant shown; inside the source range.

type: "loop"

The source range again and again, at its own speed.

FieldTypeDescription
moderequiredLoopMode

How each pass follows the one before.

TimeRange

A half-open timeline interval [start, end).

FieldTypeDescription
endrequiredMediaTime

Exclusive end.

startrequiredMediaTime

Inclusive start.

TimeScale

A positive rational rate of one time against another.

FieldTypeDescription
denrequiredinteger (uint32)

Denominator; positive.

numrequiredinteger (uint32)

Numerator; positive.

Track

A homogeneous visual or audio timeline lane.

FieldTypeDescription
audioTrackAudio

Bus controls applied to this track's mixed audio.

Default: {"ducking":null,"effects":[],"gain":{"mode":"constant","v…

captionsCaptions | null

The cues and style of a caption track; present exactly for that kind.

Default: null

clipsClip[]

Clips on this track. Ordering is authoring order; evaluation sorts by time. A caption track has none.

Default: []

idrequiredTrackId

Stable track identity.

kindrequiredTrackKind

Controls source compatibility and evaluation behavior.

namerequiredstring

User-visible track name.

transitionsClipTransition[]

Explicit transitions between overlapping clips on this track.

Default: []

TrackAudio

Per-track audio bus controls.

FieldTypeDescription
duckingDucking | null

Optional sidechain attenuation driven by another track.

Default: null

effectsAudioEffect[]

Ordered single-input effects applied to the summed clip signal, at most MAX_CHAIN_EFFECTS.

Default: []

gainAnimated_float

Animated linear bus amplitude constrained to 0..=MAX_GAIN.

Default: {"mode":"constant","value":1}

mutedboolean

Silences this bus.

Default: false

panAnimated_float

Animated stereo position applied after the clip mix, from -1 (left) to 1 (right).

Default: {"mode":"constant","value":0}

soloboolean

Restricts the mix to soloed buses when any track sets this.

Default: false

TrackId

A stable timeline-track identifier.

Type: string

TrackKind

The media domain accepted by a track.

  • "video" A composited visual track.
  • "audio" A mixed audio track.
  • "caption" Timed text, drawn over the tracks before it and under the ones after.

TrackList

A grid track list as CSS writes it: "1fr 2fr 120px", "repeat(3, minmax(100px, 1fr))", "repeat(auto-fill, 160px)", "auto min-content max-content", "fit-content(200px)". A bare number is a fraction of the picture's shorter side. Named lines are not supported.

Type: string

TransferFunction

Encoded transfer curve.

  • "bt709" BT.709 opto-electronic transfer function.
  • "srgb" IEC sRGB transfer function.
  • "pq" Perceptual quantizer HDR transfer function.
  • "hlg" Hybrid log-gamma HDR transfer function.

Transition

The transition between two neighbours of a sequence.

FieldTypeDescription
durationrequirednumber (double)

How long the neighbours overlap, in seconds.

easingEasing | null

The timing curve. Default linear.

params{ [name]: Animated_EffectValue }

The effect's parameters by name.

typerequiredstring

crossfade, a built-in transition's short name (wipe-left, circle-open, ...), or a full effect id (alpha2.transition.fade).

versioninteger | null

The effect definition's version. Default 1.

TransitionChoice

A sequence's transitions: none, the theme's, or one given.

One of:

string

none for cuts, theme for the theme's transition, or a transition name at the theme's duration.

<a href="#transition">Transition</a>

A transition.

TrimMode

What a trim measures.

  • "together" One span over the length of every subpath end to end, in order.
  • "individually" A span of each subpath alone.

Vec2

A two-dimensional value in normalized output coordinates.

FieldTypeDescription
xrequirednumber (float)

Horizontal component.

yrequirednumber (float)

Vertical component.

VideoStreamShape

A video stream's displayed size and frame rate.

FieldTypeDescription
frame_rateFrameRate | null

The rate its first frames are presented at, as every host measures it from packet times and rounds it (alpha2_assets::FrameRateEvidence), when it can be measured. Not the rate a stream declares: a declared rate is a guess for variable-rate media, and browsers report none.

heightrequiredinteger (uint32)

Displayed height in square pixels: the stored height stretched by a pixel aspect ratio taller than wide, then turned.

widthrequiredinteger (uint32)

Displayed width in square pixels: the stored width stretched by a pixel aspect ratio wider than tall, then turned by the stream's orientation.

VisualProperties

Resolution-independent visual presentation controls for a clip.

Each field a document leaves out takes its default: the source centred on the canvas, unscaled, unrotated and opaque.

FieldTypeDescription
anchorVec2

Unanimated normalized point within the source rectangle.

Default: {"x":0.5,"y":0.5}

opacityAnimated_float

Animated opacity constrained to 0..=1.

Default: {"mode":"constant","value":1}

positionAnimatedPoint

Animated normalized canvas translation, along spatial curves where its keyframes have tangents.

Default: {"mode":"constant","value":{"x":0.5,"y":0.5}}

rotation_degreesAnimated_float

Animated clockwise rotation in degrees.

Default: {"mode":"constant","value":0}

scaleAnimated_Vec2

Animated per-axis scale.

Default: {"mode":"constant","value":{"x":1,"y":1}}