Skip to content

Compose schema

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. Returned as an export option, not stored in the project.

namestring | null

The project's name. Default video.

overlaysNode[]

Nodes drawn over the body in order, 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 an Animated<Vec2> plus optional spatial tangents per keyframe. With them, the value travels the cubic Bezier through this keyframe's out_tangent and the next's in_tangent, at the speed its timing curve sets along the arc length. Without them it moves in a straight line.

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_Rgba

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

One of:

mode: "constant"

A value without animation.

FieldTypeDescription
valuerequiredRgba

Value used at every timestamp.

mode: "keyframes"

Values evaluated from their keyframe sequence.

FieldTypeDescription
keyframesrequiredKeyframe_Rgba[]

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 takes a second input, so 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}

preserve_pitchboolean

Keeps the clip's pitch when its speed is not 1 by time-stretching instead of resampling. No effect at speed 1, on loops or on freezes.

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, never reading from or writing to a cache.

Canvas

The canvas: a preset name, or its parts.

One of:

string

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

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

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

CaptionCue

Text shown over one timeline interval.

FieldTypeDescription
speakerstring | null

Who says it, as the source names them (a WebVTT voice), at most 64 bytes. A track style of that name applies when the cue names no style.

stylestring | null

The name of one of the track's styles, applied over its style.

textrequiredTextContent

The text, a string or runs; \n starts a line. Non-empty, at most MAX_TEXT_CONTENT_BYTES bytes. Run times are from the cue's start and lie within it.

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, shown as long as the captions.
  • "bold-center" Larger outlined text a little below the middle, as short-form video draws it.
  • "bold" White text with a black stroke and a soft shadow, near the bottom.
  • "karaoke" bold, each word turning the highlight color as it is said. Needs word times (words or WebVTT inline timestamps), else draws as bold.
  • "pop" bold, the word being said growing a little in the highlight color. Needs word times.

Captions

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

FieldTypeDescription
cuesrequiredCaptionCue[]

Cues in timeline order, none overlapping; a track shows one cue at a time.

styleTextStyle

The style every cue starts from.

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

styles{ [name]: TextStylePatch }

Named changes to style for cues that name one or whose speaker has one. At most MAX_CAPTION_STYLES, names 1 to 64 bytes.

CaptionsNode

Timed text.

FieldTypeDescription
atnumber | null

Seconds from the parent's start (an overlay's: the video's). Ignored in a sequence.

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 length, 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.

highlightRgba | null

The color karaoke and pop give the word being said. Default: the theme's accent.

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 depends on the style and the canvas's shape.

speakers{ [name]: SpeakerLook }

Each speaker's look, keyed by a WebVTT voice or a cue's speaker; it overrides the style.

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, 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.

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 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

Blend mode, from W3C Compositing and Blending Level 1 (CSS mix-blend-mode) with the specification's formulas, plus plus-lighter from Level 2.

  • "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.
  • "plus_lighter" Source and backdrop added, premultiplied color and alpha each clamped to 1 (Add or Linear Dodge in design tools). It replaces source-over rather than blending inside it.

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 the animation moves with it; trimming its start by d adds d * scale to the offset so the rest stays in place. A negative offset holds settings at their first keyframe and media nodes at 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 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 share one value type, and enum and bool keyframes only hold. Interpolated overshoot is clamped to the parameter's range; 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.

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; 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. Order has no meaning; a node may name a later node 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 group nodes: 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. 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.

speakerstring | null

Who says it: a key of the captions' speakers gives the cue its look.

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

Standard or high dynamic range; must agree with the transfer.

  • "sdr" Standard dynamic range: a BT.709 or sRGB transfer.
  • "hdr" High dynamic range: a PQ or HLG transfer, tone-mapped or rejected per the color pipeline.

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 in 0..=1, as a color picker shows it.

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.

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 fps).

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. Positions are normalized, (0, 0) top-left to (1, 1) bottom-right, and lengths are fractions of the shorter side, so the picture is the same at any render resolution. A fill never changes over time; text changes only through its style's animators; shapes and layouts may change.

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 or Lottie shape layer draws them. Every value in the tree may be keyframed in picture 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 caption cues are, and drawn with the host's registered fonts.

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…

textrequiredTextContent

The text, a string or runs; \n starts a line. Non-empty, at most MAX_TEXT_CONTENT_BYTES bytes. Run times are picture time.

type: "layout"

Boxes laid out by CSS flexbox around their text and shapes, with the engine's fonts. Any value in the tree may be keyframed in picture time. 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 interpolate numerically: a rotation from 0 to 720 degrees turns twice. 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 composition time in a composition node's settings and picture time in a shapes or layout generator's tree.

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 composition time in a composition node's settings and picture time in a shapes or layout generator's tree.

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 composition time in a composition node's settings and picture time in a shapes or layout generator's tree.

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 composition time in a composition node's settings and picture time in a shapes or layout generator's tree.

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 composition time in a composition node's settings and picture time in a shapes or layout generator's tree.

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 composition time in a composition node's settings and picture time in a shapes or layout generator's tree.

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 composition time in a composition node's settings and picture time in a shapes or layout generator's tree.

valuerequiredPath

Value at time.

Keyframe_Rgba

One timestamped control value.

FieldTypeDescription
interpolationrequiredInterpolation

Interpolation from this keyframe to its successor.

timerequiredMediaTime

Timestamp of this value. Timeline time, except composition time in a composition node's settings and picture time in a shapes or layout generator's tree.

valuerequiredRgba

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 composition time in a composition node's settings and picture time in a shapes or layout generator's tree.

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 composition time in a composition node's settings and picture time in a shapes or layout generator's tree.

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 composition time in a composition node's settings and picture time in a shapes or layout generator's tree.

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 flow position 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 (the default) or grid. It is a container with children, a leaf with text or shape content, and empty otherwise (a spacer or decoration). Each box draws background, then border, then content. Boxes draw in document order; reversed directions and grid placement move them but do not change paint 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. Capped at half the box's shorter side.

childrenLayoutNode[]

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

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. Like every container field, not on a box with text or shape content.

fillPaint | null

What paints the text's glyphs, as a text style's fill. Inherited; the root's is white.

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. Like every flex item field, not in a grid.

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] used to match the family's faces, as a text style's font_weight. 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 (for a grid, inline) 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. Like every grid item field, not in a flex container.

letter_spacingnumber | null

Space after each character, as a fraction of the font size, in [-0.5, 1], as a text style's letter_spacing. Not animated. Inherited; the root's is 0.

line_heightnumber | null

Baseline-to-baseline distance in font sizes, in [0.5, 3], as a text style's line_height. Inherited; the root's is 1.2.

marginAnimated_Insets | null

Space outside the border, written as padding is. Sides may be negative; 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. Applied after layout.

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 (or 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.

shadowsarray | null

Shadows of the glyphs and strokes, as a text style's shadows. Inherited as a whole list (as CSS text-shadow); the root has none.

shapeLayoutShape | null

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

strokesarray | null

Bands around the glyphs, as a text style's strokes. Inherited as a whole list; the root has none.

textAnimated_string | null

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

text_alignTextAlign | null

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

text_animatorsTextAnimator[]

Per-character motion of the box's own text, Range selectors only (layout text has no runs). At most MAX_TEXT_ANIMATORS, keyed in picture time. Not inherited; never changes layout.

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. Like every item field, not on the root.

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. 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. 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 and is never composited itself. Where it is not active, 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 known.

A matching content hash proves the same bytes; without one, the other parts can only show a difference. modified_ms narrows a search and never decides identity.

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: first presentation plus length (a stream starting at 1.4 s and lasting 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.
  • "composition" A composition of the project, drawn with the source time as its own time. The host supplies only the media its nodes read.

MediaSource

A host-resolved media resource.

FieldTypeDescription
color_metadataColorMetadata | null

The color a Video source's pictures are in, overriding frame and stream tags on every host. Recorded at import or declared to correct missing or wrong tags; None leaves the tags in charge. Stills are always read as sRGB code values.

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. Generated sources have none.

generatorGenerator | null

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

Default: null

has_audioboolean

Whether the media has an audio stream. This is a fact of the file, recorded the same by every host whether or not it can decode the stream; a host that cannot plays the source silent.

Audio always does. A Video source must declare it for its clips on a visual track to contribute to the mix.

Default: false

idrequiredSourceId

Stable source identity.

kindrequiredMediaKind

Media payload domain.

locatorstring

Opaque URI or host locator; the engine does not open it. Required except for Generated and Composition sources.

Default: ""

providerProviderSource | null

The extension provider and settings that supply this source's media 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.

childrenrequiredNode[]

The children, in play order.

durationnumber | null

Length in seconds. Default: the node's own length, 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.

childrenrequiredNode[]

The children, each drawn over the ones before and starting at its own at.

durationnumber | null

Length in seconds. Default: the node's own length, 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, 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.

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 length, 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, 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.

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 length, 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, 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.

preserve_pitchboolean | null

Keeps a video's sound at its pitch when speed is not 1 (time-stretched instead of resampled). Default true.

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.

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 length, 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, or [top, right, bottom, left].

max_linesinteger | null

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

opacitynumber | null

Opacity, 0..=1. Default 1.

shadowsTextShadow[]

Shadows of the glyphs, the first on top, lengths as fractions of the font size (as a text style's shadows).

strokesTextStroke[]

Bands around the glyphs, innermost first, widths as fractions of the font size (as a text style's strokes).

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.

colorRgba | null

The color. Default: the theme's surface.

durationnumber | null

Length in seconds. Default: the node's own length, 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, 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.

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 length, 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.

highlightRgba | null

The color karaoke and pop give the word being said. Default: the theme's accent.

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 depends on the style and the canvas's shape.

speakers{ [name]: SpeakerLook }

Each speaker's look, keyed by a WebVTT voice or a cue's speaker; it overrides the style.

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, 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.

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.

durationnumber | null

Length in seconds. Default: the node's own length, 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, 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.

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 length, 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 (sources, tracks, compositions) at its own times. Overlays only.

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. Ids must not collide with 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.

backgroundRgba | null

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

durationnumber | null

Length in seconds. Default: the node's own length, 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.

backgroundRgba | null

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

durationnumber | null

Length in seconds. Default: the node's own length, 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.

durationnumber | null

Length in seconds. Default: the node's own length, 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.

backgroundRgba | null

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

durationnumber | null

Length in seconds. Default: the node's own length, 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.

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 length, 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.

cornerAlign | null

The corner. Default top-right.

durationnumber | null

Length in seconds. Default: the node's own length, 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.

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 length, 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).

One of:

type: "clip"

The picture of the clip showing the composition: its source at the time-mapped source time, or what its generated source draws.

type: "media"

Another visual source, read at start plus the composition time. 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 plus any named images it samples.

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. An undeclared name, or a declared one left 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 group inputs fed from inputs and controls set from controls.

FieldTypeDescription
compositionrequiredCompositionId

The composition drawn.

controls{ [name]: Animated_EffectValue }

Values for its controls, by name; unset controls keep 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 premultiplied stops in linear light, so a gradient between two colors passes through their physical mix and a stop fading to transparent does not darken its neighbour. A bare color is read as a solid paint; paints are 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 in total.

PathVertex

A path vertex and its tangents. The segment from a to 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 curve's second control point from the previous keyframe, relative to this value.

interpolationrequiredInterpolation

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

out_tangentVec2

The curve's first control point toward the next keyframe, relative to this value.

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 instead of the host's video and image decoders.

A host picks the provider by probing the bytes at import, never by file name, and records it here so every host opens the source the same way. The engine does not read it.

One of:

format: "svg"

A static SVG document, rasterized at its shown size. 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 (JSON file or dotLottie package), evaluated at its own frames. The source's kind is video.

FieldTypeDescription
animationstring | null

The dotLottie animation shown, by ID. Absent means the package's first; always 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 marks a missing number, allowed only when missing says how to show it.

missingMissingFrames

How a missing frame is shown.

Default: "reject"

primariesLinearPrimaries | null

The primaries of OpenEXR frames' linear RGB, overriding the first frame's chromaticities. 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 of its linear RGB, overriding the file's chromaticities (BT.709 when the file has none, as OpenEXR defines).

RangeShape

How selection rises and falls across a Range selector's range.

  • "square" Fully selected inside the range, partly at fractional ends.
  • "ramp_up" Rising from the start to the end.
  • "ramp_down" Falling from the start to the end.
  • "triangle" Rising to the middle, falling after it.
  • "round" A half circle over the range.
  • "smooth" The triangle eased by smoothstep.

RangeUnits

What a Range selector's start, end and offset count in.

  • "percent" Percents of the units.
  • "index" Unit indices.

Rgba

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

Read from the object or CSS hex ("#rgb", "#rgba", "#rrggbb", "#rrggbbaa", any case). Always written back as the object, since components need not be multiples of 1/255.

One of:

object

FieldTypeDescription
alpharequirednumber (float)

Coverage.

bluerequirednumber (float)

Blue component.

greenrequirednumber (float)

Green component.

redrequirednumber (float)

Red component.

string

RunState

Which runs a Timing selector selects.

  • "upcoming" Runs whose time has not started.
  • "active" Runs whose time holds the current time.
  • "spoken" Runs whose time has ended.

RunTime

A run's time span.

FieldTypeDescription
endrequiredMediaTime

When it ends; after start.

startrequiredMediaTime

When it starts.

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; capped at half the rectangle.

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: 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: 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, in 0..=1: 0 sharp, 1 a smooth curve through them.

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

pointsrequiredAnimated_float

Number of points (polygon corners or star tips), from MIN_POLYSTAR_POINTS to MAX_POLYSTAR_POINTS. A fraction is dropped when drawn, as Lottie does, so an animated count changes 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 stroke paints the geometry listed before it in the same group (nested groups included), and a trim cuts and replaces that geometry. Earlier paints draw on top of later ones, 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 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; capped at half the rectangle.

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: 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: 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, in 0..=1: 0 sharp, 1 a smooth curve through them.

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

pointsrequiredAnimated_float

Number of points (polygon corners or star tips), from MIN_POLYSTAR_POINTS to MAX_POLYSTAR_POINTS. A fraction is dropped when drawn, as Lottie does, so an animated count changes 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, as one compound path under rule. Open paths are 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, (1, 1) its bottom-right. Distances (feather, corner_radius, polystar radii) are fractions of that space's shorter side.

FieldTypeDescription
featherAnimated_float

Edge softness, non-negative; zero is the outline's antialiased edge. Coverage is blurred by a Gaussian with standard deviation 0.3125 * feather, a 10-90% ramp of 0.8 * feather.

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, then translate by minus anchor, so anchor lands on position. The default is identity.

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

SpeakerLook

How one speaker's captions look.

FieldTypeDescription
colorRgba | null

Their text color.

positionVec2 | null

Where their text's middle lies, as fractions of the canvas, (0, 0) top-left.

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.

TextAnimator

One animator: what it selects, and what it does to what it selects.

FieldTypeDescription
propertiesTextAnimatorProperties

Applied to each character in proportion to its selection.

Default: {}

selectorrequiredTextSelector

Gives each character its selection, in [0, 1].

TextAnimatorProperties

What an animator does to each character, in proportion to its selection. A property left out does nothing.

FieldTypeDescription
fillAnimated_Rgba | null

The fill color a fully selected character takes; a gradient fill is mixed toward it.

offsetAnimated_Vec2 | null

Moves the character, in font sizes, +y down.

opacityAnimated_float | null

The opacity a fully selected character takes, in [0, 1].

rotation_degreesAnimated_float | null

Turns the character about its centre, clockwise degrees.

scaleAnimated_Vec2 | null

Scales the character about its centre; 1 is none. Each axis in [0, 10].

strokeAnimated_Rgba | null

The color every stroke of a fully selected character takes.

trackingAnimated_float | null

Space added after the character, in font sizes, in [-0.5, 1], as letter spacing adds it. Lines are not re-broken.

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

TextContent

A text: one string, or runs whose texts joined are the text.

Written as "Hello" or [{ "text": "Hel" }, { "text": "lo", "class": ["key"] }].

One of:

string

One string; \n starts a line.

<a href="#textrun">TextRun</a>[]

Runs in order; their texts joined are the text.

TextRole

A theme text style.

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

TextRun

A piece of a text that animators' Class and Timing selectors can pick.

FieldTypeDescription
classstring[]

Names Class selectors match, each 1 to 64 bytes of A-Z, a-z, 0-9, _ and -; at most MAX_RUN_CLASSES.

textrequiredstring

Non-empty; \n starts a line. A grapheme cluster spanning two runs belongs to the run holding its first byte.

timeRunTime | null

When the run is said, from the holder's start (a caption cue's start, or a text generator's picture time zero).

TextSelector

How an animator selects characters.

One of:

type: "range"

A range over the text's units, shaped at its ends, like After Effects' range selector.

FieldTypeDescription
amountAnimated_float

The selection's scale, in [0, 1]. Default 1.

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

based_onTextUnit

What the range counts: characters (the default), non-space characters, words, or lines.

Default: "characters"

endAnimated_float

Where it ends, in the same range. Default 100.

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

offsetAnimated_float

Added to start and end, in the same range. Default 0.

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

shapeRangeShape

How selection rises and falls across the range.

Default: "square"

startAnimated_float

Where the range starts: [-100, 200] percent, or [-N, 2N] units for N of MAX_RANGE_INDEX. Default 0.

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

unitsRangeUnits

Whether start, end and offset are percents of the units (the default) or unit indices.

Default: "percent"

type: "timing"

Characters of timed runs, by the run's time against the current time.

FieldTypeDescription
rampMediaTime

How long the state takes to fade in and out; zero switches.

Default: 0

staterequiredRunState

Which runs it selects: those not yet said, being said, or said.

sweepboolean

Splits each run's span over its characters in order, sweeping the run character by character.

Default: false

type: "class"

Characters of runs that carry a class.

FieldTypeDescription
classrequiredstring

The class name.

TextShadow

A shadow of a text's glyphs and strokes, behind them.

FieldTypeDescription
blurnumber (float)

Blur radius in font sizes, as CSS text-shadow takes it (the Gaussian's standard deviation is half of it). In [0, 1] (MAX_TEXT_SHADOW_BLUR).

Default: 0

colorrequiredRgba

Shadow color.

offsetVec2

Offset in font sizes, +x right, +y down; each component in [-1, 1] (MAX_TEXT_SHADOW_OFFSET).

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

TextStroke

A band around the glyphs and the strokes listed before it, drawn behind them.

FieldTypeDescription
colorrequiredRgba

Band color.

widthrequirednumber (float)

Band width as a fraction of the font size, positive; a text's strokes sum to at most MAX_TEXT_STROKE_EXTENT.

TextStyle

How text looks and where it lies, for caption cues or a text Generator.

The font size is a fraction of the canvas's shorter side, the wrapping width a fraction of the canvas width, and strokes, shadows and padding fractions of the font size. The engine draws with its host's registered fonts, font_family first, then the rest in fallback order.

Painting is bottom to top as in CSS: background boxes, shadows (last listed lowest), strokes (outermost lowest), fill, then color glyphs.

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}

animatorsTextAnimator[]

Per-character motion and color, applied in order, at most MAX_TEXT_ANIMATORS. Keyframes are in the holder's time (since a caption cue's start, or a text generator's picture time). They never change line layout.

backgroundTextBackground | null

A box behind each line.

Default: null

fillPaint

What paints the glyphs; a color reads as a solid paint. Gradient positions are in the text's layout box, (0, 0) top-left to (1, 1) bottom-right, and a radial radius is a fraction of the box's shorter side. Default solid white.

Default: {"color":{"alpha":1,"blue":1,"green":1,"red":1},"type":"s…

font_familystring | null

The family, as the font's name table gives it (typographic family, else family), matched ASCII case-insensitively. Missing glyphs and unknown families fall back to the other fonts in order; None uses 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] used to match a family's faces, as CSS Fonts 4 matches font-weight. Variable faces draw at it, clamped to their wght axis; no face is synthetically emboldened.

Default: 400

letter_spacingnumber (float)

Space after each character, as a fraction of the font size, in [-0.5, 1], added as CSS letter-spacing does: none after a line's last character or within cursive scripts such as Arabic. A non-zero value 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 font sizes above the baseline, 0.2 below) is centred in a taller line.

Default: 1.2

max_widthnumber (float)

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

Default: 0.9

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}

shadowsTextShadow[]

Shadows of the glyphs and strokes, the first on top, as CSS text-shadow lists them. At most MAX_TEXT_SHADOWS.

strokesTextStroke[]

Bands around the glyphs, innermost first, each outside the one before. At most MAX_TEXT_STROKES, widths summing to at most MAX_TEXT_STROKE_EXTENT.

TextStylePatch

Changes to a TextStyle. Each field set replaces the base's whole value (lists are not merged); a field left out keeps the base's.

FieldTypeDescription
alignTextAlign | null

See align.

anchorVec2 | null

See anchor.

animatorsarray | null

See animators.

backgroundTextBackground | null

The box behind each line; null removes the base's.

fillPaint | null

See fill.

font_familystring | null

The family; null draws from the fallback order alone.

font_sizenumber | null

See font_size.

font_weightinteger | null

See font_weight.

letter_spacingnumber | null

See letter_spacing.

line_heightnumber | null

See line_height.

max_widthnumber | null

See max_width.

positionVec2 | null

See position.

shadowsarray | null

See shadows.

strokesarray | null

See strokes.

TextUnit

The units a Range selector counts.

  • "characters" Grapheme clusters, spaces included.
  • "characters_excluding_spaces" Grapheme clusters that are not white space.
  • "words" UAX #29 words that hold a letter or digit; a CJK ideograph is a word.
  • "lines" Laid-out lines.

Theme

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

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

Font family, 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 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 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, in 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 the first frames are presented at, measured from packet times and rounded (alpha2_assets::FrameRateEvidence), when measurable. Declared rates are not used because they are guesses for variable-rate media and browsers report none.

heightrequiredinteger (uint32)

Displayed height in square pixels, after the pixel aspect ratio and orientation.

widthrequiredinteger (uint32)

Displayed width in square pixels, after the pixel aspect ratio and orientation.

VisualProperties

Resolution-independent visual presentation controls for a clip.

Omitted fields default to 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 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}}