moonbit-easings

    A dependency-free MoonBit motion toolkit for media timelines, easing curves, cubic Bezier inversion, and scalar keyframes.

    animation
    easing
    tween
    bezier
    keyframe
    media
    Download zip
    Author
    Version
    0.1.1
    License
    MIT
    Last updated
    2 months ago
    Downloads
    40

    No dependencies

    #moonbit-easings

    MoonBit 数字媒体补间动画与贝塞尔缓动函数库:为 UI 交互、游戏镜头、数字艺术和离线媒体提供可组合、无运行时依赖的运动学基础设施。

    #项目定位

    moonbit-easings 负责“时间、数值和运动轨迹如何变化”,不负责窗口渲染、资源解析或具体 UI 框架。它可以作为渲染器、游戏循环、音视频导出器和交互式编辑器的底层采样层,输出标量、向量、颜色、变换、路径和事件数据。

    项目把 easing、Cubic-Bezier 时间轴求逆、Tween、关键帧轨道、时间线、路径和传输控制放在统一的数据模型中,同时保持核心包不依赖平台 I/O,适合 Wasm、Wasm-GC、JavaScript 和 Native 目标。

    #核心能力

    • 31 个内建 easing:Linear、Quad、Cubic、Quart、Quint、Sine、Expo、Circ、Back、Elastic、Bounce。
    • Bezier::new(x1, y1, x2, y2):缓存采样表、Newton 迭代和二分回退组成稳定的时间轴求逆器。
    • Tween 与 ScalarTrack:支持 delay、repeat、Mirror、Continue、逐段曲线、速度和加速度。
    • 多媒体类型:Point2、Point3、RGBA、Transform2D、颜色渐变、Hermite 和 Catmull-Rom。
    • 轨迹编排:命名标记、MarkerCursor、ScalarTrackBundle、MotionStateMachine、MotionClip 和 ClipSequence。
    • 几何与时间:Spline2D/Spline3D、复合 Path2D、距离采样、投影、边界框和 Piecewise RetimeMap。
    • 离线分析:固定帧率与自适应采样、信号滤波、峰值、积分、单调性、曲线报告和可复现实验入口。

    与只提供基础 easing 函数的包相比,本项目的重点是可直接接入数字媒体工作流的轨道、时间、路径和导出层;它不复制其他生态包的实现,也不绑定 Lottie、Canvas 或某个游戏引擎。

    #快速开始

    要求 MoonBit stable 0.10.9 或更新版本。

    moon add Zlj6566/moonbit-easings

    在 moon.pkg 中导入:

    ///|
    import {
    "Zlj6566/moonbit-easings" @easings,
    }

    最小 Tween 示例:

    let curve = try! @easings.Bezier::new(0.25, 0.1, 0.25, 1.0)
    let tween = try! @easings.Tween::new(
    0.0,
    320.0,
    1.0,
    curve=@easings.Curve::bezier(curve),
    )
    let sample = tween.sample_motion(0.5)
    println(sample.value().to_string())
    println(sample.velocity().to_string())

    #CLI

    仓库提供两个可运行入口:

    # 展示 Tween、关键帧、颜色渐变和序列组合 moon run cmd/demo # 运行可复现的 Native 工作负载并打印校验和 moon run --target native --release cmd/bench

    cmd/bench 不把主机时钟写入库 API;它打印固定迭代次数、采样校验和和自适应采样结果,主机耗时由 BENCHMARKS.md 中的测量命令取得。

    #架构

    Easing / Bezier │ ├── Tween / Keyframe / ScalarTrack │ │ │ ├── Timeline / Bundle / StateMachine │ └── Clip / Sequence / Transport / Markers │ ├── Point / Color / Transform Tracks ├── Spline / Path / RetimeMap └── Sampling / Signal / Diagnostics

    主要模块按职责拆分:easing_*.mbt 与 bezier*.mbt 提供曲线内核;keyframe_*.mbt、tween.mbt 和 timeline.mbt 提供时间数据模型;typed_tracks.mbt、path.mbt、spline.mbt 和 path_geometry.mbt 提供数字媒体值与几何;adaptive_sampling.mbt、signal_processing.mbt 和 curve_analysis.mbt 面向离线导出与质量检查;motion_clip.mbt、motion_transport.mbt、motion_markers.mbt 和 motion_state_machine.mbt 面向运行时编排。

    核心采样函数只在调用者明确请求批量结果时分配输出数组;Bezier 单点采样使用缓存表、Newton 迭代和二分回退,不创建临时采样数组。

    #基准

    基准说明、工具链版本、机器环境、完整输出和重复测量方式见 BENCHMARKS.md。本地执行:

    moon build --target native --release cmd/bench moon run --target native --release cmd/bench

    校验和用于确认不同构建目标实际执行了同一工作负载;墙钟数据不被当作跨机器的绝对性能承诺。

    #测试

    提交前执行完整检查:

    moon fmt --check moon info --target all git diff --exit-code moon check --fmt --deny-warn --target all moon build --target all moon test --deny-warn --target all

    测试覆盖 easing 边界、Bezier 参数求逆、重复和镜像时间、关键帧排序、向量/颜色/变换插值、路径端点、空输入、非法参数、标记方向、轨迹投影、自适应采样、重映射、信号边界和 Native/JS/Wasm 全目标行为。

    #CI

    .github/workflows/test.yml 在 Ubuntu、macOS 和 Windows 上安装官方 MoonBit stable 工具链,执行格式化、moon info 生成物差异检查、全目标检查、全目标构建和全目标测试,并开启 --deny-warn。

    .github/workflows/publish.yml 只在手动触发时验证同一检查链,并使用仓库 Secret 中的 MOONCAKES_TOKEN 发布包;日常 CI 不执行发布。基准程序不进入普通测试矩阵,可按文档在 Native Release 模式单独运行。

    #许可证

    本项目采用 MIT License,见 LICENSE。实现来源和第三方生态边界见 SOURCES.md。

    MotionError

    pub(all) suberror MotionError {
    InvalidBezierX(Double, Double)
    InvalidSampleCount(Int)
    InvalidTime(Double)
    InvalidDuration(Double)
    InvalidDelay(Double)
    InvalidRepeatCount(Int)
    EmptyTrack
    NonIncreasingKeyframe(Double, Double)
    InvalidFrameRate(Double)
    InvalidPointCount(Int)
    InvalidTension(Double)
    InvalidSegmentCount(Int)
    InvalidThreshold(Double)
    InvalidMarkerName
    InvalidChannelName
    InvalidRetimeSegment
    InvalidStateName
    }

    Errors raised while constructing or validating motion primitives.

    AdaptiveSamplePoint

    pub(all) struct AdaptiveSamplePoint {
    time : Double
    value : Double
    depth : Int
    } derive(
    Debug
    )

    A scalar sample with a subdivision depth for diagnostics and renderers.

    AdaptiveSamplePoint::depth

    fn AdaptiveSamplePoint::depth(self : AdaptiveSamplePoint) -> Int

    AdaptiveSamplePoint::time

    fn AdaptiveSamplePoint::time(self : AdaptiveSamplePoint) -> Double

    AdaptiveSamplePoint::value

    fn AdaptiveSamplePoint::value(self : AdaptiveSamplePoint) -> Double

    AdaptiveSampleResult

    pub(all) struct AdaptiveSampleResult {
    points : Array[AdaptiveSamplePoint]
    accepted_segments : Int
    rejected_segments : Int
    maximum_error : Double
    } derive(
    Debug
    )

    Result metadata for an adaptive sample pass.

    AdaptiveSampleResult::accepted_segments

    fn AdaptiveSampleResult::accepted_segments(self : AdaptiveSampleResult) -> Int

    AdaptiveSampleResult::maximum_error

    fn AdaptiveSampleResult::maximum_error(self : AdaptiveSampleResult) -> Double

    AdaptiveSampleResult::points

    AdaptiveSampleResult::rejected_segments

    fn AdaptiveSampleResult::rejected_segments(self : AdaptiveSampleResult) -> Int

    AdaptiveSamplingConfig

    pub struct AdaptiveSamplingConfig {
    tolerance : Double
    max_depth : Int
    max_samples : Int
    } derive(
    Debug
    )

    Controls recursive subdivision of a scalar motion signal.

    AdaptiveSamplingConfig::max_depth

    fn AdaptiveSamplingConfig::max_depth(self : AdaptiveSamplingConfig) -> Int

    AdaptiveSamplingConfig::max_samples

    fn AdaptiveSamplingConfig::max_samples(self : AdaptiveSamplingConfig) -> Int

    AdaptiveSamplingConfig::new

    fn AdaptiveSamplingConfig::new(tolerance : Double, max_depth? : Int, max_samples? : Int) -> AdaptiveSamplingConfig raise MotionError

    AdaptiveSamplingConfig::tolerance

    fn AdaptiveSamplingConfig::tolerance(self : AdaptiveSamplingConfig) -> Double

    Affine2D

    pub struct Affine2D {
    a : Double
    b : Double
    c : Double
    d : Double
    tx : Double
    ty : Double
    } derive(
    Debug
    )

    Compact 2D affine matrix used when many sprites share one transform hierarchy. The six values follow the conventional column-vector form.

    Affine2D::a

    fn Affine2D::a(self : Affine2D) -> Double

    Affine2D::apply

    fn Affine2D::apply(self : Affine2D, point : Point2) -> Point2

    Affine2D::b

    fn Affine2D::b(self : Affine2D) -> Double

    Affine2D::c

    fn Affine2D::c(self : Affine2D) -> Double

    Affine2D::d

    fn Affine2D::d(self : Affine2D) -> Double

    Affine2D::decompose

    fn Affine2D::decompose(self : Affine2D) -> AffineDecomposition2D

    Affine2D::determinant

    fn Affine2D::determinant(self : Affine2D) -> Double

    Affine2D::inverse

    fn Affine2D::inverse(self : Affine2D) -> Affine2D

    Affine2D::lerp

    fn Affine2D::lerp(self : Affine2D, other : Affine2D, ratio : Double) -> Affine2D

    Affine2D::multiply

    fn Affine2D::multiply(self : Affine2D, other : Affine2D) -> Affine2D

    Affine2D::translation

    fn Affine2D::translation(self : Affine2D) -> Point2

    AffineDecomposition2D

    pub struct AffineDecomposition2D {
    position : Point2
    scale : Point2
    rotation : Double
    skew : Double
    determinant : Double
    } derive(
    Debug
    )

    AffineDecomposition2D::determinant

    fn AffineDecomposition2D::determinant(self : AffineDecomposition2D) -> Double

    AffineDecomposition2D::position

    AffineDecomposition2D::rotation

    fn AffineDecomposition2D::rotation(self : AffineDecomposition2D) -> Double

    AffineDecomposition2D::scale

    AffineDecomposition2D::skew

    fn AffineDecomposition2D::skew(self : AffineDecomposition2D) -> Double

    BeatCue

    pub struct BeatCue {
    beat : Double
    label : String
    duration : Double
    strength : Double
    } derive(
    Debug
    )

    BeatCue::beat

    fn BeatCue::beat(self : BeatCue) -> Double

    BeatCue::duration

    fn BeatCue::duration(self : BeatCue) -> Double

    BeatCue::label

    fn BeatCue::label(self : BeatCue) -> String

    BeatCue::seconds

    fn BeatCue::seconds(self : BeatCue, tempo : TempoTimeline) -> Double

    BeatCue::strength

    fn BeatCue::strength(self : BeatCue) -> Double

    BeatGrid

    pub struct BeatGrid {
    tempo : TempoTimeline
    signature : TimeSignature2
    groove : GroovePattern
    } derive(
    Debug
    )

    BeatGrid::bar_index

    fn BeatGrid::bar_index(self : BeatGrid, beat : Double) -> Int

    BeatGrid::bar_start

    fn BeatGrid::bar_start(self : BeatGrid, bar : Int) -> Double

    BeatGrid::beat_to_seconds

    fn BeatGrid::beat_to_seconds(self : BeatGrid, beat : Double) -> Double

    BeatGrid::groove

    fn BeatGrid::groove(self : BeatGrid) -> GroovePattern

    BeatGrid::quantize

    fn BeatGrid::quantize(self : BeatGrid, beat : Double, subdivision : Int) -> Double

    BeatGrid::seconds_to_beat

    fn BeatGrid::seconds_to_beat(self : BeatGrid, seconds : Double) -> Double

    BeatGrid::signature

    fn BeatGrid::signature(self : BeatGrid) -> TimeSignature2

    BeatGrid::tempo

    fn BeatGrid::tempo(self : BeatGrid) -> TempoTimeline

    BeatGrid::with_groove

    fn BeatGrid::with_groove(self : BeatGrid, groove : GroovePattern) -> BeatGrid

    Bezier

    pub struct Bezier {
    x1 : Double
    y1 : Double
    x2 : Double
    y2 : Double
    sample_values : Array[Double]
    } derive(
    Debug
    )

    A cached cubic Bézier timing curve.

    The x controls must lie in [0, 1], while y controls may overshoot for spring-like or expressive motion. Construction builds a small lookup table; evaluation only reads the table and performs scalar arithmetic.

    Bezier::approximate_length

    fn Bezier::approximate_length(self : Bezier, segments : Int) -> Double

    A coarse arc-length estimate in parameter space, useful for diagnostics.

    Bezier::as_easing

    fn Bezier::as_easing(self : Bezier) -> ((Double) -> Double)

    Return the curve as a first-class easing function.

    Bezier::control_points

    fn Bezier::control_points(self : Bezier) -> (Double, Double, Double, Double)

    Bezier::derivative

    fn Bezier::derivative(self : Bezier, x : Double) -> Double

    Derivative dy/dx at a normalized time. A zero x slope returns zero.

    Bezier::max_error

    fn Bezier::max_error(self : Bezier, reference : (Double) -> Double, samples : Int) -> Double

    Return the maximum absolute difference between this curve and a reference.

    Bezier::new

    fn Bezier::new(x1 : Double, y1 : Double, x2 : Double, y2 : Double, sample_count? : Int) -> Bezier raise MotionError

    Construct a cubic timing curve with a cached lookup table.

    Bezier::reversed

    fn Bezier::reversed(self : Bezier) -> Bezier

    Reverse the direction of a cubic timing curve.

    Bezier::sample

    fn Bezier::sample(self : Bezier, x : Double) -> Double

    Evaluate the y coordinate at normalized time x.

    Bezier::sample_many

    fn Bezier::sample_many(self : Bezier, count : Int) -> Array[Double] raise MotionError

    Bezier::solve_time

    fn Bezier::solve_time(self : Bezier, x : Double) -> Double

    Solve the time parameter t for a normalized x coordinate.

    BlendMask2D

    pub struct BlendMask2D {
    values : Array[Double]
    default_weight : Double
    } derive(
    Debug
    )

    BlendMask2D::feather

    fn BlendMask2D::feather(self : BlendMask2D, radius : Int) -> BlendMask2D

    BlendMask2D::length

    fn BlendMask2D::length(self : BlendMask2D) -> Int

    BlendMask2D::multiply

    fn BlendMask2D::multiply(self : BlendMask2D, other : BlendMask2D) -> BlendMask2D

    BlendMask2D::sample

    fn BlendMask2D::sample(self : BlendMask2D, index : Int) -> Double

    BlendMode

    pub enum BlendMode {
    Normal
    Multiply
    Screen
    Overlay
    Additive
    Subtract
    Darken
    Lighten
    Difference
    ColorDodge
    ColorBurn
    } derive(
    Debug
    )

    Porter-Duff and artistic blend modes for compositing animated media.

    Bounds2D

    pub(all) struct Bounds2D {
    minimum : Point2
    maximum : Point2
    } derive(
    Debug
    )

    Axis-aligned bounds for a sampled media path.

    Bounds2D::maximum

    fn Bounds2D::maximum(self : Bounds2D) -> Point2

    Bounds2D::minimum

    fn Bounds2D::minimum(self : Bounds2D) -> Point2

    Bounds3D

    pub struct Bounds3D {
    minimum : Point3
    maximum : Point3
    } derive(
    Debug
    )

    Bounds3D::center

    fn Bounds3D::center(self : Bounds3D) -> Point3

    Bounds3D::contains

    fn Bounds3D::contains(self : Bounds3D, value : Point3) -> Bool

    Bounds3D::expanded

    fn Bounds3D::expanded(self : Bounds3D, amount : Double) -> Bounds3D

    Bounds3D::maximum

    fn Bounds3D::maximum(self : Bounds3D) -> Point3

    Bounds3D::minimum

    fn Bounds3D::minimum(self : Bounds3D) -> Point3

    Bounds3D::size

    fn Bounds3D::size(self : Bounds3D) -> Point3

    Bounds3D::union

    fn Bounds3D::union(self : Bounds3D, other : Bounds3D) -> Bounds3D

    BundleSample

    pub(all) struct BundleSample {
    time : Double
    names : Array[String]
    values : Array[Double]
    weighted_value : Double
    active_weight : Double
    } derive(
    Debug
    )

    The combined result at one timestamp. weighted_value is the normalized blend of enabled channels; individual values remain available for output.

    BundleSample::active_weight

    fn BundleSample::active_weight(self : BundleSample) -> Double

    BundleSample::length

    fn BundleSample::length(self : BundleSample) -> Int

    BundleSample::names

    fn BundleSample::names(self : BundleSample) -> Array[String]

    BundleSample::time

    fn BundleSample::time(self : BundleSample) -> Double

    BundleSample::value_at

    fn BundleSample::value_at(self : BundleSample, index : Int) -> Double?

    BundleSample::value_named

    fn BundleSample::value_named(self : BundleSample, name : String) -> Double?

    BundleSample::values

    fn BundleSample::values(self : BundleSample) -> Array[Double]

    BundleSample::weighted_value

    fn BundleSample::weighted_value(self : BundleSample) -> Double

    CachePool2

    pub struct CachePool2 {
    scalar : Array[ScalarSampleCache2]
    point : Array[PointSampleCache2]
    color : Array[ColorSampleCache2]
    capacity : Int
    } derive(
    Debug
    )

    CachePool2::capacity

    fn CachePool2::capacity(self : CachePool2) -> Int

    CachePool2::clear

    fn CachePool2::clear(self : CachePool2) -> Unit

    CachePool2::color_count

    fn CachePool2::color_count(self : CachePool2) -> Int

    CachePool2::find_color

    fn CachePool2::find_color(self : CachePool2, key : SampleCacheKey2) -> ColorSampleCache2?

    CachePool2::find_point

    fn CachePool2::find_point(self : CachePool2, key : SampleCacheKey2) -> PointSampleCache2?

    CachePool2::find_scalar

    fn CachePool2::find_scalar(self : CachePool2, key : SampleCacheKey2) -> ScalarSampleCache2?

    CachePool2::point_count

    fn CachePool2::point_count(self : CachePool2) -> Int

    CachePool2::put_color

    fn CachePool2::put_color(self : CachePool2, cache : ColorSampleCache2) -> Unit

    CachePool2::put_point

    fn CachePool2::put_point(self : CachePool2, cache : PointSampleCache2) -> Unit

    CachePool2::put_scalar

    fn CachePool2::put_scalar(self : CachePool2, cache : ScalarSampleCache2) -> Unit

    CachePool2::scalar_count

    fn CachePool2::scalar_count(self : CachePool2) -> Int

    CameraFraming2

    pub struct CameraFraming2 {
    center : Point3
    radius : Double
    policy : FramingPolicy2
    margin : Double
    } derive(
    Debug
    )

    CameraFraming2::center

    fn CameraFraming2::center(self : CameraFraming2) -> Point3

    CameraFraming2::effective_radius

    fn CameraFraming2::effective_radius(self : CameraFraming2) -> Double

    CameraFraming2::margin

    fn CameraFraming2::margin(self : CameraFraming2) -> Double

    CameraFraming2::policy

    CameraFraming2::radius

    fn CameraFraming2::radius(self : CameraFraming2) -> Double

    CameraKeyframe

    pub struct CameraKeyframe {
    time : Double
    pose : CameraPose
    lens : CameraLens
    curve : Curve
    } derive(
    Debug
    )

    A camera keyframe carries pose and lens changes as one editorial unit.

    CameraKeyframe::curve

    fn CameraKeyframe::curve(self : CameraKeyframe) -> Curve

    CameraKeyframe::lens

    CameraKeyframe::pose

    CameraKeyframe::time

    fn CameraKeyframe::time(self : CameraKeyframe) -> Double

    CameraLens

    pub struct CameraLens {
    model : ProjectionModel
    field_of_view : Double
    orthographic_height : Double
    near_plane : Double
    far_plane : Double
    aperture : Double
    focus_distance : Double
    } derive(
    Debug
    )

    Lens parameters shared by 2D and 3D camera tracks.

    CameraLens::aperture

    fn CameraLens::aperture(self : CameraLens) -> Double

    CameraLens::far_plane

    fn CameraLens::far_plane(self : CameraLens) -> Double

    CameraLens::field_of_view

    fn CameraLens::field_of_view(self : CameraLens) -> Double

    CameraLens::focus_distance

    fn CameraLens::focus_distance(self : CameraLens) -> Double

    CameraLens::model

    CameraLens::near_plane

    fn CameraLens::near_plane(self : CameraLens) -> Double

    CameraLens::orthographic_height

    fn CameraLens::orthographic_height(self : CameraLens) -> Double

    CameraLens::with_aperture

    fn CameraLens::with_aperture(self : CameraLens, aperture : Double) -> CameraLens

    CameraLens::with_focus_distance

    fn CameraLens::with_focus_distance(self : CameraLens, distance : Double) -> CameraLens

    CameraPose

    pub struct CameraPose {
    position : Point3
    target : Point3
    up : Point3
    roll : Double
    } derive(
    Debug
    )

    A camera pose with an explicit target. Target-based poses are convenient for editorial tools because camera orientation remains stable when the tracked object moves.

    CameraPose::forward

    fn CameraPose::forward(self : CameraPose) -> Point3

    CameraPose::lerp

    fn CameraPose::lerp(self : CameraPose, other : CameraPose, ratio : Double) -> CameraPose

    CameraPose::look_at

    fn CameraPose::look_at(self : CameraPose, target : Point3) -> CameraPose

    CameraPose::position

    fn CameraPose::position(self : CameraPose) -> Point3

    CameraPose::right

    fn CameraPose::right(self : CameraPose) -> Point3

    CameraPose::roll

    fn CameraPose::roll(self : CameraPose) -> Double

    CameraPose::target

    fn CameraPose::target(self : CameraPose) -> Point3

    CameraPose::translated

    fn CameraPose::translated(self : CameraPose, offset : Point3) -> CameraPose

    CameraPose::true_up

    fn CameraPose::true_up(self : CameraPose) -> Point3

    CameraPose::up

    fn CameraPose::up(self : CameraPose) -> Point3

    CameraPostSettings2

    pub struct CameraPostSettings2 {
    safe_margin : Double
    shake : Point2
    exposure : Double
    focus_depth : Double
    vignette : Double
    } derive(
    Debug
    )

    Post-process camera samples with screen-safe and optical policies.

    CameraPostSettings2::exposure

    fn CameraPostSettings2::exposure(self : CameraPostSettings2) -> Double

    CameraPostSettings2::focus_depth

    fn CameraPostSettings2::focus_depth(self : CameraPostSettings2) -> Double

    CameraPostSettings2::safe_margin

    fn CameraPostSettings2::safe_margin(self : CameraPostSettings2) -> Double

    CameraPostSettings2::shake

    CameraPostSettings2::vignette

    fn CameraPostSettings2::vignette(self : CameraPostSettings2) -> Double

    CameraPostSettings2::with_exposure

    fn CameraPostSettings2::with_exposure(self : CameraPostSettings2, value : Double) -> CameraPostSettings2

    CameraPostSettings2::with_focus

    fn CameraPostSettings2::with_focus(self : CameraPostSettings2, value : Double) -> CameraPostSettings2

    CameraPostSettings2::with_safe_margin

    fn CameraPostSettings2::with_safe_margin(self : CameraPostSettings2, value : Double) -> CameraPostSettings2

    CameraPostSettings2::with_shake

    CameraPostSettings2::with_vignette

    fn CameraPostSettings2::with_vignette(self : CameraPostSettings2, value : Double) -> CameraPostSettings2

    CameraRig

    pub struct CameraRig {
    pose : CameraPose
    lens : CameraLens
    viewport : Viewport
    jitter : Point2
    } derive(
    Debug
    )

    A camera rig combines animated pose, lens, and viewport policies.

    CameraRig::dolly_to_fit

    fn CameraRig::dolly_to_fit(self : CameraRig, center : Point3, radius : Double) -> CameraRig

    CameraRig::fit_distance

    fn CameraRig::fit_distance(self : CameraRig, radius : Double) -> Double

    CameraRig::frame_sphere

    fn CameraRig::frame_sphere(self : CameraRig, framing : CameraFraming2) -> CameraRig

    CameraRig::jitter

    fn CameraRig::jitter(self : CameraRig) -> Point2

    CameraRig::lens

    fn CameraRig::lens(self : CameraRig) -> CameraLens

    CameraRig::pose

    fn CameraRig::pose(self : CameraRig) -> CameraPose

    CameraRig::project

    fn CameraRig::project(self : CameraRig, world : Point3) -> Point2

    CameraRig::ray

    fn CameraRig::ray(self : CameraRig, screen : Point2) -> (Point3, Point3)

    CameraRig::unproject

    fn CameraRig::unproject(self : CameraRig, screen : Point2, depth : Double) -> Point3

    CameraRig::viewport

    fn CameraRig::viewport(self : CameraRig) -> Viewport

    CameraRig::visible

    fn CameraRig::visible(self : CameraRig, world : Point3) -> Bool

    CameraRig::with_jitter

    fn CameraRig::with_jitter(self : CameraRig, jitter : Point2) -> CameraRig

    CameraTrack

    pub struct CameraTrack {
    frames : Array[CameraKeyframe]
    viewport : Viewport
    } derive(
    Debug
    )

    CameraTrack::duration

    fn CameraTrack::duration(self : CameraTrack) -> Double

    CameraTrack::end_time

    fn CameraTrack::end_time(self : CameraTrack) -> Double

    CameraTrack::keyframes

    fn CameraTrack::keyframes(self : CameraTrack) -> Array[CameraKeyframe]

    CameraTrack::length

    fn CameraTrack::length(self : CameraTrack) -> Int

    CameraTrack::new

    fn CameraTrack::new(frames : Array[CameraKeyframe], viewport : Viewport) -> CameraTrack raise MotionError

    CameraTrack::sample

    fn CameraTrack::sample(self : CameraTrack, time : Double) -> CameraRig

    CameraTrack::sample_many

    fn CameraTrack::sample_many(self : CameraTrack, count : Int) -> Array[CameraRig] raise MotionError

    CameraTrack::shift

    fn CameraTrack::shift(self : CameraTrack, delta : Double) -> CameraTrack raise MotionError

    CameraTrack::start_time

    fn CameraTrack::start_time(self : CameraTrack) -> Double

    ClipLoopMode

    pub(all) enum ClipLoopMode {
    Once
    Repeat
    PingPong
    } derive(Eq,
    Debug
    )

    Playback policy for a reusable motion clip.

    ClipSequence

    pub struct ClipSequence {
    items : Array[ClipSequenceItem]
    duration : Double
    } derive(
    Debug
    )

    A sequence compositor that averages overlapping clip contributions.

    ClipSequence::duration

    fn ClipSequence::duration(self : ClipSequence) -> Double

    ClipSequence::items

    ClipSequence::length

    fn ClipSequence::length(self : ClipSequence) -> Int

    ClipSequence::markers_between

    fn ClipSequence::markers_between(self : ClipSequence, start : Double, end : Double) -> Array[MarkerHit]

    ClipSequence::new

    ClipSequence::sample

    fn ClipSequence::sample(self : ClipSequence, time : Double) -> Double

    ClipSequence::sample_many

    fn ClipSequence::sample_many(self : ClipSequence, count : Int) -> Array[SamplePoint] raise MotionError

    ClipSequenceBuilder

    pub struct ClipSequenceBuilder {
    items : Array[ClipSequenceItem]
    } derive(
    Debug
    )

    ClipSequenceBuilder::add

    ClipSequenceBuilder::add_at

    fn ClipSequenceBuilder::add_at(self : ClipSequenceBuilder, clip : MotionClip, start : Double, weight? : Double) -> ClipSequenceBuilder raise MotionError

    ClipSequenceBuilder::build

    ClipSequenceBuilder::length

    fn ClipSequenceBuilder::length(self : ClipSequenceBuilder) -> Int

    ClipSequenceBuilder::new

    ClipSequenceItem

    pub struct ClipSequenceItem {
    clip : MotionClip
    start : Double
    weight : Double
    } derive(
    Debug
    )

    A clip placed at a start offset in a larger composition.

    ClipSequenceItem::clip

    ClipSequenceItem::end

    fn ClipSequenceItem::end(self : ClipSequenceItem) -> Double

    ClipSequenceItem::start

    fn ClipSequenceItem::start(self : ClipSequenceItem) -> Double

    ClipSequenceItem::weight

    fn ClipSequenceItem::weight(self : ClipSequenceItem) -> Double

    ColorBlendLayer

    pub struct ColorBlendLayer {
    value : Rgba
    weight : Double
    mode : BlendMode
    priority : Int
    } derive(
    Debug
    )

    ColorBlendLayer::mode

    ColorBlendLayer::value

    fn ColorBlendLayer::value(self : ColorBlendLayer) -> Rgba

    ColorBlendLayer::weight

    fn ColorBlendLayer::weight(self : ColorBlendLayer) -> Double

    ColorGradient

    pub struct ColorGradient {
    stops : Array[GradientStop]
    premultiplied : Bool
    } derive(
    Debug
    )

    A validated one-dimensional color gradient for UI and media rendering.

    ColorGradient::end

    fn ColorGradient::end(self : ColorGradient) -> Double

    ColorGradient::length

    fn ColorGradient::length(self : ColorGradient) -> Int

    ColorGradient::new

    fn ColorGradient::new(stops : Array[GradientStop], premultiplied? : Bool) -> ColorGradient raise MotionError

    ColorGradient::premultiplied

    fn ColorGradient::premultiplied(self : ColorGradient) -> Bool

    ColorGradient::reversed

    fn ColorGradient::reversed(self : ColorGradient) -> ColorGradient

    Return a gradient with the stop order and transition directions reversed.

    ColorGradient::sample

    fn ColorGradient::sample(self : ColorGradient, position : Double) -> Rgba

    Sample the gradient. Values outside its declared range are clamped.

    ColorGradient::sample_many

    fn ColorGradient::sample_many(self : ColorGradient, count : Int) -> Array[Rgba] raise MotionError

    ColorGradient::start

    fn ColorGradient::start(self : ColorGradient) -> Double

    ColorGradient::stops

    ColorMatrix

    pub struct ColorMatrix {
    red : (Double, Double, Double, Double, Double)
    green : (Double, Double, Double, Double, Double)
    blue : (Double, Double, Double, Double, Double)
    alpha : (Double, Double, Double, Double, Double)
    } derive(
    Debug
    )

    ColorMatrix::apply

    fn ColorMatrix::apply(self : ColorMatrix, color : Rgba) -> Rgba

    ColorMatrix::then

    fn ColorMatrix::then(self : ColorMatrix, next : ColorMatrix) -> ColorMatrix

    ColorRamp2

    pub struct ColorRamp2 {
    stops : Array[ColorRampStop]
    interpolation : RampInterpolation
    } derive(
    Debug
    )

    ColorRamp2::length

    fn ColorRamp2::length(self : ColorRamp2) -> Int

    ColorRamp2::new

    fn ColorRamp2::new(stops : Array[ColorRampStop], interpolation? : RampInterpolation) -> ColorRamp2

    ColorRamp2::reversed

    fn ColorRamp2::reversed(self : ColorRamp2) -> ColorRamp2

    ColorRamp2::sample

    fn ColorRamp2::sample(self : ColorRamp2, position : Double) -> Rgba

    ColorRamp2::sample_many

    fn ColorRamp2::sample_many(self : ColorRamp2, count : Int) -> Array[Rgba]

    ColorRamp2::stops

    ColorRampStop

    pub struct ColorRampStop {
    position : Double
    color : Rgba
    } derive(
    Debug
    )

    ColorRampStop::color

    fn ColorRampStop::color(self : ColorRampStop) -> Rgba

    ColorRampStop::position

    fn ColorRampStop::position(self : ColorRampStop) -> Double

    ColorSampleCache2

    pub struct ColorSampleCache2 {
    key : SampleCacheKey2
    values : Array[Rgba]
    } derive(
    Debug
    )

    ColorSampleCache2::key

    ColorSampleCache2::new

    ColorSampleCache2::sample

    fn ColorSampleCache2::sample(self : ColorSampleCache2, time : Double) -> Rgba

    ColorSampleCache2::values

    ColorSeries2

    pub struct ColorSeries2 {
    times : Array[Double]
    values : Array[Rgba]
    } derive(
    Debug
    )

    ColorSeries2::sample

    fn ColorSeries2::sample(self : ColorSeries2, time : Double) -> Rgba

    ConstraintResult2

    pub struct ConstraintResult2 {
    value : Double
    velocity : Double
    acceleration : Double
    status : ConstraintStatus2
    iterations : Int
    error : Double
    } derive(
    Debug
    )

    ConstraintResult2::acceleration

    fn ConstraintResult2::acceleration(self : ConstraintResult2) -> Double

    ConstraintResult2::error

    fn ConstraintResult2::error(self : ConstraintResult2) -> Double

    ConstraintResult2::iterations

    fn ConstraintResult2::iterations(self : ConstraintResult2) -> Int

    ConstraintResult2::status

    ConstraintResult2::value

    fn ConstraintResult2::value(self : ConstraintResult2) -> Double

    ConstraintResult2::velocity

    fn ConstraintResult2::velocity(self : ConstraintResult2) -> Double

    ConstraintSolveConfig

    pub struct ConstraintSolveConfig {
    frame_rate : Double
    limits : MotionLimitProfile2
    preserve_endpoints : Bool
    passes : Int
    } derive(
    Debug
    )

    Discrete constraint solver for a sampled scalar motion signal. It performs forward and backward passes so an edit can honour limits without changing the number of frames requested by the renderer.

    ConstraintSolveConfig::frame_rate

    fn ConstraintSolveConfig::frame_rate(self : ConstraintSolveConfig) -> Double

    ConstraintSolveConfig::limits

    ConstraintSolveConfig::with_endpoints

    fn ConstraintSolveConfig::with_endpoints(self : ConstraintSolveConfig, preserve : Bool) -> ConstraintSolveConfig

    ConstraintSolveConfig::with_passes

    fn ConstraintSolveConfig::with_passes(self : ConstraintSolveConfig, passes : Int) -> ConstraintSolveConfig

    ConstraintSolveResult

    pub struct ConstraintSolveResult {
    values : Array[Double]
    velocities : Array[Double]
    accelerations : Array[Double]
    maximum_error : Double
    iterations : Int
    converged : Bool
    } derive(
    Debug
    )

    ConstraintSolveResult::accelerations

    fn ConstraintSolveResult::accelerations(self : ConstraintSolveResult) -> Array[Double]

    ConstraintSolveResult::converged

    fn ConstraintSolveResult::converged(self : ConstraintSolveResult) -> Bool

    ConstraintSolveResult::iterations

    fn ConstraintSolveResult::iterations(self : ConstraintSolveResult) -> Int

    ConstraintSolveResult::maximum_error

    fn ConstraintSolveResult::maximum_error(self : ConstraintSolveResult) -> Double

    ConstraintSolveResult::values

    fn ConstraintSolveResult::values(self : ConstraintSolveResult) -> Array[Double]

    ConstraintSolveResult::velocities

    fn ConstraintSolveResult::velocities(self : ConstraintSolveResult) -> Array[Double]

    ConstraintStatus2

    pub enum ConstraintStatus2 {
    ConstraintSatisfied
    VelocityLimited
    AccelerationLimited
    JerkLimited
    PositionClamped
    } derive(
    Debug
    )

    CubicPath2D

    pub struct CubicPath2D {
    start : Point2
    control_start : Point2
    control_end : Point2
    end : Point2
    } derive(
    Debug
    )

    A cubic geometric Bézier path. This is separate from Bezier timing curves.

    CubicPath2D::bounds

    fn CubicPath2D::bounds(self : CubicPath2D, segments? : Int) -> Bounds2D

    CubicPath2D::length

    fn CubicPath2D::length(self : CubicPath2D, segments : Int) -> Double

    CubicPath2D::polyline

    fn CubicPath2D::polyline(self : CubicPath2D, segments : Int) -> Array[Point2]

    CubicPath2D::sample

    fn CubicPath2D::sample(self : CubicPath2D, t : Double) -> Point2

    CubicPath2D::sample_by_distance

    fn CubicPath2D::sample_by_distance(self : CubicPath2D, distance : Double, segments? : Int) -> Point2

    CubicPath2D::tangent

    fn CubicPath2D::tangent(self : CubicPath2D, t : Double) -> Point2

    CubicPath3D

    pub struct CubicPath3D {
    start : Point3
    control_start : Point3
    control_end : Point3
    end : Point3
    } derive(
    Debug
    )

    Cubic Bézier geometry in scene space. The timing Curve type is kept separate so geometry can be reused by cameras, particles, and masks.

    CubicPath3D::control_end

    fn CubicPath3D::control_end(self : CubicPath3D) -> Point3

    CubicPath3D::control_start

    fn CubicPath3D::control_start(self : CubicPath3D) -> Point3

    CubicPath3D::curvature

    fn CubicPath3D::curvature(self : CubicPath3D, ratio : Double) -> Double

    CubicPath3D::end

    fn CubicPath3D::end(self : CubicPath3D) -> Point3

    CubicPath3D::length

    fn CubicPath3D::length(self : CubicPath3D, samples : Int) -> Double

    CubicPath3D::polyline

    fn CubicPath3D::polyline(self : CubicPath3D, samples : Int) -> Array[Point3]

    CubicPath3D::sample

    fn CubicPath3D::sample(self : CubicPath3D, ratio : Double) -> Point3

    CubicPath3D::sample_by_distance

    fn CubicPath3D::sample_by_distance(self : CubicPath3D, distance : Double, samples? : Int) -> Point3

    CubicPath3D::start

    fn CubicPath3D::start(self : CubicPath3D) -> Point3

    CubicPath3D::tangent

    fn CubicPath3D::tangent(self : CubicPath3D, ratio : Double) -> Point3

    CueTimeline

    pub struct CueTimeline {
    cues : Array[BeatCue]
    grid : BeatGrid
    } derive(
    Debug
    )

    CueTimeline::add

    fn CueTimeline::add(self : CueTimeline, cue : BeatCue) -> Unit

    CueTimeline::at_seconds

    fn CueTimeline::at_seconds(self : CueTimeline, seconds : Double) -> Array[BeatCue]

    CueTimeline::cues

    fn CueTimeline::cues(self : CueTimeline) -> Array[BeatCue]

    CueTimeline::grid

    fn CueTimeline::grid(self : CueTimeline) -> BeatGrid

    CueTimeline::length

    fn CueTimeline::length(self : CueTimeline) -> Int

    CueTimeline::new

    fn CueTimeline::new(grid : BeatGrid) -> CueTimeline

    CueTimeline::next_after

    fn CueTimeline::next_after(self : CueTimeline, seconds : Double) -> BeatCue?

    CueTimeline::window

    fn CueTimeline::window(self : CueTimeline, start : Double, end : Double) -> Array[BeatCue]

    Curve

    pub(all) enum Curve {
    Builtin(EasingId)
    CubicBezier(Bezier)
    } derive(
    Debug
    )

    A curve selector stored on a keyframe transition.

    Curve::apply

    fn Curve::apply(self : Curve, t : Double) -> Double

    Curve::bezier

    fn Curve::bezier(curve : Bezier) -> Curve

    Curve::builtin

    fn Curve::builtin(id : EasingId) -> Curve

    Curve::derivative

    fn Curve::derivative(self : Curve, t : Double) -> Double

    CurveAnalysisPoint

    pub(all) struct CurveAnalysisPoint {
    time : Double
    value : Double
    velocity : Double
    acceleration : Double
    normalized_value : Double
    } derive(
    Debug
    )

    A sample enriched with first and second derivative estimates.

    CurveAnalysisPoint::acceleration

    fn CurveAnalysisPoint::acceleration(self : CurveAnalysisPoint) -> Double

    CurveAnalysisPoint::normalized_value

    fn CurveAnalysisPoint::normalized_value(self : CurveAnalysisPoint) -> Double

    CurveAnalysisPoint::time

    fn CurveAnalysisPoint::time(self : CurveAnalysisPoint) -> Double

    CurveAnalysisPoint::value

    fn CurveAnalysisPoint::value(self : CurveAnalysisPoint) -> Double

    CurveAnalysisPoint::velocity

    fn CurveAnalysisPoint::velocity(self : CurveAnalysisPoint) -> Double

    CurveChain

    pub struct CurveChain {
    curves : Array[Curve]
    weights : Array[Double]
    total_weight : Double
    } derive(
    Debug
    )

    A piecewise curve used to choreograph a multi-stage motion.

    CurveChain::derivative

    fn CurveChain::derivative(self : CurveChain, t : Double) -> Double

    CurveChain::length

    fn CurveChain::length(self : CurveChain) -> Int

    CurveChain::new

    fn CurveChain::new(curves : Array[Curve], weights? : Array[Double]) -> CurveChain raise MotionError

    CurveChain::sample

    fn CurveChain::sample(self : CurveChain, t : Double) -> Double

    CurveChain::sample_many

    fn CurveChain::sample_many(self : CurveChain, count : Int) -> Array[Double] raise MotionError

    CurveComparison

    pub struct CurveComparison {
    mean_absolute_error : Double
    root_mean_square_error : Double
    maximum_error : Double
    area_error : Double
    correlation : Double
    samples : Int
    } derive(
    Debug
    )

    CurveComparison::area_error

    fn CurveComparison::area_error(self : CurveComparison) -> Double

    CurveComparison::correlation

    fn CurveComparison::correlation(self : CurveComparison) -> Double

    CurveComparison::maximum_error

    fn CurveComparison::maximum_error(self : CurveComparison) -> Double

    CurveComparison::mean_absolute_error

    fn CurveComparison::mean_absolute_error(self : CurveComparison) -> Double

    CurveComparison::root_mean_square_error

    fn CurveComparison::root_mean_square_error(self : CurveComparison) -> Double

    CurveComparison::samples

    fn CurveComparison::samples(self : CurveComparison) -> Int

    CurveEnvelope

    pub struct CurveEnvelope {
    lower : Array[Double]
    upper : Array[Double]
    samples : Int
    } derive(
    Debug
    )

    CurveEnvelope::contains

    fn CurveEnvelope::contains(self : CurveEnvelope, curve : Curve) -> Bool

    CurveEnvelope::lower

    fn CurveEnvelope::lower(self : CurveEnvelope) -> Array[Double]

    CurveEnvelope::samples

    fn CurveEnvelope::samples(self : CurveEnvelope) -> Int

    CurveEnvelope::upper

    fn CurveEnvelope::upper(self : CurveEnvelope) -> Array[Double]

    CurveEnvelope::width_at

    fn CurveEnvelope::width_at(self : CurveEnvelope, time : Double) -> Double

    CurveFeature

    pub enum CurveFeature {
    FeatureStart
    FeatureEnd
    FeaturePeakVelocity
    FeaturePeakAcceleration
    FeatureFirstOvershoot
    FeatureSettlingTime
    } derive(
    Debug
    )

    CurveInvariantReport2

    pub struct CurveInvariantReport2 {
    start_error : Double
    end_error : Double
    maximum_step : Double
    monotonic : Bool
    finite : Bool
    samples : Int
    } derive(
    Debug
    )

    Additional curve invariants for authoring and regression checks.

    CurveInvariantReport2::end_error

    fn CurveInvariantReport2::end_error(self : CurveInvariantReport2) -> Double

    CurveInvariantReport2::finite

    fn CurveInvariantReport2::finite(self : CurveInvariantReport2) -> Bool

    CurveInvariantReport2::maximum_step

    fn CurveInvariantReport2::maximum_step(self : CurveInvariantReport2) -> Double

    CurveInvariantReport2::monotonic

    fn CurveInvariantReport2::monotonic(self : CurveInvariantReport2) -> Bool

    CurveInvariantReport2::samples

    fn CurveInvariantReport2::samples(self : CurveInvariantReport2) -> Int

    CurveInvariantReport2::start_error

    fn CurveInvariantReport2::start_error(self : CurveInvariantReport2) -> Double

    CurveLookupTable

    pub struct CurveLookupTable {
    values : Array[Double]
    derivatives : Array[Double]
    minimum : Double
    maximum : Double
    integral : Double
    } derive(
    Debug
    )

    A uniformly sampled, allocation-free-at-read-time representation of a timing curve. Baking is useful when a render loop evaluates the same curve for thousands of particles or UI properties.

    CurveLookupTable::derivative_at

    fn CurveLookupTable::derivative_at(self : CurveLookupTable, time : Double) -> Double

    CurveLookupTable::derivatives

    fn CurveLookupTable::derivatives(self : CurveLookupTable) -> Array[Double]

    CurveLookupTable::error

    fn CurveLookupTable::error(self : CurveLookupTable, curve : Curve, samples : Int) -> Double

    CurveLookupTable::integral

    fn CurveLookupTable::integral(self : CurveLookupTable) -> Double

    CurveLookupTable::integral_until

    fn CurveLookupTable::integral_until(self : CurveLookupTable, time : Double) -> Double

    CurveLookupTable::inverse

    fn CurveLookupTable::inverse(self : CurveLookupTable, value : Double, iterations? : Int) -> Double

    CurveLookupTable::map_range

    fn CurveLookupTable::map_range(self : CurveLookupTable, input : Double, output_min : Double, output_max : Double) -> Double

    CurveLookupTable::maximum

    fn CurveLookupTable::maximum(self : CurveLookupTable) -> Double

    CurveLookupTable::minimum

    fn CurveLookupTable::minimum(self : CurveLookupTable) -> Double

    CurveLookupTable::monotonic

    fn CurveLookupTable::monotonic(self : CurveLookupTable) -> Bool

    CurveLookupTable::new

    fn CurveLookupTable::new(curve : Curve, samples : Int) -> CurveLookupTable raise MotionError

    CurveLookupTable::normalized

    CurveLookupTable::peak_speed

    fn CurveLookupTable::peak_speed(self : CurveLookupTable) -> (Double, Double)

    CurveLookupTable::range

    fn CurveLookupTable::range(self : CurveLookupTable) -> Double

    CurveLookupTable::resample

    fn CurveLookupTable::resample(self : CurveLookupTable, samples : Int) -> CurveLookupTable raise MotionError

    CurveLookupTable::sample

    fn CurveLookupTable::sample(self : CurveLookupTable, time : Double) -> Double

    CurveLookupTable::sample_smooth

    fn CurveLookupTable::sample_smooth(self : CurveLookupTable, time : Double) -> Double

    CurveLookupTable::samples

    fn CurveLookupTable::samples(self : CurveLookupTable) -> Int

    CurveLookupTable::values

    fn CurveLookupTable::values(self : CurveLookupTable) -> Array[Double]

    CurveLutBank

    pub struct CurveLutBank {
    tables : Array[CurveLookupTable]
    labels : Array[String]
    } derive(
    Debug
    )

    A compact collection of baked curves with shared sample density.

    CurveLutBank::add

    fn CurveLutBank::add(self : CurveLutBank, label : String, curve : Curve, samples : Int) -> Unit raise MotionError

    CurveLutBank::label

    fn CurveLutBank::label(self : CurveLutBank, index : Int) -> String

    CurveLutBank::length

    fn CurveLutBank::length(self : CurveLutBank) -> Int

    CurveLutBank::max_error

    fn CurveLutBank::max_error(self : CurveLutBank, curves : Array[Curve], samples : Int) -> Double

    CurveLutBank::sample

    fn CurveLutBank::sample(self : CurveLutBank, index : Int, time : Double) -> Double

    CurveLutBank::samples

    fn CurveLutBank::samples(self : CurveLutBank, time : Double) -> Array[Double]

    CurveLutBank::table

    fn CurveLutBank::table(self : CurveLutBank, index : Int) -> CurveLookupTable

    CurveLutBuilder

    pub struct CurveLutBuilder {
    curve : Curve
    samples : Int
    adaptive : Bool
    tolerance : Double
    } derive(
    Debug
    )

    CurveLutBuilder::adaptive

    fn CurveLutBuilder::adaptive(self : CurveLutBuilder, enabled : Bool) -> CurveLutBuilder

    CurveLutBuilder::build

    CurveLutBuilder::samples

    fn CurveLutBuilder::samples(self : CurveLutBuilder) -> Int

    CurveLutBuilder::with_samples

    fn CurveLutBuilder::with_samples(self : CurveLutBuilder, samples : Int) -> CurveLutBuilder

    CurveLutBuilder::with_tolerance

    fn CurveLutBuilder::with_tolerance(self : CurveLutBuilder, tolerance : Double) -> CurveLutBuilder

    CurveMonotonicity

    pub(all) enum CurveMonotonicity {
    Increasing
    Decreasing
    Constant
    Mixed
    } derive(Eq,
    Debug
    )

    CurvePipeline2

    pub struct CurvePipeline2 {
    curve : Curve
    stages : Array[CurveStage2]
    } derive(
    Debug
    )

    CurvePipeline2::add

    CurvePipeline2::apply

    fn CurvePipeline2::apply(self : CurvePipeline2, time : Double) -> Double

    CurvePipeline2::bake

    fn CurvePipeline2::bake(self : CurvePipeline2, samples : Int) -> CurveLookupTable raise MotionError

    CurvePipeline2::curve

    fn CurvePipeline2::curve(self : CurvePipeline2) -> Curve

    CurvePipeline2::range

    fn CurvePipeline2::range(self : CurvePipeline2, samples : Int) -> (Double, Double)

    CurvePipeline2::sample_many

    fn CurvePipeline2::sample_many(self : CurvePipeline2, count : Int) -> Array[Double]

    CurvePipeline2::stages

    CurvePipeline2::then

    CurveRemap2

    pub struct CurveRemap2 {
    input_min : Double
    input_max : Double
    output_min : Double
    output_max : Double
    extrapolation : Extrapolation
    } derive(
    Debug
    )

    CurveRemap2::apply

    fn CurveRemap2::apply(self : CurveRemap2, value : Double) -> Double

    CurveRemap2::with_extrapolation

    fn CurveRemap2::with_extrapolation(self : CurveRemap2, mode : Extrapolation) -> CurveRemap2

    CurveReport

    pub(all) struct CurveReport {
    samples : Int
    minimum : Double
    maximum : Double
    endpoint_error : Double
    monotonic : Bool
    peak_velocity : Double
    peak_acceleration : Double
    } derive(
    Debug
    )

    Summary metrics for comparing or previewing a motion curve.

    CurveReport::endpoint_error

    fn CurveReport::endpoint_error(self : CurveReport) -> Double

    CurveReport::is_monotonic

    fn CurveReport::is_monotonic(self : CurveReport) -> Bool

    CurveReport::maximum

    fn CurveReport::maximum(self : CurveReport) -> Double

    CurveReport::minimum

    fn CurveReport::minimum(self : CurveReport) -> Double

    CurveReport::peak_acceleration

    fn CurveReport::peak_acceleration(self : CurveReport) -> Double

    CurveReport::peak_velocity

    fn CurveReport::peak_velocity(self : CurveReport) -> Double

    CurveReport::samples

    fn CurveReport::samples(self : CurveReport) -> Int

    CurveStage2

    pub enum CurveStage2 {
    StageNormalize
    StageClamp(Double, Double)
    StageRemap(Double, Double)
    StageBias(Double)
    StageGain(Double)
    StageQuantize(Int)
    StageMirror
    } derive(
    Debug
    )

    Post-processing stages for combining easing curves with editorial ranges.

    CurveStatistics

    pub struct CurveStatistics {
    minimum : Double
    maximum : Double
    mean : Double
    integral : Double
    peak_velocity : Double
    peak_acceleration : Double
    total_variation : Double
    overshoot : Double
    undershoot : Double
    } derive(
    Debug
    )

    Measured properties of a timing curve over a normalized interval.

    CurveStatistics::integral

    fn CurveStatistics::integral(self : CurveStatistics) -> Double

    CurveStatistics::maximum

    fn CurveStatistics::maximum(self : CurveStatistics) -> Double

    CurveStatistics::mean

    fn CurveStatistics::mean(self : CurveStatistics) -> Double

    CurveStatistics::minimum

    fn CurveStatistics::minimum(self : CurveStatistics) -> Double

    CurveStatistics::monotonic

    fn CurveStatistics::monotonic(self : CurveStatistics) -> Bool

    CurveStatistics::normalized_overshoot

    fn CurveStatistics::normalized_overshoot(self : CurveStatistics) -> Double

    CurveStatistics::overshoot

    fn CurveStatistics::overshoot(self : CurveStatistics) -> Double

    CurveStatistics::peak_acceleration

    fn CurveStatistics::peak_acceleration(self : CurveStatistics) -> Double

    CurveStatistics::peak_velocity

    fn CurveStatistics::peak_velocity(self : CurveStatistics) -> Double

    CurveStatistics::range

    fn CurveStatistics::range(self : CurveStatistics) -> Double

    CurveStatistics::total_variation

    fn CurveStatistics::total_variation(self : CurveStatistics) -> Double

    CurveStatistics::undershoot

    fn CurveStatistics::undershoot(self : CurveStatistics) -> Double

    DiagnosticCode2

    pub enum DiagnosticCode2 {
    EmptyInputDiagnostic
    NonFiniteDiagnostic
    EndpointMismatchDiagnostic
    VelocityLimitDiagnostic
    SamplingErrorDiagnostic
    ColorRangeDiagnostic
    BoundsDiagnostic
    } derive(
    Debug
    )

    DiagnosticIssue2

    pub struct DiagnosticIssue2 {
    severity : DiagnosticSeverity2
    code : DiagnosticCode2
    message : String
    sample_index : Int
    value : Double
    limit : Double
    } derive(
    Debug
    )

    DiagnosticIssue2::code

    DiagnosticIssue2::limit

    fn DiagnosticIssue2::limit(self : DiagnosticIssue2) -> Double

    DiagnosticIssue2::message

    fn DiagnosticIssue2::message(self : DiagnosticIssue2) -> String

    DiagnosticIssue2::sample_index

    fn DiagnosticIssue2::sample_index(self : DiagnosticIssue2) -> Int

    DiagnosticIssue2::severity

    DiagnosticIssue2::value

    fn DiagnosticIssue2::value(self : DiagnosticIssue2) -> Double

    DiagnosticReport2

    pub struct DiagnosticReport2 {
    name : String
    issues : Array[DiagnosticIssue2]
    checked_samples : Int
    duration : Double
    } derive(
    Debug
    )

    DiagnosticReport2::add

    fn DiagnosticReport2::add(self : DiagnosticReport2, issue : DiagnosticIssue2) -> Unit

    DiagnosticReport2::checked_samples

    fn DiagnosticReport2::checked_samples(self : DiagnosticReport2) -> Int

    DiagnosticReport2::duration

    fn DiagnosticReport2::duration(self : DiagnosticReport2) -> Double

    DiagnosticReport2::error_count

    fn DiagnosticReport2::error_count(self : DiagnosticReport2) -> Int

    DiagnosticReport2::issues

    DiagnosticReport2::name

    fn DiagnosticReport2::name(self : DiagnosticReport2) -> String

    DiagnosticReport2::warning_count

    fn DiagnosticReport2::warning_count(self : DiagnosticReport2) -> Int

    DiagnosticReport2::with_measurements

    fn DiagnosticReport2::with_measurements(self : DiagnosticReport2, samples : Int, duration : Double) -> DiagnosticReport2

    DiagnosticSeverity2

    pub enum DiagnosticSeverity2 {
    InfoDiagnostic
    WarningDiagnostic
    ErrorDiagnostic
    } derive(
    Debug
    )

    Structured diagnostics for tooling and CI. Reports contain measurements rather than formatted terminal output so host applications can render warnings in their own UI.

    DiagnosticSummary2

    pub struct DiagnosticSummary2 {
    reports : Int
    errors : Int
    warnings : Int
    samples : Int
    } derive(
    Debug
    )

    DiagnosticSummary2::errors

    fn DiagnosticSummary2::errors(self : DiagnosticSummary2) -> Int

    DiagnosticSummary2::passed

    fn DiagnosticSummary2::passed(self : DiagnosticSummary2) -> Bool

    DiagnosticSummary2::reports

    fn DiagnosticSummary2::reports(self : DiagnosticSummary2) -> Int

    DiagnosticSummary2::samples

    fn DiagnosticSummary2::samples(self : DiagnosticSummary2) -> Int

    DiagnosticSummary2::warnings

    fn DiagnosticSummary2::warnings(self : DiagnosticSummary2) -> Int

    EasingId

    pub(all) enum EasingId {
    Linear
    QuadIn
    QuadOut
    QuadInOut
    CubicIn
    CubicOut
    CubicInOut
    QuartIn
    QuartOut
    QuartInOut
    QuintIn
    QuintOut
    QuintInOut
    SineIn
    SineOut
    SineInOut
    ExpoIn
    ExpoOut
    ExpoInOut
    CircIn
    CircOut
    CircInOut
    BackIn
    BackOut
    BackInOut
    ElasticIn
    ElasticOut
    ElasticInOut
    BounceIn
    BounceOut
    BounceInOut
    } derive(Eq,
    Debug
    )

    Families of easing curves used by a motion timeline.

    EasingId::apply

    fn EasingId::apply(self : EasingId, t : Double) -> Double

    Evaluate a built-in easing curve.

    EasingId::derivative

    fn EasingId::derivative(self : EasingId, t : Double) -> Double

    First derivative of a built-in easing curve on normalized time.

    EvaluationContext2

    pub struct EvaluationContext2 {
    time : Double
    frame : Int
    normalized : Double
    delta : Double
    direction : Int
    } derive(
    Debug
    )

    Unified evaluation context shared by render, audio, and event consumers.

    EvaluationContext2::delta

    fn EvaluationContext2::delta(self : EvaluationContext2) -> Double

    EvaluationContext2::direction

    fn EvaluationContext2::direction(self : EvaluationContext2) -> Int

    EvaluationContext2::frame

    fn EvaluationContext2::frame(self : EvaluationContext2) -> Int

    EvaluationContext2::normalized

    fn EvaluationContext2::normalized(self : EvaluationContext2) -> Double

    EvaluationContext2::time

    fn EvaluationContext2::time(self : EvaluationContext2) -> Double

    EvaluationStats2

    pub struct EvaluationStats2 {
    frames : Int
    active_nodes : Int
    render_passes : Int
    events : Int
    duration : Double
    } derive(
    Debug
    )

    EvaluationStats2::active_nodes

    fn EvaluationStats2::active_nodes(self : EvaluationStats2) -> Int

    EvaluationStats2::duration

    fn EvaluationStats2::duration(self : EvaluationStats2) -> Double

    EvaluationStats2::events

    fn EvaluationStats2::events(self : EvaluationStats2) -> Int

    EvaluationStats2::frames

    fn EvaluationStats2::frames(self : EvaluationStats2) -> Int

    EvaluationStats2::render_passes

    fn EvaluationStats2::render_passes(self : EvaluationStats2) -> Int

    EventWindow2

    pub struct EventWindow2 {
    start : Double
    end : Double
    events : Array[MotionEvent2]
    crossed_forward : Bool
    } derive(
    Debug
    )

    EventWindow2::contains

    fn EventWindow2::contains(self : EventWindow2, time : Double) -> Bool

    EventWindow2::crossed_forward

    fn EventWindow2::crossed_forward(self : EventWindow2) -> Bool

    EventWindow2::end

    fn EventWindow2::end(self : EventWindow2) -> Double

    EventWindow2::events

    EventWindow2::normalized_progress

    fn EventWindow2::normalized_progress(self : EventWindow2, time : Double) -> Double

    EventWindow2::start

    fn EventWindow2::start(self : EventWindow2) -> Double

    ExportChunk2

    pub struct ExportChunk2 {
    start_frame : Int
    end_frame : Int
    start_time : Double
    end_time : Double
    bytes : Int
    } derive(
    Debug
    )

    ExportChunk2::bytes

    fn ExportChunk2::bytes(self : ExportChunk2) -> Int

    ExportChunk2::end_frame

    fn ExportChunk2::end_frame(self : ExportChunk2) -> Int

    ExportChunk2::end_time

    fn ExportChunk2::end_time(self : ExportChunk2) -> Double

    ExportChunk2::start_frame

    fn ExportChunk2::start_frame(self : ExportChunk2) -> Int

    ExportChunk2::start_time

    fn ExportChunk2::start_time(self : ExportChunk2) -> Double

    ExportFormat2

    pub enum ExportFormat2 {
    ImageSequenceExport
    VideoExport
    DataExport
    AudioExport
    } derive(
    Debug
    )

    Backend-neutral export manifest for reproducible media renders.

    ExportManifest2

    pub struct ExportManifest2 {
    settings : ExportSettings2
    entries : Array[ExportManifestEntry2]
    version : Int
    } derive(
    Debug
    )

    ExportManifest2::add

    fn ExportManifest2::add(self : ExportManifest2, entry : ExportManifestEntry2) -> Bool

    ExportManifest2::entries

    ExportManifest2::find

    ExportManifest2::settings

    ExportManifest2::time_range

    fn ExportManifest2::time_range(self : ExportManifest2) -> (Double, Double)

    ExportManifest2::total_frames

    fn ExportManifest2::total_frames(self : ExportManifest2) -> Int

    ExportManifest2::validate

    ExportManifest2::version

    fn ExportManifest2::version(self : ExportManifest2) -> Int

    ExportManifestEntry2

    pub struct ExportManifestEntry2 {
    id : Int
    name : String
    start : Double
    end : Double
    checksum : Int
    frame_count : Int
    } derive(
    Debug
    )

    ExportManifestEntry2::checksum

    fn ExportManifestEntry2::checksum(self : ExportManifestEntry2) -> Int

    ExportManifestEntry2::end

    fn ExportManifestEntry2::end(self : ExportManifestEntry2) -> Double

    ExportManifestEntry2::frame_count

    fn ExportManifestEntry2::frame_count(self : ExportManifestEntry2) -> Int

    ExportManifestEntry2::id

    ExportManifestEntry2::name

    fn ExportManifestEntry2::name(self : ExportManifestEntry2) -> String

    ExportManifestEntry2::start

    fn ExportManifestEntry2::start(self : ExportManifestEntry2) -> Double

    ExportManifestEntry2::with_checksum

    fn ExportManifestEntry2::with_checksum(self : ExportManifestEntry2, checksum : Int) -> ExportManifestEntry2

    ExportSettings2

    pub struct ExportSettings2 {
    format : ExportFormat2
    width : Int
    height : Int
    frame_rate : Double
    quality : RenderQuality2
    premultiplied : Bool
    } derive(
    Debug
    )

    ExportSettings2::format

    ExportSettings2::frame_rate

    fn ExportSettings2::frame_rate(self : ExportSettings2) -> Double

    ExportSettings2::height

    fn ExportSettings2::height(self : ExportSettings2) -> Int

    ExportSettings2::quality

    ExportSettings2::viewport

    fn ExportSettings2::viewport(self : ExportSettings2) -> Viewport

    ExportSettings2::width

    fn ExportSettings2::width(self : ExportSettings2) -> Int

    ExportSettings2::with_premultiplied

    fn ExportSettings2::with_premultiplied(self : ExportSettings2, value : Bool) -> ExportSettings2

    ExportSettings2::with_quality

    fn ExportSettings2::with_quality(self : ExportSettings2, quality : RenderQuality2) -> ExportSettings2

    Extrapolation

    pub(all) enum Extrapolation {
    Clamp
    Repeat
    Mirror
    Continue
    } derive(Eq,
    Debug
    )

    Extrapolation policy for a keyframe track or a tween.

    FieldParticle2

    pub struct FieldParticle2 {
    position : Point2
    velocity : Point2
    age : Double
    lifetime : Double
    } derive(
    Debug
    )

    FieldParticle2::age

    fn FieldParticle2::age(self : FieldParticle2) -> Double

    FieldParticle2::alive

    fn FieldParticle2::alive(self : FieldParticle2) -> Bool

    FieldParticle2::lifetime

    fn FieldParticle2::lifetime(self : FieldParticle2) -> Double

    FieldParticle2::position

    fn FieldParticle2::position(self : FieldParticle2) -> Point2

    FieldParticle2::progress

    fn FieldParticle2::progress(self : FieldParticle2) -> Double

    FieldParticle2::velocity

    fn FieldParticle2::velocity(self : FieldParticle2) -> Point2

    FrameBudget2

    pub struct FrameBudget2 {
    frame_count : Int
    frame_bytes : Int
    total_bytes : Int
    duration : Double
    throughput : Double
    } derive(
    Debug
    )

    Export-time calculations for frame budgets, timecode, and deterministic chunking. These helpers keep host-specific file writing outside the core.

    FrameBudget2::duration

    fn FrameBudget2::duration(self : FrameBudget2) -> Double

    FrameBudget2::estimated_megabytes

    fn FrameBudget2::estimated_megabytes(self : FrameBudget2) -> Double

    FrameBudget2::estimated_seconds

    fn FrameBudget2::estimated_seconds(self : FrameBudget2) -> Double

    FrameBudget2::frame_bytes

    fn FrameBudget2::frame_bytes(self : FrameBudget2) -> Int

    FrameBudget2::frame_count

    fn FrameBudget2::frame_count(self : FrameBudget2) -> Int

    FrameBudget2::throughput

    fn FrameBudget2::throughput(self : FrameBudget2) -> Double

    FrameBudget2::total_bytes

    fn FrameBudget2::total_bytes(self : FrameBudget2) -> Int

    FrameChannel2

    pub enum FrameChannel2 {
    ScalarChannel
    Point2Channel
    Point3Channel
    ColorChannel
    Transform3Channel
    } derive(
    Debug
    )

    FrameClock

    pub struct FrameClock {
    frame_rate : Double
    origin : Double
    } derive(
    Debug
    )

    Frame clock for deterministic media time conversion.

    FrameClock::frame_rate

    fn FrameClock::frame_rate(self : FrameClock) -> Double

    FrameClock::frame_times

    fn FrameClock::frame_times(self : FrameClock, first_frame : Int, last_frame : Int) -> Array[Double]

    FrameClock::frame_to_seconds

    fn FrameClock::frame_to_seconds(self : FrameClock, frame : Int) -> Double

    FrameClock::new

    fn FrameClock::new(frame_rate : Double, origin? : Double) -> FrameClock raise MotionError

    FrameClock::quantize

    fn FrameClock::quantize(self : FrameClock, seconds : Double) -> Double

    FrameClock::seconds_to_frame

    fn FrameClock::seconds_to_frame(self : FrameClock, seconds : Double) -> Int

    FrameDropReport2

    pub struct FrameDropReport2 {
    expected : Int
    actual : Int
    missing : Int
    duplicate : Int
    maximum_gap : Int
    } derive(
    Debug
    )

    FrameDropReport2::actual

    fn FrameDropReport2::actual(self : FrameDropReport2) -> Int

    FrameDropReport2::duplicate

    fn FrameDropReport2::duplicate(self : FrameDropReport2) -> Int

    FrameDropReport2::expected

    fn FrameDropReport2::expected(self : FrameDropReport2) -> Int

    FrameDropReport2::maximum_gap

    fn FrameDropReport2::maximum_gap(self : FrameDropReport2) -> Int

    FrameDropReport2::missing

    fn FrameDropReport2::missing(self : FrameDropReport2) -> Int

    FramePacket2

    pub struct FramePacket2 {
    stamp : FrameStamp2
    scalar_values : Array[Double]
    point_values : Array[Point2]
    point3_values : Array[Point3]
    color_values : Array[Rgba]
    transform_values : Array[Transform3D]
    } derive(
    Debug
    )

    FramePacket2::color_values

    fn FramePacket2::color_values(self : FramePacket2) -> Array[Rgba]

    FramePacket2::point3_values

    fn FramePacket2::point3_values(self : FramePacket2) -> Array[Point3]

    FramePacket2::point_values

    fn FramePacket2::point_values(self : FramePacket2) -> Array[Point2]

    FramePacket2::scalar_values

    fn FramePacket2::scalar_values(self : FramePacket2) -> Array[Double]

    FramePacket2::stamp

    FramePacket2::transform_values

    fn FramePacket2::transform_values(self : FramePacket2) -> Array[Transform3D]

    FramePacket2::with_color

    fn FramePacket2::with_color(self : FramePacket2, value : Rgba) -> FramePacket2

    FramePacket2::with_point

    fn FramePacket2::with_point(self : FramePacket2, value : Point2) -> FramePacket2

    FramePacket2::with_point3

    fn FramePacket2::with_point3(self : FramePacket2, value : Point3) -> FramePacket2

    FramePacket2::with_scalar

    fn FramePacket2::with_scalar(self : FramePacket2, value : Double) -> FramePacket2

    FramePacket2::with_transform

    fn FramePacket2::with_transform(self : FramePacket2, value : Transform3D) -> FramePacket2

    FrameSchedule2

    pub struct FrameSchedule2 {
    start : Double
    end : Double
    frame_rate : Double
    first_frame : Int
    } derive(
    Debug
    )

    Deterministic frame clock for export and offline previews.

    FrameSchedule2::contains

    fn FrameSchedule2::contains(self : FrameSchedule2, time : Double) -> Bool

    FrameSchedule2::duration

    fn FrameSchedule2::duration(self : FrameSchedule2) -> Double

    FrameSchedule2::end

    fn FrameSchedule2::end(self : FrameSchedule2) -> Double

    FrameSchedule2::frame_count

    fn FrameSchedule2::frame_count(self : FrameSchedule2) -> Int

    FrameSchedule2::frame_duration

    fn FrameSchedule2::frame_duration(self : FrameSchedule2) -> Double

    FrameSchedule2::frame_rate

    fn FrameSchedule2::frame_rate(self : FrameSchedule2) -> Double

    FrameSchedule2::index_at

    fn FrameSchedule2::index_at(self : FrameSchedule2, time : Double) -> Int

    FrameSchedule2::stamp

    fn FrameSchedule2::stamp(self : FrameSchedule2, index : Int) -> FrameStamp2

    FrameSchedule2::start

    fn FrameSchedule2::start(self : FrameSchedule2) -> Double

    FrameSchedule2::time_at

    fn FrameSchedule2::time_at(self : FrameSchedule2, index : Int) -> Double

    FrameSchedule2::timestamps

    fn FrameSchedule2::timestamps(self : FrameSchedule2) -> Array[Double]

    FrameStamp2

    pub struct FrameStamp2 {
    index : Int
    time : Double
    duration : Double
    } derive(
    Debug
    )

    FrameStamp2::duration

    fn FrameStamp2::duration(self : FrameStamp2) -> Double

    FrameStamp2::index

    fn FrameStamp2::index(self : FrameStamp2) -> Int

    FrameStamp2::time

    fn FrameStamp2::time(self : FrameStamp2) -> Double

    FrameTable2

    pub struct FrameTable2 {
    schedule : FrameSchedule2
    packets : Array[FramePacket2]
    } derive(
    Debug
    )

    FrameTable2::empty

    fn FrameTable2::empty(schedule : FrameSchedule2) -> FrameTable2

    FrameTable2::from_color

    fn FrameTable2::from_color(schedule : FrameSchedule2, track : RgbaTrack) -> FrameTable2

    FrameTable2::from_point2

    fn FrameTable2::from_point2(schedule : FrameSchedule2, track : Point2Track) -> FrameTable2

    FrameTable2::from_point3

    fn FrameTable2::from_point3(schedule : FrameSchedule2, track : Point3Track) -> FrameTable2

    FrameTable2::from_scalar

    fn FrameTable2::from_scalar(schedule : FrameSchedule2, track : ScalarTrack) -> FrameTable2

    FrameTable2::from_transform3

    fn FrameTable2::from_transform3(schedule : FrameSchedule2, track : Transform3Track) -> FrameTable2

    FrameTable2::length

    fn FrameTable2::length(self : FrameTable2) -> Int

    FrameTable2::map_colors

    fn FrameTable2::map_colors(self : FrameTable2, mapper : (Rgba) -> Rgba) -> FrameTable2

    FrameTable2::packet

    fn FrameTable2::packet(self : FrameTable2, index : Int) -> FramePacket2

    FrameTable2::packets

    fn FrameTable2::packets(self : FrameTable2) -> Array[FramePacket2]

    FrameTable2::schedule

    fn FrameTable2::schedule(self : FrameTable2) -> FrameSchedule2

    FrameTable2::time_range

    fn FrameTable2::time_range(self : FrameTable2) -> (Double, Double)

    FramingPolicy2

    pub enum FramingPolicy2 {
    FitWidthFraming
    FitHeightFraming
    FitBoundsFraming
    FillBoundsFraming
    } derive(
    Debug
    )

    Framing utilities for adapting animated cameras to an output viewport.

    GradientBuilder

    pub struct GradientBuilder {
    stops : Array[GradientStop]
    premultiplied : Bool
    }

    A builder for gradients assembled by an editor or an importer.

    GradientBuilder::add

    fn GradientBuilder::add(self : GradientBuilder, stop : GradientStop) -> Unit

    GradientBuilder::build

    GradientBuilder::new

    fn GradientBuilder::new(premultiplied? : Bool) -> GradientBuilder

    GradientBuilder::remove_at

    fn GradientBuilder::remove_at(self : GradientBuilder, index : Int) -> GradientStop?

    GradientStop

    pub struct GradientStop {
    position : Double
    color : Rgba
    curve : Curve
    } derive(
    Debug
    )

    A color stop whose curve controls the transition to the next stop.

    GradientStop::color

    fn GradientStop::color(self : GradientStop) -> Rgba

    GradientStop::curve

    fn GradientStop::curve(self : GradientStop) -> Curve

    GradientStop::position

    fn GradientStop::position(self : GradientStop) -> Double

    GraphBuildStatus

    pub enum GraphBuildStatus {
    GraphReady
    GraphCycle
    GraphMissingNode
    } derive(
    Debug
    )

    GroovePattern

    pub enum GroovePattern {
    StraightGroove
    SwingGroove(Double)
    TripletGroove
    CustomGroove(Array[Double])
    } derive(
    Debug
    )

    Hsv

    pub(all) struct Hsv {
    hue : Double
    saturation : Double
    value : Double
    alpha : Double
    } derive(
    Debug
    )

    Hue, saturation, value and alpha representation.

    Hsv::alpha

    fn Hsv::alpha(self : Hsv) -> Double

    Hsv::hue

    fn Hsv::hue(self : Hsv) -> Double

    Hsv::saturation

    fn Hsv::saturation(self : Hsv) -> Double

    Hsv::to_rgba

    fn Hsv::to_rgba(self : Hsv) -> Rgba

    Hsv::value

    fn Hsv::value(self : Hsv) -> Double

    JitterSequence2

    pub struct JitterSequence2 {
    source : NoiseSource2
    amplitude : Point2
    frequency : Double
    phase : Point2
    } derive(
    Debug
    )

    JitterSequence2::sample

    fn JitterSequence2::sample(self : JitterSequence2, time : Double) -> Point2

    JitterSequence2::sample_many

    fn JitterSequence2::sample_many(self : JitterSequence2, start : Double, step : Double, count : Int) -> Array[Point2]

    JitterSequence2::with_frequency

    fn JitterSequence2::with_frequency(self : JitterSequence2, frequency : Double) -> JitterSequence2

    JitterSequence2::with_phase

    fn JitterSequence2::with_phase(self : JitterSequence2, phase : Point2) -> JitterSequence2

    JoinStyle2D

    pub enum JoinStyle2D {
    MiterJoin
    RoundJoin
    BevelJoin
    } derive(
    Debug
    )

    Keyframe

    pub struct Keyframe {
    time : Double
    value : Double
    curve : Curve
    } derive(
    Debug
    )

    A scalar keyframe. Its curve controls the segment beginning at this frame.

    Keyframe::curve

    fn Keyframe::curve(self : Keyframe) -> Curve

    Keyframe::time

    fn Keyframe::time(self : Keyframe) -> Double

    Keyframe::value

    fn Keyframe::value(self : Keyframe) -> Double

    KeyframeCleanupReport

    pub struct KeyframeCleanupReport {
    removed : Int
    merged : Int
    adjusted : Int
    maximum_adjustment : Double
    } derive(
    Debug
    )

    KeyframeCleanupReport::adjusted

    fn KeyframeCleanupReport::adjusted(self : KeyframeCleanupReport) -> Int

    KeyframeCleanupReport::maximum_adjustment

    fn KeyframeCleanupReport::maximum_adjustment(self : KeyframeCleanupReport) -> Double

    KeyframeCleanupReport::merged

    KeyframeCleanupReport::removed

    fn KeyframeCleanupReport::removed(self : KeyframeCleanupReport) -> Int

    LayerBlendMode

    pub enum LayerBlendMode {
    OverrideLayer
    AdditiveLayer
    MultiplyLayer
    DifferenceLayer
    } derive(
    Debug
    )

    Layer policy for combining animation sources at a common timestamp.

    MarkerCursor

    pub struct MarkerCursor {
    timeline : MarkerTimeline
    time : Double
    } derive(
    Debug
    )

    A cursor for deterministic marker dispatch in a transport loop.

    MarkerCursor::advance

    fn MarkerCursor::advance(self : MarkerCursor, time : Double) -> Array[MarkerHit]

    MarkerCursor::reset

    fn MarkerCursor::reset(self : MarkerCursor, time? : Double) -> Unit

    MarkerCursor::seek

    fn MarkerCursor::seek(self : MarkerCursor, time : Double) -> Unit

    MarkerCursor::time

    fn MarkerCursor::time(self : MarkerCursor) -> Double

    MarkerCursor::timeline

    fn MarkerCursor::timeline(self : MarkerCursor) -> MarkerTimeline

    MarkerDirection

    pub(all) enum MarkerDirection {
    Forward
    Backward
    } derive(Eq,
    Debug
    )

    Direction of playback when a marker window is traversed.

    MarkerHit

    pub(all) struct MarkerHit {
    marker : MotionMarker
    direction : MarkerDirection
    } derive(
    Debug
    )

    A marker together with the direction in which it was crossed.

    MarkerHit::direction

    fn MarkerHit::direction(self : MarkerHit) -> MarkerDirection

    MarkerHit::marker

    fn MarkerHit::marker(self : MarkerHit) -> MotionMarker

    MarkerHit::name

    fn MarkerHit::name(self : MarkerHit) -> String

    MarkerHit::time

    fn MarkerHit::time(self : MarkerHit) -> Double

    MarkerTimeline

    pub struct MarkerTimeline {
    markers : Array[MotionMarker]
    } derive(
    Debug
    )

    A sorted marker index for transport controls, editors, and event dispatch.

    MarkerTimeline::add

    fn MarkerTimeline::add(self : MarkerTimeline, value : MotionMarker) -> Unit

    MarkerTimeline::at

    fn MarkerTimeline::at(self : MarkerTimeline, time : Double, tolerance? : Double) -> Array[MotionMarker]

    MarkerTimeline::between

    fn MarkerTimeline::between(self : MarkerTimeline, start : Double, end : Double) -> Array[MarkerHit]

    Return markers crossed while moving from start to end. The start boundary is excluded and the end boundary is included.

    MarkerTimeline::duration

    fn MarkerTimeline::duration(self : MarkerTimeline) -> Double

    MarkerTimeline::empty

    MarkerTimeline::find

    fn MarkerTimeline::find(self : MarkerTimeline, name : String) -> Array[MotionMarker]

    MarkerTimeline::length

    fn MarkerTimeline::length(self : MarkerTimeline) -> Int

    MarkerTimeline::markers

    MarkerTimeline::new

    MarkerTimeline::next_after

    fn MarkerTimeline::next_after(self : MarkerTimeline, time : Double) -> MotionMarker?

    MarkerTimeline::previous_before

    fn MarkerTimeline::previous_before(self : MarkerTimeline, time : Double) -> MotionMarker?

    MarkerTimeline::remove_at

    fn MarkerTimeline::remove_at(self : MarkerTimeline, index : Int) -> MotionMarker?

    MarkerTimeline::window

    fn MarkerTimeline::window(self : MarkerTimeline, start : Double, end : Double) -> Array[MarkerHit]

    Matrix4

    pub(all) struct Matrix4 {
    m00 : Double
    m01 : Double
    m02 : Double
    m03 : Double
    m10 : Double
    m11 : Double
    m12 : Double
    m13 : Double
    m20 : Double
    m21 : Double
    m22 : Double
    m23 : Double
    m30 : Double
    m31 : Double
    m32 : Double
    m33 : Double
    } derive(
    Debug
    )

    A 4x4 affine matrix stored in row-major order.

    Matrix4::from_quaternion

    fn Matrix4::from_quaternion(value : Quaternion) -> Matrix4

    Matrix4::identity

    fn Matrix4::identity() -> Matrix4

    Matrix4::multiply

    fn Matrix4::multiply(self : Matrix4, other : Matrix4) -> Matrix4

    Matrix4::scale

    fn Matrix4::scale(value : Point3) -> Matrix4

    Matrix4::transform_point

    fn Matrix4::transform_point(self : Matrix4, value : Point3) -> Point3

    Matrix4::translation

    fn Matrix4::translation(value : Point3) -> Matrix4

    MediaAsset2

    pub struct MediaAsset2 {
    id : Int
    name : String
    kind : MediaKind2
    start : Double
    duration : Double
    bounds : Bounds2D
    tags : Array[String]
    enabled : Bool
    } derive(
    Debug
    )

    MediaAsset2::active_at

    fn MediaAsset2::active_at(self : MediaAsset2, time : Double) -> Bool

    MediaAsset2::bounds

    fn MediaAsset2::bounds(self : MediaAsset2) -> Bounds2D

    MediaAsset2::duration

    fn MediaAsset2::duration(self : MediaAsset2) -> Double

    MediaAsset2::enabled

    fn MediaAsset2::enabled(self : MediaAsset2) -> Bool

    MediaAsset2::end

    fn MediaAsset2::end(self : MediaAsset2) -> Double

    MediaAsset2::id

    fn MediaAsset2::id(self : MediaAsset2) -> Int

    MediaAsset2::kind

    fn MediaAsset2::kind(self : MediaAsset2) -> MediaKind2

    MediaAsset2::name

    fn MediaAsset2::name(self : MediaAsset2) -> String

    MediaAsset2::start

    fn MediaAsset2::start(self : MediaAsset2) -> Double

    MediaAsset2::tags

    fn MediaAsset2::tags(self : MediaAsset2) -> Array[String]

    MediaAsset2::with_enabled

    fn MediaAsset2::with_enabled(self : MediaAsset2, enabled : Bool) -> MediaAsset2

    MediaAsset2::with_tag

    fn MediaAsset2::with_tag(self : MediaAsset2, tag : String) -> MediaAsset2

    MediaCatalog2

    pub struct MediaCatalog2 {
    assets : Array[MediaAsset2]
    revision : Int
    } derive(
    Debug
    )

    MediaCatalog2::active_at

    fn MediaCatalog2::active_at(self : MediaCatalog2, time : Double) -> Array[MediaAsset2]

    MediaCatalog2::add

    fn MediaCatalog2::add(self : MediaCatalog2, asset : MediaAsset2) -> Bool

    MediaCatalog2::assets

    MediaCatalog2::bounds

    fn MediaCatalog2::bounds(self : MediaCatalog2) -> Bounds2D

    MediaCatalog2::filter_kind

    fn MediaCatalog2::filter_kind(self : MediaCatalog2, kind : MediaKind2) -> Array[MediaAsset2]

    MediaCatalog2::find

    fn MediaCatalog2::find(self : MediaCatalog2, id : Int) -> MediaAsset2?

    MediaCatalog2::find_name

    fn MediaCatalog2::find_name(self : MediaCatalog2, name : String) -> Array[MediaAsset2]

    MediaCatalog2::find_tag

    fn MediaCatalog2::find_tag(self : MediaCatalog2, tag : String) -> Array[MediaAsset2]

    MediaCatalog2::length

    fn MediaCatalog2::length(self : MediaCatalog2) -> Int

    MediaCatalog2::remove

    fn MediaCatalog2::remove(self : MediaCatalog2, id : Int) -> Bool

    MediaCatalog2::replace

    fn MediaCatalog2::replace(self : MediaCatalog2, asset : MediaAsset2) -> Bool

    MediaCatalog2::revision

    fn MediaCatalog2::revision(self : MediaCatalog2) -> Int

    MediaCatalog2::shift

    fn MediaCatalog2::shift(self : MediaCatalog2, delta : Double) -> MediaCatalog2

    MediaCatalog2::time_range

    fn MediaCatalog2::time_range(self : MediaCatalog2) -> (Double, Double)

    MediaKind2

    pub enum MediaKind2 {
    VectorAsset
    RasterAsset
    AudioAsset
    CameraAsset
    CompositeAsset
    } derive(
    Debug
    )

    Lightweight asset descriptors for animation tools. The catalog deliberately stores no file handles; it can be serialized by a host application and reused for preview or final export.

    MotionBounds

    pub struct MotionBounds {
    minimum : Double
    maximum : Double
    } derive(
    Debug
    )

    Bounds used to keep generated motion within a safe output range.

    MotionBounds::clamp

    fn MotionBounds::clamp(self : MotionBounds, value : Double) -> Double

    MotionBounds::maximum

    fn MotionBounds::maximum(self : MotionBounds) -> Double

    MotionBounds::minimum

    fn MotionBounds::minimum(self : MotionBounds) -> Double

    MotionBounds::new

    fn MotionBounds::new(minimum : Double, maximum : Double) -> MotionBounds raise MotionError

    MotionBudget2

    pub struct MotionBudget2 {
    maximum_speed : Double
    maximum_acceleration : Double
    maximum_path_length : Double
    } derive(
    Debug
    )

    MotionBudget2::accepts

    fn MotionBudget2::accepts(self : MotionBudget2, metrics : MotionMetrics2) -> Bool

    MotionBudget2::maximum_acceleration

    fn MotionBudget2::maximum_acceleration(self : MotionBudget2) -> Double

    MotionBudget2::maximum_path_length

    fn MotionBudget2::maximum_path_length(self : MotionBudget2) -> Double

    MotionBudget2::maximum_speed

    fn MotionBudget2::maximum_speed(self : MotionBudget2) -> Double

    MotionBudget2::violations

    fn MotionBudget2::violations(self : MotionBudget2, metrics : MotionMetrics2) -> Array[Double]

    MotionClip

    pub struct MotionClip {
    name : String
    track : ScalarTrack
    markers : MarkerTimeline
    loop_mode : ClipLoopMode
    } derive(
    Debug
    )

    A named, timestamped scalar motion clip with optional marker events.

    MotionClip::duration

    fn MotionClip::duration(self : MotionClip) -> Double

    MotionClip::end_time

    fn MotionClip::end_time(self : MotionClip) -> Double

    MotionClip::loop_mode

    fn MotionClip::loop_mode(self : MotionClip) -> ClipLoopMode

    MotionClip::markers

    fn MotionClip::markers(self : MotionClip) -> MarkerTimeline

    MotionClip::markers_between

    fn MotionClip::markers_between(self : MotionClip, start : Double, end : Double) -> Array[MarkerHit]

    MotionClip::name

    fn MotionClip::name(self : MotionClip) -> String

    MotionClip::sample

    fn MotionClip::sample(self : MotionClip, time : Double) -> Double

    MotionClip::sample_many

    fn MotionClip::sample_many(self : MotionClip, count : Int) -> Array[SamplePoint] raise MotionError

    MotionClip::sample_motion

    fn MotionClip::sample_motion(self : MotionClip, time : Double) -> MotionSample

    MotionClip::scale_time

    fn MotionClip::scale_time(self : MotionClip, factor : Double) -> MotionClip raise MotionError

    MotionClip::shift

    fn MotionClip::shift(self : MotionClip, offset : Double) -> MotionClip raise MotionError

    MotionClip::start_time

    fn MotionClip::start_time(self : MotionClip) -> Double

    MotionClip::track

    fn MotionClip::track(self : MotionClip) -> ScalarTrack

    MotionClip::with_loop_mode

    fn MotionClip::with_loop_mode(self : MotionClip, loop_mode : ClipLoopMode) -> MotionClip

    MotionClip::with_markers

    fn MotionClip::with_markers(self : MotionClip, markers : MarkerTimeline) -> MotionClip

    MotionClipLibrary

    pub struct MotionClipLibrary {
    clips : Array[MotionClip]
    } derive(
    Debug
    )

    A small library for resolving named clips at runtime.

    MotionClipLibrary::add

    fn MotionClipLibrary::add(self : MotionClipLibrary, clip : MotionClip) -> Unit

    MotionClipLibrary::clips

    MotionClipLibrary::find

    fn MotionClipLibrary::find(self : MotionClipLibrary, name : String) -> MotionClip?

    MotionClipLibrary::length

    fn MotionClipLibrary::length(self : MotionClipLibrary) -> Int

    MotionClipLibrary::new

    MotionClipLibrary::remove

    fn MotionClipLibrary::remove(self : MotionClipLibrary, name : String) -> MotionClip?

    MotionClipLibrary::total_duration

    fn MotionClipLibrary::total_duration(self : MotionClipLibrary) -> Double

    MotionEvent2

    pub struct MotionEvent2 {
    time : Double
    id : Int
    label : String
    kind : MotionEventKind2
    payload : Double
    consumed : Bool
    } derive(
    Debug
    )

    MotionEvent2::consumed

    fn MotionEvent2::consumed(self : MotionEvent2) -> Bool

    MotionEvent2::id

    fn MotionEvent2::id(self : MotionEvent2) -> Int

    MotionEvent2::kind

    MotionEvent2::label

    fn MotionEvent2::label(self : MotionEvent2) -> String

    MotionEvent2::mark_consumed

    fn MotionEvent2::mark_consumed(self : MotionEvent2) -> MotionEvent2

    MotionEvent2::payload

    fn MotionEvent2::payload(self : MotionEvent2) -> Double

    MotionEvent2::time

    fn MotionEvent2::time(self : MotionEvent2) -> Double

    MotionEventKind2

    pub enum MotionEventKind2 {
    MarkerEvent
    TriggerEvent
    LoopEvent
    EnterEvent
    ExitEvent
    } derive(
    Debug
    )

    Timestamped events for coordinating motion, audio, and render callbacks.

    MotionEventQueue2

    pub struct MotionEventQueue2 {
    events : Array[MotionEvent2]
    cursor : Int
    last_time : Double
    } derive(
    Debug
    )

    MotionEventQueue2::clear

    fn MotionEventQueue2::clear(self : MotionEventQueue2) -> Unit

    MotionEventQueue2::cursor

    fn MotionEventQueue2::cursor(self : MotionEventQueue2) -> Int

    MotionEventQueue2::events

    MotionEventQueue2::length

    fn MotionEventQueue2::length(self : MotionEventQueue2) -> Int

    MotionEventQueue2::peek

    MotionEventQueue2::poll_until

    fn MotionEventQueue2::poll_until(self : MotionEventQueue2, time : Double) -> Array[MotionEvent2]

    MotionEventQueue2::poll_window

    fn MotionEventQueue2::poll_window(self : MotionEventQueue2, start : Double, end : Double) -> Array[MotionEvent2]

    MotionEventQueue2::push

    fn MotionEventQueue2::push(self : MotionEventQueue2, event : MotionEvent2) -> Unit

    MotionEventQueue2::push_many

    fn MotionEventQueue2::push_many(self : MotionEventQueue2, events : Array[MotionEvent2]) -> Unit

    MotionEventQueue2::reset

    fn MotionEventQueue2::reset(self : MotionEventQueue2, time : Double) -> Unit

    MotionLimitProfile2

    pub struct MotionLimitProfile2 {
    maximum_velocity : Double
    maximum_acceleration : Double
    maximum_jerk : Double
    tolerance : Double
    iterations : Int
    } derive(
    Debug
    )

    Limits for production motion sampling. The profile is independent of a solver so the same policy can be used for preview, export, and validation.

    MotionLimitProfile2::iterations

    fn MotionLimitProfile2::iterations(self : MotionLimitProfile2) -> Int

    MotionLimitProfile2::maximum_acceleration

    fn MotionLimitProfile2::maximum_acceleration(self : MotionLimitProfile2) -> Double

    MotionLimitProfile2::maximum_jerk

    fn MotionLimitProfile2::maximum_jerk(self : MotionLimitProfile2) -> Double

    MotionLimitProfile2::maximum_velocity

    fn MotionLimitProfile2::maximum_velocity(self : MotionLimitProfile2) -> Double

    MotionLimitProfile2::tolerance

    fn MotionLimitProfile2::tolerance(self : MotionLimitProfile2) -> Double

    MotionMarker

    pub struct MotionMarker {
    time : Double
    name : String
    payload : String
    } derive(
    Debug
    )

    A named event attached to a motion timeline.

    MotionMarker::name

    fn MotionMarker::name(self : MotionMarker) -> String

    MotionMarker::payload

    fn MotionMarker::payload(self : MotionMarker) -> String

    MotionMarker::time

    fn MotionMarker::time(self : MotionMarker) -> Double

    MotionMetrics2

    pub struct MotionMetrics2 {
    path_length : Double
    peak_speed : Double
    peak_acceleration : Double
    average_speed : Double
    settled_time : Double
    samples : Int
    } derive(
    Debug
    )

    Production-facing motion metrics used to compare export candidates.

    MotionMetrics2::average_speed

    fn MotionMetrics2::average_speed(self : MotionMetrics2) -> Double

    MotionMetrics2::path_length

    fn MotionMetrics2::path_length(self : MotionMetrics2) -> Double

    MotionMetrics2::peak_acceleration

    fn MotionMetrics2::peak_acceleration(self : MotionMetrics2) -> Double

    MotionMetrics2::peak_speed

    fn MotionMetrics2::peak_speed(self : MotionMetrics2) -> Double

    MotionMetrics2::samples

    fn MotionMetrics2::samples(self : MotionMetrics2) -> Int

    MotionMetrics2::settled_time

    fn MotionMetrics2::settled_time(self : MotionMetrics2) -> Double

    MotionReport2

    pub struct MotionReport2 {
    name : String
    metrics : Array[Double]
    budget : MotionBudget2
    quality : RenderQualityMetrics2
    passed : Bool
    } derive(
    Debug
    )

    Human-readable metrics are kept as typed records so dashboards and CI can consume the same result without parsing log text.

    MotionReport2::budget

    MotionReport2::budget_score

    fn MotionReport2::budget_score(self : MotionReport2) -> Double

    MotionReport2::budget_violations

    fn MotionReport2::budget_violations(self : MotionReport2) -> Array[Double]

    MotionReport2::complete

    fn MotionReport2::complete(self : MotionReport2) -> Bool

    MotionReport2::coverage_gap

    fn MotionReport2::coverage_gap(self : MotionReport2) -> Double

    MotionReport2::coverage_ok

    fn MotionReport2::coverage_ok(self : MotionReport2) -> Bool

    MotionReport2::error_budget

    fn MotionReport2::error_budget(self : MotionReport2) -> Double

    MotionReport2::export_score

    fn MotionReport2::export_score(self : MotionReport2) -> Double

    MotionReport2::has_frames

    fn MotionReport2::has_frames(self : MotionReport2) -> Bool

    MotionReport2::has_motion_violation

    fn MotionReport2::has_motion_violation(self : MotionReport2) -> Bool

    MotionReport2::is_actionable

    fn MotionReport2::is_actionable(self : MotionReport2) -> Bool

    MotionReport2::meets_all_budgets

    fn MotionReport2::meets_all_budgets(self : MotionReport2) -> Bool

    MotionReport2::merge

    MotionReport2::metric

    fn MotionReport2::metric(self : MotionReport2, index : Int) -> Double

    MotionReport2::metric_average

    fn MotionReport2::metric_average(self : MotionReport2) -> Double

    MotionReport2::metric_count

    fn MotionReport2::metric_count(self : MotionReport2) -> Int

    MotionReport2::metric_sum

    fn MotionReport2::metric_sum(self : MotionReport2) -> Double

    MotionReport2::metrics

    fn MotionReport2::metrics(self : MotionReport2) -> Array[Double]

    MotionReport2::name

    fn MotionReport2::name(self : MotionReport2) -> String

    MotionReport2::needs_review

    fn MotionReport2::needs_review(self : MotionReport2) -> Bool

    MotionReport2::passed

    fn MotionReport2::passed(self : MotionReport2) -> Bool

    MotionReport2::quality

    MotionReport2::quality_coverage

    fn MotionReport2::quality_coverage(self : MotionReport2) -> Double

    MotionReport2::quality_error

    fn MotionReport2::quality_error(self : MotionReport2) -> Double

    MotionReport2::quality_passed

    fn MotionReport2::quality_passed(self : MotionReport2) -> Bool

    MotionReport2::quality_score

    fn MotionReport2::quality_score(self : MotionReport2) -> Double

    MotionReport2::ready_for_export

    fn MotionReport2::ready_for_export(self : MotionReport2) -> Bool

    MotionReport2::score

    fn MotionReport2::score(self : MotionReport2) -> Double

    MotionReport2::stable

    fn MotionReport2::stable(self : MotionReport2) -> Bool

    MotionReport2::status_code

    fn MotionReport2::status_code(self : MotionReport2) -> Int

    MotionReport2::summary_score

    fn MotionReport2::summary_score(self : MotionReport2) -> Double

    MotionReport2::valid

    fn MotionReport2::valid(self : MotionReport2) -> Bool

    MotionReport2::weighted_score

    fn MotionReport2::weighted_score(self : MotionReport2, motion_weight : Double) -> Double

    MotionSample

    pub(all) struct MotionSample {
    time : Double
    value : Double
    velocity : Double
    acceleration : Double
    } derive(
    Debug
    )

    A compact sample of a scalar motion function.

    MotionSample::acceleration

    fn MotionSample::acceleration(self : MotionSample) -> Double

    MotionSample::value

    fn MotionSample::value(self : MotionSample) -> Double

    MotionSample::velocity

    fn MotionSample::velocity(self : MotionSample) -> Double

    MotionSignal

    pub struct MotionSignal {
    values : Array[Double]
    start : Double
    step : Double
    } derive(
    Debug
    )

    A lightweight signal buffer for post-processing sampled motion data.

    MotionSignal::at

    fn MotionSignal::at(self : MotionSignal, index : Int) -> Double?

    MotionSignal::clamp

    fn MotionSignal::clamp(self : MotionSignal, minimum : Double, maximum : Double) -> MotionSignal

    MotionSignal::duration

    fn MotionSignal::duration(self : MotionSignal) -> Double

    MotionSignal::end

    fn MotionSignal::end(self : MotionSignal) -> Double

    MotionSignal::length

    fn MotionSignal::length(self : MotionSignal) -> Int

    MotionSignal::map

    fn MotionSignal::map(self : MotionSignal, func : (Double) -> Double) -> MotionSignal

    MotionSignal::new

    fn MotionSignal::new(values : Array[Double], start : Double, step : Double) -> MotionSignal raise MotionError

    MotionSignal::offset

    fn MotionSignal::offset(self : MotionSignal, amount : Double) -> MotionSignal

    MotionSignal::reverse

    fn MotionSignal::reverse(self : MotionSignal) -> MotionSignal

    MotionSignal::sample

    fn MotionSignal::sample(self : MotionSignal, time : Double) -> Double

    MotionSignal::sample_many

    fn MotionSignal::sample_many(self : MotionSignal, count : Int) -> Array[SamplePoint] raise MotionError

    MotionSignal::scale

    fn MotionSignal::scale(self : MotionSignal, factor : Double) -> MotionSignal

    MotionSignal::start

    fn MotionSignal::start(self : MotionSignal) -> Double

    MotionSignal::step

    fn MotionSignal::step(self : MotionSignal) -> Double

    MotionSignal::values

    fn MotionSignal::values(self : MotionSignal) -> Array[Double]

    MotionSignal::zip_map

    fn MotionSignal::zip_map(self : MotionSignal, other : MotionSignal, func : (Double, Double) -> Double) -> MotionSignal

    MotionStateMachine

    pub struct MotionStateMachine {
    states : Array[MotionStateNode]
    transitions : Array[MotionStateTransition]
    current : String
    transition_from : String
    transition_to : String
    transition_start : Double
    transition_duration : Double
    transition_curve : Curve
    has_transition : Bool
    } derive(
    Debug
    )

    A transition engine with explicit transport time. State changes are deterministic and do not allocate per sample.

    MotionStateMachine::add_state

    fn MotionStateMachine::add_state(self : MotionStateMachine, state : MotionStateNode) -> Unit raise MotionError

    MotionStateMachine::add_transition

    fn MotionStateMachine::add_transition(self : MotionStateMachine, transition : MotionStateTransition) -> Unit raise MotionError

    MotionStateMachine::complete

    fn MotionStateMachine::complete(self : MotionStateMachine) -> Unit

    MotionStateMachine::current

    fn MotionStateMachine::current(self : MotionStateMachine) -> String

    MotionStateMachine::has_state

    fn MotionStateMachine::has_state(self : MotionStateMachine, name : String) -> Bool

    MotionStateMachine::is_transitioning

    fn MotionStateMachine::is_transitioning(self : MotionStateMachine) -> Bool

    MotionStateMachine::new

    fn MotionStateMachine::new(states : Array[MotionStateNode], transitions? : Array[MotionStateTransition], initial? : String) -> MotionStateMachine raise MotionError

    MotionStateMachine::reset

    fn MotionStateMachine::reset(self : MotionStateMachine, state? : String) -> Unit raise MotionError

    MotionStateMachine::sample

    fn MotionStateMachine::sample(self : MotionStateMachine, now : Double) -> Double

    MotionStateMachine::sample_motion

    fn MotionStateMachine::sample_motion(self : MotionStateMachine, now : Double) -> MotionSample

    MotionStateMachine::state_value

    fn MotionStateMachine::state_value(self : MotionStateMachine, name : String) -> Double?

    MotionStateMachine::states

    MotionStateMachine::transition_to

    fn MotionStateMachine::transition_to(self : MotionStateMachine, target : String, now : Double, duration? : Double, curve? : Curve) -> Unit raise MotionError

    Start a transition at an arbitrary transport timestamp.

    MotionStateMachine::transitions

    MotionStateNode

    pub struct MotionStateNode {
    name : String
    value : Double
    } derive(
    Debug
    )

    A named scalar state used to model interaction modes and animation poses.

    MotionStateNode::name

    fn MotionStateNode::name(self : MotionStateNode) -> String

    MotionStateNode::value

    fn MotionStateNode::value(self : MotionStateNode) -> Double

    MotionStateTransition

    pub struct MotionStateTransition {
    from : String
    to : String
    duration : Double
    curve : Curve
    } derive(
    Debug
    )

    A directed transition between two named motion states.

    MotionStateTransition::curve

    MotionStateTransition::duration

    fn MotionStateTransition::duration(self : MotionStateTransition) -> Double

    MotionStateTransition::from

    fn MotionStateTransition::from(self : MotionStateTransition) -> String

    MotionStateTransition::to

    MotionTransport

    pub struct MotionTransport {
    position : Double
    speed : Double
    status : TransportStatus
    direction : PlaybackDirection
    range : TransportRange
    markers : MarkerTimeline
    } derive(
    Debug
    )

    A stateful transport clock for preview, timeline scrubbing, and export.

    MotionTransport::advance

    fn MotionTransport::advance(self : MotionTransport, delta_seconds : Double) -> Array[MarkerHit] raise MotionError

    Advance the clock and return markers crossed by this step.

    MotionTransport::clone_at

    fn MotionTransport::clone_at(self : MotionTransport, position : Double) -> MotionTransport

    MotionTransport::direction

    MotionTransport::elapsed

    fn MotionTransport::elapsed(self : MotionTransport) -> Double

    MotionTransport::fast_forward

    fn MotionTransport::fast_forward(self : MotionTransport) -> Unit

    MotionTransport::is_at_boundary

    fn MotionTransport::is_at_boundary(self : MotionTransport) -> Bool

    MotionTransport::markers

    MotionTransport::new

    MotionTransport::normalized_position

    fn MotionTransport::normalized_position(self : MotionTransport) -> Double

    MotionTransport::pause

    fn MotionTransport::pause(self : MotionTransport) -> Unit

    MotionTransport::play

    fn MotionTransport::play(self : MotionTransport) -> Unit

    MotionTransport::position

    fn MotionTransport::position(self : MotionTransport) -> Double

    MotionTransport::range

    MotionTransport::remaining

    fn MotionTransport::remaining(self : MotionTransport) -> Double

    MotionTransport::rewind

    fn MotionTransport::rewind(self : MotionTransport) -> Unit

    MotionTransport::seek

    fn MotionTransport::seek(self : MotionTransport, position : Double) -> Unit raise MotionError

    MotionTransport::seek_and_collect

    fn MotionTransport::seek_and_collect(self : MotionTransport, position : Double) -> Array[MarkerHit] raise MotionError

    MotionTransport::set_direction

    fn MotionTransport::set_direction(self : MotionTransport, direction : PlaybackDirection) -> Unit

    MotionTransport::set_speed

    fn MotionTransport::set_speed(self : MotionTransport, speed : Double) -> Unit raise MotionError

    MotionTransport::speed

    fn MotionTransport::speed(self : MotionTransport) -> Double

    MotionTransport::status

    MotionTransport::stop

    fn MotionTransport::stop(self : MotionTransport) -> Unit

    NoiseSource2

    pub struct NoiseSource2 {
    seed : Int
    frequency : Double
    octaves : Int
    persistence : Double
    lacunarity : Double
    } derive(
    Debug
    )

    Deterministic procedural motion primitives. They are seeded explicitly so a preview and a final export produce identical camera shake and particles.

    NoiseSource2::fractal

    fn NoiseSource2::fractal(self : NoiseSource2, x : Double, y : Double) -> Double

    NoiseSource2::frequency

    fn NoiseSource2::frequency(self : NoiseSource2) -> Double

    NoiseSource2::gradient

    fn NoiseSource2::gradient(self : NoiseSource2, x : Double, y : Double, epsilon? : Double) -> Point2

    NoiseSource2::octaves

    fn NoiseSource2::octaves(self : NoiseSource2) -> Int

    NoiseSource2::sample_many

    fn NoiseSource2::sample_many(self : NoiseSource2, count : Int, x : Double, y : Double, step : Double) -> Array[Double]

    NoiseSource2::seed

    fn NoiseSource2::seed(self : NoiseSource2) -> Int

    NoiseSource2::value

    fn NoiseSource2::value(self : NoiseSource2, x : Double, y : Double) -> Double

    NoiseSource2::with_frequency

    fn NoiseSource2::with_frequency(self : NoiseSource2, frequency : Double) -> NoiseSource2

    NoiseSource2::with_lacunarity

    fn NoiseSource2::with_lacunarity(self : NoiseSource2, lacunarity : Double) -> NoiseSource2

    NoiseSource2::with_octaves

    fn NoiseSource2::with_octaves(self : NoiseSource2, octaves : Int) -> NoiseSource2

    NoiseSource2::with_persistence

    fn NoiseSource2::with_persistence(self : NoiseSource2, persistence : Double) -> NoiseSource2

    Palette2

    pub struct Palette2 {
    colors : Array[Rgba]
    name : String
    } derive(
    Debug
    )

    Palette utilities for animated gradients, posterized effects, and export previews.

    Palette2::colors

    fn Palette2::colors(self : Palette2) -> Array[Rgba]

    Palette2::length

    fn Palette2::length(self : Palette2) -> Int

    Palette2::lerp

    fn Palette2::lerp(self : Palette2, other : Palette2, ratio : Double) -> Palette2

    Palette2::map

    fn Palette2::map(self : Palette2, mapper : (Rgba) -> Rgba) -> Palette2

    Palette2::name

    fn Palette2::name(self : Palette2) -> String

    Palette2::nearest

    fn Palette2::nearest(self : Palette2, color : Rgba) -> Rgba

    Palette2::quantize

    fn Palette2::quantize(self : Palette2, color : Rgba) -> PaletteQuantization2

    Palette2::reverse

    fn Palette2::reverse(self : Palette2) -> Palette2

    Palette2::sample

    fn Palette2::sample(self : Palette2, ratio : Double) -> Rgba

    Palette2::with_alpha

    fn Palette2::with_alpha(self : Palette2, alpha : Double) -> Palette2

    PaletteQuantization2

    pub struct PaletteQuantization2 {
    index : Int
    color : Rgba
    error : Double
    } derive(
    Debug
    )

    PaletteQuantization2::color

    PaletteQuantization2::error

    fn PaletteQuantization2::error(self : PaletteQuantization2) -> Double

    PaletteQuantization2::index

    Path2D

    pub struct Path2D {
    segments : Array[PathSegment2D]
    lengths : Array[Double]
    total_length : Double
    } derive(
    Debug
    )

    A length-indexed composition of line and cubic path segments.

    Path2D::append

    fn Path2D::append(self : Path2D, segment : PathSegment2D, samples_per_curve? : Int) -> Path2D raise MotionError

    Path2D::bounds

    fn Path2D::bounds(self : Path2D, samples_per_curve? : Int) -> Bounds2D

    Path2D::end

    fn Path2D::end(self : Path2D) -> Point2

    Path2D::length

    fn Path2D::length(self : Path2D) -> Int

    Path2D::new

    fn Path2D::new(segments : Array[PathSegment2D], samples_per_curve? : Int) -> Path2D raise MotionError

    Path2D::polyline

    fn Path2D::polyline(self : Path2D, samples_per_segment : Int) -> Array[Point2]

    Path2D::project

    fn Path2D::project(self : Path2D, target : Point2, samples_per_segment? : Int) -> SplineProjection

    Approximate the nearest point by scanning each segment's polyline.

    Path2D::sample

    fn Path2D::sample(self : Path2D, parameter : Double) -> Point2

    Path2D::sample_by_distance

    fn Path2D::sample_by_distance(self : Path2D, distance : Double) -> Point2

    Path2D::segments

    fn Path2D::segments(self : Path2D) -> Array[PathSegment2D]

    Path2D::start

    fn Path2D::start(self : Path2D) -> Point2

    Path2D::tangent

    fn Path2D::tangent(self : Path2D, parameter : Double) -> Point2

    Path2D::total_length

    fn Path2D::total_length(self : Path2D) -> Double

    Path2DMetric2

    pub struct Path2DMetric2 {
    length : Double
    bounds : Bounds2D
    samples : Array[Point2]
    average_speed : Double
    chord_error : Double
    } derive(
    Debug
    )

    Higher-level operations for 2D rails and masks.

    Path2DMetric2::average_speed

    fn Path2DMetric2::average_speed(self : Path2DMetric2) -> Double

    Path2DMetric2::bounds

    fn Path2DMetric2::bounds(self : Path2DMetric2) -> Bounds2D

    Path2DMetric2::chord_error

    fn Path2DMetric2::chord_error(self : Path2DMetric2) -> Double

    Path2DMetric2::length

    fn Path2DMetric2::length(self : Path2DMetric2) -> Double

    Path2DMetric2::samples

    fn Path2DMetric2::samples(self : Path2DMetric2) -> Array[Point2]

    Path3D

    pub struct Path3D {
    segments : Array[PathSegment3D]
    lengths : Array[Double]
    total_length : Double
    } derive(
    Debug
    )

    Path3D::append

    fn Path3D::append(self : Path3D, segment : PathSegment3D) -> Path3D raise MotionError

    Path3D::bounds

    fn Path3D::bounds(self : Path3D, samples_per_segment? : Int) -> Bounds3D

    Path3D::curvature

    fn Path3D::curvature(self : Path3D, parameter : Double) -> Double

    Path3D::end

    fn Path3D::end(self : Path3D) -> Point3

    Path3D::length

    fn Path3D::length(self : Path3D) -> Int

    Path3D::new

    fn Path3D::new(segments : Array[PathSegment3D], samples_per_curve? : Int) -> Path3D raise MotionError

    Path3D::polyline

    fn Path3D::polyline(self : Path3D, samples_per_segment : Int) -> Array[Point3]

    Path3D::project

    fn Path3D::project(self : Path3D, target : Point3, samples_per_segment? : Int) -> PathProjection3D

    Path3D::reversed

    fn Path3D::reversed(self : Path3D) -> Path3D raise MotionError

    Path3D::sample

    fn Path3D::sample(self : Path3D, parameter : Double) -> Point3

    Path3D::sample_by_distance

    fn Path3D::sample_by_distance(self : Path3D, distance : Double) -> Point3

    Path3D::sample_many

    fn Path3D::sample_many(self : Path3D, count : Int) -> Array[Point3] raise MotionError

    Path3D::segments

    fn Path3D::segments(self : Path3D) -> Array[PathSegment3D]

    Path3D::start

    fn Path3D::start(self : Path3D) -> Point3

    Path3D::tangent

    fn Path3D::tangent(self : Path3D, parameter : Double) -> Point3

    Path3D::total_length

    fn Path3D::total_length(self : Path3D) -> Double

    PathBuilder2D

    pub struct PathBuilder2D {
    current : Point2
    segments : Array[PathSegment2D]
    } derive(
    Debug
    )

    Builder for paths constructed from a start point and successive endpoints.

    PathBuilder2D::build

    fn PathBuilder2D::build(self : PathBuilder2D, samples_per_curve? : Int) -> Path2D raise MotionError

    PathBuilder2D::close

    fn PathBuilder2D::close(self : PathBuilder2D) -> Unit

    PathBuilder2D::cubic_to

    fn PathBuilder2D::cubic_to(self : PathBuilder2D, control_start : Point2, control_end : Point2, end : Point2) -> Unit

    PathBuilder2D::current

    fn PathBuilder2D::current(self : PathBuilder2D) -> Point2

    PathBuilder2D::length

    fn PathBuilder2D::length(self : PathBuilder2D) -> Int

    PathBuilder2D::line_to

    fn PathBuilder2D::line_to(self : PathBuilder2D, end : Point2) -> Unit

    PathBuilder3D

    pub struct PathBuilder3D {
    current : Point3
    segments : Array[PathSegment3D]
    } derive(
    Debug
    )

    PathBuilder3D::build

    fn PathBuilder3D::build(self : PathBuilder3D, samples_per_curve? : Int) -> Path3D raise MotionError

    PathBuilder3D::close

    fn PathBuilder3D::close(self : PathBuilder3D) -> Unit

    PathBuilder3D::cubic_to

    fn PathBuilder3D::cubic_to(self : PathBuilder3D, control_start : Point3, control_end : Point3, end : Point3) -> Unit

    PathBuilder3D::current

    fn PathBuilder3D::current(self : PathBuilder3D) -> Point3

    PathBuilder3D::line_to

    fn PathBuilder3D::line_to(self : PathBuilder3D, end : Point3) -> Unit

    PathFrame3D

    pub struct PathFrame3D {
    position : Point3
    tangent : Point3
    normal : Point3
    binormal : Point3
    } derive(
    Debug
    )

    PathFrame3D::binormal

    fn PathFrame3D::binormal(self : PathFrame3D) -> Point3

    PathFrame3D::look_target

    fn PathFrame3D::look_target(self : PathFrame3D, distance : Double) -> Point3

    PathFrame3D::normal

    fn PathFrame3D::normal(self : PathFrame3D) -> Point3

    PathFrame3D::offset

    fn PathFrame3D::offset(self : PathFrame3D, horizontal : Double, vertical : Double) -> Point3

    PathFrame3D::position

    fn PathFrame3D::position(self : PathFrame3D) -> Point3

    PathFrame3D::tangent

    fn PathFrame3D::tangent(self : PathFrame3D) -> Point3

    PathMetricProfile3D

    pub struct PathMetricProfile3D {
    samples : Array[PathSample3D]
    total_length : Double
    maximum_curvature : Double
    average_curvature : Double
    } derive(
    Debug
    )

    PathMetricProfile3D::average_curvature

    fn PathMetricProfile3D::average_curvature(self : PathMetricProfile3D) -> Double

    PathMetricProfile3D::max_speed

    fn PathMetricProfile3D::max_speed(self : PathMetricProfile3D) -> Double

    PathMetricProfile3D::maximum_curvature

    fn PathMetricProfile3D::maximum_curvature(self : PathMetricProfile3D) -> Double

    PathMetricProfile3D::sample

    fn PathMetricProfile3D::sample(self : PathMetricProfile3D, parameter : Double) -> PathSample3D

    PathMetricProfile3D::samples

    PathMetricProfile3D::total_length

    fn PathMetricProfile3D::total_length(self : PathMetricProfile3D) -> Double

    PathProjection3D

    pub struct PathProjection3D {
    parameter : Double
    distance : Double
    value : Point3
    error : Double
    } derive(
    Debug
    )

    PathProjection3D::distance

    fn PathProjection3D::distance(self : PathProjection3D) -> Double

    PathProjection3D::error

    fn PathProjection3D::error(self : PathProjection3D) -> Double

    PathProjection3D::parameter

    fn PathProjection3D::parameter(self : PathProjection3D) -> Double

    PathProjection3D::value

    PathSample3D

    pub struct PathSample3D {
    parameter : Double
    distance : Double
    position : Point3
    tangent : Point3
    normal : Point3
    curvature : Double
    } derive(
    Debug
    )

    Differential samples for camera rails and particle emitters.

    PathSample3D::curvature

    fn PathSample3D::curvature(self : PathSample3D) -> Double

    PathSample3D::distance

    fn PathSample3D::distance(self : PathSample3D) -> Double

    PathSample3D::normal

    fn PathSample3D::normal(self : PathSample3D) -> Point3

    PathSample3D::parameter

    fn PathSample3D::parameter(self : PathSample3D) -> Double

    PathSample3D::position

    fn PathSample3D::position(self : PathSample3D) -> Point3

    PathSample3D::tangent

    fn PathSample3D::tangent(self : PathSample3D) -> Point3

    PathSegment2D

    pub(all) enum PathSegment2D {
    Line(Point2, Point2)
    Cubic(CubicPath2D)
    } derive(
    Debug
    )

    Geometric segment types that can be composed into a renderable path.

    PathSegment2D::bounds

    fn PathSegment2D::bounds(self : PathSegment2D, samples? : Int) -> Bounds2D

    PathSegment2D::polyline

    fn PathSegment2D::polyline(self : PathSegment2D, samples : Int) -> Array[Point2]

    PathSegment3D

    pub enum PathSegment3D {
    Line3D(Point3, Point3)
    Cubic3D(CubicPath3D)
    } derive(
    Debug
    )

    PathSegment3D::curvature

    fn PathSegment3D::curvature(self : PathSegment3D, ratio : Double) -> Double

    PathSegment3D::end

    PathSegment3D::length

    fn PathSegment3D::length(self : PathSegment3D, samples : Int) -> Double

    PathSegment3D::polyline

    fn PathSegment3D::polyline(self : PathSegment3D, samples : Int) -> Array[Point3]

    PathSegment3D::sample

    fn PathSegment3D::sample(self : PathSegment3D, ratio : Double) -> Point3

    PathSegment3D::start

    fn PathSegment3D::start(self : PathSegment3D) -> Point3

    PathSegment3D::tangent

    fn PathSegment3D::tangent(self : PathSegment3D, ratio : Double) -> Point3

    PlaybackDirection

    pub(all) enum PlaybackDirection {
    Forward
    Reverse
    } derive(Eq,
    Debug
    )

    Direction of a transport clock.

    Point2

    pub(all) struct Point2 {
    x : Double
    y : Double
    } derive(
    Debug
    )

    Two-dimensional point for UI and 2D media transforms.

    Point2::distance

    fn Point2::distance(self : Point2, other : Point2) -> Double

    Point2::lerp

    fn Point2::lerp(self : Point2, other : Point2, t : Double) -> Point2

    Point2::x

    fn Point2::x(self : Point2) -> Double

    Point2::y

    fn Point2::y(self : Point2) -> Double

    Point2BlendLayer

    pub struct Point2BlendLayer {
    value : Point2
    weight : Double
    mode : LayerBlendMode
    priority : Int
    } derive(
    Debug
    )

    Point2BlendLayer::mode

    Point2BlendLayer::priority

    fn Point2BlendLayer::priority(self : Point2BlendLayer) -> Int

    Point2BlendLayer::value

    Point2BlendLayer::weight

    fn Point2BlendLayer::weight(self : Point2BlendLayer) -> Double

    Point2ConstraintResult

    pub struct Point2ConstraintResult {
    value : Point2
    velocity : Point2
    acceleration : Point2
    status : ConstraintStatus2
    error : Double
    } derive(
    Debug
    )

    Point2ConstraintResult::acceleration

    Point2ConstraintResult::error

    Point2ConstraintResult::status

    Point2ConstraintResult::value

    Point2ConstraintResult::velocity

    Point2Keyframe

    pub struct Point2Keyframe {
    time : Double
    value : Point2
    curve : Curve
    } derive(
    Debug
    )

    A point keyframe for UI, camera, and sprite motion tracks.

    Point2Keyframe::curve

    fn Point2Keyframe::curve(self : Point2Keyframe) -> Curve

    Point2Keyframe::time

    fn Point2Keyframe::time(self : Point2Keyframe) -> Double

    Point2Keyframe::value

    fn Point2Keyframe::value(self : Point2Keyframe) -> Point2

    Point2Track

    pub struct Point2Track {
    frames : Array[Point2Keyframe]
    } derive(
    Debug
    )

    A validated 2D point track with the same boundary policies as ScalarTrack.

    Point2Track::duration

    fn Point2Track::duration(self : Point2Track) -> Double

    Point2Track::end_time

    fn Point2Track::end_time(self : Point2Track) -> Double

    Point2Track::keyframes

    fn Point2Track::keyframes(self : Point2Track) -> Array[Point2Keyframe]

    Point2Track::length

    fn Point2Track::length(self : Point2Track) -> Int

    Point2Track::new

    Point2Track::sample

    fn Point2Track::sample(self : Point2Track, time : Double, mode? : Extrapolation) -> Point2

    Point2Track::sample_many

    fn Point2Track::sample_many(self : Point2Track, count : Int, mode? : Extrapolation) -> Array[Point2] raise MotionError

    Point2Track::start_time

    fn Point2Track::start_time(self : Point2Track) -> Double

    Point3

    pub(all) struct Point3 {
    x : Double
    y : Double
    z : Double
    } derive(
    Debug
    )

    Three-dimensional point for camera, scene, and 3D keyframe data.

    Point3::lerp

    fn Point3::lerp(self : Point3, other : Point3, t : Double) -> Point3

    Point3::x

    fn Point3::x(self : Point3) -> Double

    Point3::y

    fn Point3::y(self : Point3) -> Double

    Point3::z

    fn Point3::z(self : Point3) -> Double

    Point3BlendLayer

    pub struct Point3BlendLayer {
    value : Point3
    weight : Double
    mode : LayerBlendMode
    priority : Int
    } derive(
    Debug
    )

    Point3BlendLayer::mode

    Point3BlendLayer::priority

    fn Point3BlendLayer::priority(self : Point3BlendLayer) -> Int

    Point3BlendLayer::value

    Point3BlendLayer::weight

    fn Point3BlendLayer::weight(self : Point3BlendLayer) -> Double

    Point3ConstraintResult

    pub struct Point3ConstraintResult {
    value : Point3
    velocity : Point3
    acceleration : Point3
    status : ConstraintStatus2
    error : Double
    } derive(
    Debug
    )

    Point3ConstraintResult::acceleration

    Point3ConstraintResult::error

    Point3ConstraintResult::status

    Point3ConstraintResult::value

    Point3ConstraintResult::velocity

    Point3Keyframe

    pub struct Point3Keyframe {
    time : Double
    value : Point3
    curve : Curve
    } derive(
    Debug
    )

    A 3D keyframe for camera and scene transforms.

    Point3Keyframe::curve

    fn Point3Keyframe::curve(self : Point3Keyframe) -> Curve

    Point3Keyframe::time

    fn Point3Keyframe::time(self : Point3Keyframe) -> Double

    Point3Keyframe::value

    fn Point3Keyframe::value(self : Point3Keyframe) -> Point3

    Point3Track

    pub struct Point3Track {
    frames : Array[Point3Keyframe]
    } derive(
    Debug
    )

    Point3Track::duration

    fn Point3Track::duration(self : Point3Track) -> Double

    Point3Track::end_time

    fn Point3Track::end_time(self : Point3Track) -> Double

    Point3Track::keyframes

    fn Point3Track::keyframes(self : Point3Track) -> Array[Point3Keyframe]

    Point3Track::length

    fn Point3Track::length(self : Point3Track) -> Int

    Point3Track::new

    Point3Track::sample

    fn Point3Track::sample(self : Point3Track, time : Double, mode? : Extrapolation) -> Point3

    Point3Track::sample_many

    fn Point3Track::sample_many(self : Point3Track, count : Int, mode? : Extrapolation) -> Array[Point3] raise MotionError

    Point3Track::start_time

    fn Point3Track::start_time(self : Point3Track) -> Double

    PointSampleCache2

    pub struct PointSampleCache2 {
    key : SampleCacheKey2
    values : Array[Point2]
    } derive(
    Debug
    )

    PointSampleCache2::key

    PointSampleCache2::new

    PointSampleCache2::sample

    fn PointSampleCache2::sample(self : PointSampleCache2, time : Double) -> Point2

    PointSampleCache2::values

    PointSeries2

    pub struct PointSeries2 {
    times : Array[Double]
    values : Array[Point2]
    } derive(
    Debug
    )

    PointSeries2::resample

    fn PointSeries2::resample(self : PointSeries2, count : Int) -> PointSeries2

    PointSeries2::sample

    fn PointSeries2::sample(self : PointSeries2, time : Double) -> Point2

    PointSeries2::speed

    fn PointSeries2::speed(self : PointSeries2) -> Array[Double]

    PointSeries2::times

    fn PointSeries2::times(self : PointSeries2) -> Array[Double]

    PointSeries2::values

    fn PointSeries2::values(self : PointSeries2) -> Array[Point2]

    Polygon2D

    pub struct Polygon2D {
    vertices : Array[Point2]
    } derive(
    Debug
    )

    Polygon2D::area

    fn Polygon2D::area(self : Polygon2D) -> Double

    Polygon2D::bounds

    fn Polygon2D::bounds(self : Polygon2D) -> Bounds2D

    Polygon2D::centroid

    fn Polygon2D::centroid(self : Polygon2D) -> Point2

    Polygon2D::clockwise

    fn Polygon2D::clockwise(self : Polygon2D) -> Bool

    Polygon2D::contains

    fn Polygon2D::contains(self : Polygon2D, point : Point2) -> Bool

    Polygon2D::length

    fn Polygon2D::length(self : Polygon2D) -> Int

    Polygon2D::perimeter

    fn Polygon2D::perimeter(self : Polygon2D) -> Double

    Polygon2D::reversed

    fn Polygon2D::reversed(self : Polygon2D) -> Polygon2D

    Polygon2D::signed_area

    fn Polygon2D::signed_area(self : Polygon2D) -> Double

    Polygon2D::vertices

    fn Polygon2D::vertices(self : Polygon2D) -> Array[Point2]

    Polyline2D

    pub struct Polyline2D {
    points : Array[Point2]
    closed : Bool
    } derive(
    Debug
    )

    A mutable-free polyline view used by editors, masks, and path analysis.

    Polyline2D::bounds

    fn Polyline2D::bounds(self : Polyline2D) -> Bounds2D

    Polyline2D::closed

    fn Polyline2D::closed(self : Polyline2D) -> Bool

    Polyline2D::length

    fn Polyline2D::length(self : Polyline2D) -> Int

    Polyline2D::points

    fn Polyline2D::points(self : Polyline2D) -> Array[Point2]

    Polyline2D::project

    fn Polyline2D::project(self : Polyline2D, target : Point2) -> PolylineProjection2D

    Polyline2D::resample

    fn Polyline2D::resample(self : Polyline2D, count : Int) -> Polyline2D

    Polyline2D::sample_by_distance

    fn Polyline2D::sample_by_distance(self : Polyline2D, distance : Double) -> Point2

    Polyline2D::simplify

    fn Polyline2D::simplify(self : Polyline2D, tolerance : Double) -> Polyline2D

    Polyline2D::total_length

    fn Polyline2D::total_length(self : Polyline2D) -> Double

    PolylineProjection2D

    pub struct PolylineProjection2D {
    point : Point2
    segment : Int
    ratio : Double
    distance : Double
    arc_length : Double
    } derive(
    Debug
    )

    PolylineProjection2D::arc_length

    fn PolylineProjection2D::arc_length(self : PolylineProjection2D) -> Double

    PolylineProjection2D::distance

    fn PolylineProjection2D::distance(self : PolylineProjection2D) -> Double

    PolylineProjection2D::point

    PolylineProjection2D::ratio

    fn PolylineProjection2D::ratio(self : PolylineProjection2D) -> Double

    PolylineProjection2D::segment

    fn PolylineProjection2D::segment(self : PolylineProjection2D) -> Int

    ProceduralMotion2

    pub struct ProceduralMotion2 {
    base : Point2
    velocity : Point2
    jitter : JitterSequence2
    envelope : Curve
    } derive(
    Debug
    )

    ProceduralMotion2::sample

    fn ProceduralMotion2::sample(self : ProceduralMotion2, time : Double, normalized_time : Double) -> Point2

    ProceduralMotion2::sample_many

    fn ProceduralMotion2::sample_many(self : ProceduralMotion2, start : Double, end : Double, count : Int) -> Array[Point2]

    ProjectionModel

    pub enum ProjectionModel {
    Perspective
    Orthographic
    } derive(
    Debug
    )

    Projection model used by a media camera.

    ProjectionSample2

    pub struct ProjectionSample2 {
    world : Point3
    screen : Point2
    visible : Bool
    depth : Double
    } derive(
    Debug
    )

    ProjectionSample2::depth

    fn ProjectionSample2::depth(self : ProjectionSample2) -> Double

    ProjectionSample2::screen

    ProjectionSample2::visible

    fn ProjectionSample2::visible(self : ProjectionSample2) -> Bool

    ProjectionSample2::world

    QualityBudget2

    pub struct QualityBudget2 {
    temporal_limit : Double
    spatial_limit : Double
    color_limit : Double
    minimum_coverage : Double
    } derive(
    Debug
    )

    QualityBudget2::accepts

    fn QualityBudget2::accepts(self : QualityBudget2, metrics : RenderQualityMetrics2) -> Bool

    Quaternion

    pub(all) struct Quaternion {
    x : Double
    y : Double
    z : Double
    w : Double
    } derive(
    Debug
    )

    A unit-friendly quaternion for camera, scene, and object orientation.

    Quaternion::conjugate

    fn Quaternion::conjugate(self : Quaternion) -> Quaternion

    Quaternion::dot

    fn Quaternion::dot(self : Quaternion, other : Quaternion) -> Double

    Quaternion::forward

    fn Quaternion::forward(self : Quaternion) -> Point3

    Quaternion::from_axis_angle

    fn Quaternion::from_axis_angle(axis : Point3, angle : Double) -> Quaternion

    Quaternion::from_euler

    fn Quaternion::from_euler(pitch : Double, yaw : Double, roll : Double) -> Quaternion

    Quaternion::identity

    fn Quaternion::identity() -> Quaternion

    Quaternion::length

    fn Quaternion::length(self : Quaternion) -> Double

    Quaternion::length_squared

    fn Quaternion::length_squared(self : Quaternion) -> Double

    Quaternion::multiply

    fn Quaternion::multiply(self : Quaternion, other : Quaternion) -> Quaternion

    Quaternion::negated

    fn Quaternion::negated(self : Quaternion) -> Quaternion

    Quaternion::normalized

    fn Quaternion::normalized(self : Quaternion) -> Quaternion

    Quaternion::right

    fn Quaternion::right(self : Quaternion) -> Point3

    Quaternion::rotate

    fn Quaternion::rotate(self : Quaternion, value : Point3) -> Point3

    Quaternion::slerp

    fn Quaternion::slerp(self : Quaternion, other : Quaternion, amount : Double) -> Quaternion

    Quaternion::up

    fn Quaternion::up(self : Quaternion) -> Point3

    Quaternion::w

    fn Quaternion::w(self : Quaternion) -> Double

    Quaternion::x

    fn Quaternion::x(self : Quaternion) -> Double

    Quaternion::y

    fn Quaternion::y(self : Quaternion) -> Double

    Quaternion::z

    fn Quaternion::z(self : Quaternion) -> Double

    RampInterpolation

    pub enum RampInterpolation {
    RampLinear
    RampSmooth
    RampConstant
    } derive(
    Debug
    )

    RenderFrame2

    pub struct RenderFrame2 {
    time : Double
    passes : Array[RenderPass2]
    clear_color : Rgba
    visible_count : Int
    } derive(
    Debug
    )

    RenderFrame2::clear_color

    fn RenderFrame2::clear_color(self : RenderFrame2) -> Rgba

    RenderFrame2::passes

    RenderFrame2::time

    fn RenderFrame2::time(self : RenderFrame2) -> Double

    RenderFrame2::visible_count

    fn RenderFrame2::visible_count(self : RenderFrame2) -> Int

    RenderLayer2

    pub struct RenderLayer2 {
    id : Int
    name : String
    kind : RenderLayerKind2
    order : Int
    visible : Bool
    opacity : Double
    blend : BlendMode
    bounds : Bounds2D
    } derive(
    Debug
    )

    RenderLayer2::blend

    fn RenderLayer2::blend(self : RenderLayer2) -> BlendMode

    RenderLayer2::bounds

    fn RenderLayer2::bounds(self : RenderLayer2) -> Bounds2D

    RenderLayer2::id

    fn RenderLayer2::id(self : RenderLayer2) -> Int

    RenderLayer2::kind

    RenderLayer2::name

    fn RenderLayer2::name(self : RenderLayer2) -> String

    RenderLayer2::opacity

    fn RenderLayer2::opacity(self : RenderLayer2) -> Double

    RenderLayer2::order

    fn RenderLayer2::order(self : RenderLayer2) -> Int

    RenderLayer2::visible

    fn RenderLayer2::visible(self : RenderLayer2) -> Bool

    RenderLayer2::with_blend

    fn RenderLayer2::with_blend(self : RenderLayer2, blend : BlendMode) -> RenderLayer2

    RenderLayer2::with_opacity

    fn RenderLayer2::with_opacity(self : RenderLayer2, opacity : Double) -> RenderLayer2

    RenderLayer2::with_visibility

    fn RenderLayer2::with_visibility(self : RenderLayer2, visible : Bool) -> RenderLayer2

    RenderLayerKind2

    pub enum RenderLayerKind2 {
    BackgroundLayer
    GeometryLayer
    SpriteLayer
    TextLayer
    ParticleLayer
    EffectLayer
    } derive(
    Debug
    )

    Render-layer metadata that connects motion sampling to an application renderer without depending on a graphics backend.

    RenderPass2

    pub struct RenderPass2 {
    layer_id : Int
    active : Bool
    opacity : Double
    clip_start : Double
    clip_end : Double
    world_bounds : Bounds2D
    } derive(
    Debug
    )

    RenderPass2::active

    fn RenderPass2::active(self : RenderPass2) -> Bool

    RenderPass2::clip_end

    fn RenderPass2::clip_end(self : RenderPass2) -> Double

    RenderPass2::clip_start

    fn RenderPass2::clip_start(self : RenderPass2) -> Double

    RenderPass2::layer_id

    fn RenderPass2::layer_id(self : RenderPass2) -> Int

    RenderPass2::opacity

    fn RenderPass2::opacity(self : RenderPass2) -> Double

    RenderPass2::world_bounds

    fn RenderPass2::world_bounds(self : RenderPass2) -> Bounds2D

    RenderPlan2

    pub struct RenderPlan2 {
    layers : Array[RenderLayer2]
    start : Double
    end : Double
    clear_color : Rgba
    } derive(
    Debug
    )

    RenderPlan2::active_layers

    fn RenderPlan2::active_layers(self : RenderPlan2, time : Double) -> Array[RenderLayer2]

    RenderPlan2::add_layer

    fn RenderPlan2::add_layer(self : RenderPlan2, layer : RenderLayer2) -> Bool

    RenderPlan2::bounds

    fn RenderPlan2::bounds(self : RenderPlan2) -> Bounds2D

    RenderPlan2::clear_color

    fn RenderPlan2::clear_color(self : RenderPlan2) -> Rgba

    RenderPlan2::end

    fn RenderPlan2::end(self : RenderPlan2) -> Double

    RenderPlan2::frame

    fn RenderPlan2::frame(self : RenderPlan2, time : Double) -> RenderFrame2

    RenderPlan2::layer

    fn RenderPlan2::layer(self : RenderPlan2, id : Int) -> RenderLayer2?

    RenderPlan2::layers

    fn RenderPlan2::layers(self : RenderPlan2) -> Array[RenderLayer2]

    RenderPlan2::passes

    fn RenderPlan2::passes(self : RenderPlan2, time : Double) -> Array[RenderPass2]

    RenderPlan2::remove_layer

    fn RenderPlan2::remove_layer(self : RenderPlan2, id : Int) -> Bool

    RenderPlan2::shift

    fn RenderPlan2::shift(self : RenderPlan2, delta : Double) -> RenderPlan2

    RenderPlan2::start

    fn RenderPlan2::start(self : RenderPlan2) -> Double

    RenderPlan2::stats

    RenderPlanStats2

    pub struct RenderPlanStats2 {
    layer_count : Int
    visible_count : Int
    total_area : Double
    start : Double
    end : Double
    } derive(
    Debug
    )

    RenderPlanStats2::end

    fn RenderPlanStats2::end(self : RenderPlanStats2) -> Double

    RenderPlanStats2::layer_count

    fn RenderPlanStats2::layer_count(self : RenderPlanStats2) -> Int

    RenderPlanStats2::start

    fn RenderPlanStats2::start(self : RenderPlanStats2) -> Double

    RenderPlanStats2::total_area

    fn RenderPlanStats2::total_area(self : RenderPlanStats2) -> Double

    RenderPlanStats2::visible_count

    fn RenderPlanStats2::visible_count(self : RenderPlanStats2) -> Int

    RenderQuality2

    pub enum RenderQuality2 {
    PreviewQuality
    DraftQuality
    FinalQuality
    } derive(
    Debug
    )

    RenderQualityMetrics2

    pub struct RenderQualityMetrics2 {
    temporal_error : Double
    spatial_error : Double
    color_error : Double
    dropped_frames : Int
    coverage : Double
    } derive(
    Debug
    )

    Quality metrics for comparing preview and final render sample plans.

    RenderQualityMetrics2::color_error

    fn RenderQualityMetrics2::color_error(self : RenderQualityMetrics2) -> Double

    RenderQualityMetrics2::coverage

    fn RenderQualityMetrics2::coverage(self : RenderQualityMetrics2) -> Double

    RenderQualityMetrics2::dropped_frames

    fn RenderQualityMetrics2::dropped_frames(self : RenderQualityMetrics2) -> Int

    RenderQualityMetrics2::passed

    fn RenderQualityMetrics2::passed(self : RenderQualityMetrics2, temporal_limit : Double, spatial_limit : Double, color_limit : Double) -> Bool

    RenderQualityMetrics2::score

    fn RenderQualityMetrics2::score(self : RenderQualityMetrics2) -> Double

    RenderQualityMetrics2::spatial_error

    fn RenderQualityMetrics2::spatial_error(self : RenderQualityMetrics2) -> Double

    RenderQualityMetrics2::temporal_error

    fn RenderQualityMetrics2::temporal_error(self : RenderQualityMetrics2) -> Double

    RetimeMap

    pub struct RetimeMap {
    segments : Array[RetimeSegment]
    input_start : Double
    input_end : Double
    output_start : Double
    output_end : Double
    } derive(
    Debug
    )

    RetimeMap::derivative

    fn RetimeMap::derivative(self : RetimeMap, input : Double) -> Double

    RetimeMap::input_duration

    fn RetimeMap::input_duration(self : RetimeMap) -> Double

    RetimeMap::input_end

    fn RetimeMap::input_end(self : RetimeMap) -> Double

    RetimeMap::input_start

    fn RetimeMap::input_start(self : RetimeMap) -> Double

    RetimeMap::length

    fn RetimeMap::length(self : RetimeMap) -> Int

    RetimeMap::map

    fn RetimeMap::map(self : RetimeMap, input : Double) -> Double

    Map a source timestamp to presentation time. Gaps clamp to the adjacent segment, which is deterministic for scrubbing and export.

    RetimeMap::new

    fn RetimeMap::new(segments : Array[RetimeSegment]) -> RetimeMap raise MotionError

    RetimeMap::output_duration

    fn RetimeMap::output_duration(self : RetimeMap) -> Double

    RetimeMap::output_end

    fn RetimeMap::output_end(self : RetimeMap) -> Double

    RetimeMap::output_start

    fn RetimeMap::output_start(self : RetimeMap) -> Double

    RetimeMap::reverse

    fn RetimeMap::reverse(self : RetimeMap) -> RetimeMap raise MotionError

    RetimeMap::sample

    fn RetimeMap::sample(self : RetimeMap, count : Int) -> Array[SamplePoint] raise MotionError

    RetimeMap::scale_output

    fn RetimeMap::scale_output(self : RetimeMap, factor : Double) -> RetimeMap raise MotionError

    RetimeMap::segments

    fn RetimeMap::segments(self : RetimeMap) -> Array[RetimeSegment]

    RetimeMap::shift_output

    fn RetimeMap::shift_output(self : RetimeMap, offset : Double) -> RetimeMap raise MotionError

    RetimeMap::unmap

    fn RetimeMap::unmap(self : RetimeMap, output : Double) -> Double

    RetimeMapBuilder

    pub struct RetimeMapBuilder {
    segments : Array[RetimeSegment]
    } derive(
    Debug
    )

    Build a map by appending non-overlapping source and presentation ranges.

    RetimeMapBuilder::add

    RetimeMapBuilder::build

    RetimeMapBuilder::length

    fn RetimeMapBuilder::length(self : RetimeMapBuilder) -> Int

    RetimeMapBuilder::new

    RetimeSegment

    pub struct RetimeSegment {
    input_start : Double
    input_end : Double
    output_start : Double
    output_end : Double
    curve : Curve
    } derive(
    Debug
    )

    A monotone time remapping segment. Input and output intervals are kept explicit so media editors can preserve source timestamps while changing presentation speed.

    RetimeSegment::contains_input

    fn RetimeSegment::contains_input(self : RetimeSegment, time : Double) -> Bool

    RetimeSegment::contains_output

    fn RetimeSegment::contains_output(self : RetimeSegment, time : Double) -> Bool

    RetimeSegment::curve

    fn RetimeSegment::curve(self : RetimeSegment) -> Curve

    RetimeSegment::derivative

    fn RetimeSegment::derivative(self : RetimeSegment, input : Double) -> Double

    RetimeSegment::input_duration

    fn RetimeSegment::input_duration(self : RetimeSegment) -> Double

    RetimeSegment::input_end

    fn RetimeSegment::input_end(self : RetimeSegment) -> Double

    RetimeSegment::input_start

    fn RetimeSegment::input_start(self : RetimeSegment) -> Double

    RetimeSegment::map

    fn RetimeSegment::map(self : RetimeSegment, input : Double) -> Double

    RetimeSegment::output_duration

    fn RetimeSegment::output_duration(self : RetimeSegment) -> Double

    RetimeSegment::output_end

    fn RetimeSegment::output_end(self : RetimeSegment) -> Double

    RetimeSegment::output_start

    fn RetimeSegment::output_start(self : RetimeSegment) -> Double

    RetimeSegment::speed

    fn RetimeSegment::speed(self : RetimeSegment) -> Double

    RetimeSegment::unmap

    fn RetimeSegment::unmap(self : RetimeSegment, output : Double) -> Double

    Rgba

    pub(all) struct Rgba {
    r : Double
    g : Double
    b : Double
    a : Double
    } derive(
    Debug
    )

    RGBA color stored in the normalized [0, 1] range.

    Rgba::alpha

    fn Rgba::alpha(self : Rgba) -> Double

    Rgba::blue

    fn Rgba::blue(self : Rgba) -> Double

    Rgba::distance

    fn Rgba::distance(self : Rgba, other : Rgba) -> Double

    Rgba::grayscale

    fn Rgba::grayscale(self : Rgba) -> Rgba

    Rgba::green

    fn Rgba::green(self : Rgba) -> Double

    Rgba::lerp_linear

    fn Rgba::lerp_linear(self : Rgba, other : Rgba, ratio : Double) -> Rgba

    Rgba::luminance

    fn Rgba::luminance(self : Rgba) -> Double

    Rgba::over

    fn Rgba::over(self : Rgba, background : Rgba) -> Rgba

    Rgba::premultiplied

    fn Rgba::premultiplied(self : Rgba) -> Rgba

    Rgba::premultiply_over

    fn Rgba::premultiply_over(self : Rgba, background : Rgba) -> Rgba

    Rgba::red

    fn Rgba::red(self : Rgba) -> Double

    Rgba::to_hsv

    fn Rgba::to_hsv(self : Rgba) -> Hsv

    Rgba::to_linear

    fn Rgba::to_linear(self : Rgba) -> Rgba

    Rgba::to_srgb

    fn Rgba::to_srgb(self : Rgba) -> Rgba

    Rgba::unpremultiplied

    fn Rgba::unpremultiplied(self : Rgba) -> Rgba

    Rgba::with_alpha

    fn Rgba::with_alpha(self : Rgba, alpha : Double) -> Rgba

    RgbaKeyframe

    pub struct RgbaKeyframe {
    time : Double
    value : Rgba
    curve : Curve
    } derive(
    Debug
    )

    A color keyframe track for gradients, fades, and compositing timelines.

    RgbaTrack

    pub struct RgbaTrack {
    frames : Array[RgbaKeyframe]
    premultiplied : Bool
    } derive(
    Debug
    )

    RgbaTrack::duration

    fn RgbaTrack::duration(self : RgbaTrack) -> Double

    RgbaTrack::end_time

    fn RgbaTrack::end_time(self : RgbaTrack) -> Double

    RgbaTrack::keyframes

    fn RgbaTrack::keyframes(self : RgbaTrack) -> Array[RgbaKeyframe]

    RgbaTrack::length

    fn RgbaTrack::length(self : RgbaTrack) -> Int

    RgbaTrack::new

    fn RgbaTrack::new(frames : Array[RgbaKeyframe], premultiplied? : Bool) -> RgbaTrack raise MotionError

    RgbaTrack::sample

    fn RgbaTrack::sample(self : RgbaTrack, time : Double, mode? : Extrapolation) -> Rgba

    RgbaTrack::sample_many

    fn RgbaTrack::sample_many(self : RgbaTrack, count : Int, mode? : Extrapolation) -> Array[Rgba] raise MotionError

    RgbaTrack::start_time

    fn RgbaTrack::start_time(self : RgbaTrack) -> Double

    SampleCacheKey2

    pub struct SampleCacheKey2 {
    track_id : Int
    revision : Int
    samples : Int
    start : Double
    end : Double
    } derive(
    Debug
    )

    Reusable sample caches for repeated timeline evaluation. Cache keys are explicit so callers can invalidate only the track or resolution that changed during editing.

    SampleCacheKey2::matches

    fn SampleCacheKey2::matches(self : SampleCacheKey2, other : SampleCacheKey2) -> Bool

    SampleCacheKey2::revision

    fn SampleCacheKey2::revision(self : SampleCacheKey2) -> Int

    SampleCacheKey2::samples

    fn SampleCacheKey2::samples(self : SampleCacheKey2) -> Int

    SampleCacheKey2::track_id

    fn SampleCacheKey2::track_id(self : SampleCacheKey2) -> Int

    SamplePoint

    pub(all) struct SamplePoint {
    time : Double
    value : Double
    frame : Int
    } derive(
    Debug
    )

    SamplePoint::frame

    fn SamplePoint::frame(self : SamplePoint) -> Int

    SamplePoint::time

    fn SamplePoint::time(self : SamplePoint) -> Double

    SamplePoint::value

    fn SamplePoint::value(self : SamplePoint) -> Double

    SampleValidationPolicy2

    pub struct SampleValidationPolicy2 {
    tolerance : Double
    endpoint_tolerance : Double
    maximum_gap : Double
    require_monotonic_time : Bool
    } derive(
    Debug
    )

    Validation policies for production sample tables.

    SampleValidationPolicy2::endpoint_tolerance

    fn SampleValidationPolicy2::endpoint_tolerance(self : SampleValidationPolicy2) -> Double

    SampleValidationPolicy2::maximum_gap

    fn SampleValidationPolicy2::maximum_gap(self : SampleValidationPolicy2) -> Double

    SampleValidationPolicy2::tolerance

    fn SampleValidationPolicy2::tolerance(self : SampleValidationPolicy2) -> Double

    SampleValidationPolicy2::with_gap

    SampleValidationPolicy2::with_monotonic_time

    fn SampleValidationPolicy2::with_monotonic_time(self : SampleValidationPolicy2, value : Bool) -> SampleValidationPolicy2

    SampleValidationPolicy2::with_tolerance

    fn SampleValidationPolicy2::with_tolerance(self : SampleValidationPolicy2, value : Double) -> SampleValidationPolicy2

    SamplingConfig

    pub struct SamplingConfig {
    start : Double
    end : Double
    frame_rate : Double
    include_end : Bool
    } derive(
    Debug
    )

    Deterministic sampling window for rendering or offline export.

    SamplingConfig::end

    fn SamplingConfig::end(self : SamplingConfig) -> Double

    SamplingConfig::frame_count

    fn SamplingConfig::frame_count(self : SamplingConfig) -> Int

    SamplingConfig::frame_rate

    fn SamplingConfig::frame_rate(self : SamplingConfig) -> Double

    SamplingConfig::new

    fn SamplingConfig::new(start : Double, end : Double, frame_rate : Double, include_end? : Bool) -> SamplingConfig raise MotionError

    SamplingConfig::start

    fn SamplingConfig::start(self : SamplingConfig) -> Double

    ScalarBlendLayer

    pub struct ScalarBlendLayer {
    value : Double
    weight : Double
    mode : LayerBlendMode
    priority : Int
    } derive(
    Debug
    )

    ScalarBlendLayer::mode

    ScalarBlendLayer::priority

    fn ScalarBlendLayer::priority(self : ScalarBlendLayer) -> Int

    ScalarBlendLayer::value

    fn ScalarBlendLayer::value(self : ScalarBlendLayer) -> Double

    ScalarBlendLayer::weight

    fn ScalarBlendLayer::weight(self : ScalarBlendLayer) -> Double

    ScalarChannel

    pub struct ScalarChannel {
    name : String
    track : ScalarTrack
    enabled : Bool
    weight : Double
    offset : Double
    } derive(
    Debug
    )

    A named scalar channel with editor-friendly activation and weighting.

    ScalarChannel::duration

    fn ScalarChannel::duration(self : ScalarChannel) -> Double

    ScalarChannel::enabled

    fn ScalarChannel::enabled(self : ScalarChannel) -> Bool

    ScalarChannel::end_time

    fn ScalarChannel::end_time(self : ScalarChannel) -> Double

    ScalarChannel::name

    fn ScalarChannel::name(self : ScalarChannel) -> String

    ScalarChannel::offset

    fn ScalarChannel::offset(self : ScalarChannel) -> Double

    ScalarChannel::sample

    fn ScalarChannel::sample(self : ScalarChannel, time : Double, mode? : Extrapolation) -> Double

    ScalarChannel::start_time

    fn ScalarChannel::start_time(self : ScalarChannel) -> Double

    ScalarChannel::track

    ScalarChannel::weight

    fn ScalarChannel::weight(self : ScalarChannel) -> Double

    ScalarChannel::with_enabled

    fn ScalarChannel::with_enabled(self : ScalarChannel, enabled : Bool) -> ScalarChannel

    ScalarChannel::with_offset

    fn ScalarChannel::with_offset(self : ScalarChannel, offset : Double) -> ScalarChannel raise MotionError

    ScalarChannel::with_weight

    fn ScalarChannel::with_weight(self : ScalarChannel, weight : Double) -> ScalarChannel raise MotionError

    ScalarSampleCache2

    pub struct ScalarSampleCache2 {
    key : SampleCacheKey2
    times : Array[Double]
    values : Array[Double]
    } derive(
    Debug
    )

    ScalarSampleCache2::derivative

    fn ScalarSampleCache2::derivative(self : ScalarSampleCache2, time : Double) -> Double

    ScalarSampleCache2::key

    ScalarSampleCache2::length

    fn ScalarSampleCache2::length(self : ScalarSampleCache2) -> Int

    ScalarSampleCache2::new

    fn ScalarSampleCache2::new(key : SampleCacheKey2, values : Array[Double]) -> ScalarSampleCache2

    ScalarSampleCache2::sample

    fn ScalarSampleCache2::sample(self : ScalarSampleCache2, time : Double) -> Double

    ScalarSampleCache2::times

    fn ScalarSampleCache2::times(self : ScalarSampleCache2) -> Array[Double]

    ScalarSampleCache2::values

    fn ScalarSampleCache2::values(self : ScalarSampleCache2) -> Array[Double]

    ScalarSeries2

    pub struct ScalarSeries2 {
    times : Array[Double]
    values : Array[Double]
    } derive(
    Debug
    )

    Batch sampling helpers used by exporters, benchmark harnesses, and analysis tools. The series stores timestamps beside values so non-uniform editorial edits remain observable.

    ScalarSeries2::derivatives

    fn ScalarSeries2::derivatives(self : ScalarSeries2) -> Array[Double]

    ScalarSeries2::duration

    fn ScalarSeries2::duration(self : ScalarSeries2) -> Double

    ScalarSeries2::integral

    fn ScalarSeries2::integral(self : ScalarSeries2) -> Double

    ScalarSeries2::length

    fn ScalarSeries2::length(self : ScalarSeries2) -> Int

    ScalarSeries2::map

    fn ScalarSeries2::map(self : ScalarSeries2, mapper : (Double) -> Double) -> ScalarSeries2

    ScalarSeries2::range

    fn ScalarSeries2::range(self : ScalarSeries2) -> (Double, Double)

    ScalarSeries2::resample

    fn ScalarSeries2::resample(self : ScalarSeries2, count : Int) -> ScalarSeries2

    ScalarSeries2::sample

    fn ScalarSeries2::sample(self : ScalarSeries2, time : Double) -> Double

    ScalarSeries2::times

    fn ScalarSeries2::times(self : ScalarSeries2) -> Array[Double]

    ScalarSeries2::values

    fn ScalarSeries2::values(self : ScalarSeries2) -> Array[Double]

    ScalarTrack

    pub struct ScalarTrack {
    frames : Array[Keyframe]
    } derive(
    Debug
    )

    A validated, immutable-at-the-API scalar track.

    ScalarTrack::duration

    fn ScalarTrack::duration(self : ScalarTrack) -> Double

    ScalarTrack::end_time

    fn ScalarTrack::end_time(self : ScalarTrack) -> Double

    ScalarTrack::keyframes

    fn ScalarTrack::keyframes(self : ScalarTrack) -> Array[Keyframe]

    ScalarTrack::length

    fn ScalarTrack::length(self : ScalarTrack) -> Int

    ScalarTrack::map_values

    fn ScalarTrack::map_values(self : ScalarTrack, mapper : (Double) -> Double) -> ScalarTrack raise MotionError

    Transform values without changing timing or curves.

    ScalarTrack::new

    fn ScalarTrack::new(frames : Array[Keyframe]) -> ScalarTrack raise MotionError

    Build a scalar track from strictly increasing keyframes.

    ScalarTrack::sample

    fn ScalarTrack::sample(self : ScalarTrack, time : Double, mode? : Extrapolation) -> Double

    Sample at an arbitrary time using the selected boundary policy.

    ScalarTrack::sample_motion

    fn ScalarTrack::sample_motion(self : ScalarTrack, time : Double, mode? : Extrapolation) -> MotionSample

    ScalarTrack::sample_values

    fn ScalarTrack::sample_values(self : ScalarTrack, times : Array[Double], mode? : Extrapolation) -> Array[Double]

    ScalarTrack::scale_time

    fn ScalarTrack::scale_time(self : ScalarTrack, factor : Double) -> ScalarTrack raise MotionError

    Scale a track's time axis around its first keyframe.

    ScalarTrack::shift

    fn ScalarTrack::shift(self : ScalarTrack, offset : Double) -> ScalarTrack raise MotionError

    Move a track in time while preserving its segment curves.

    ScalarTrack::start_time

    fn ScalarTrack::start_time(self : ScalarTrack) -> Double

    ScalarTrack::trim

    fn ScalarTrack::trim(self : ScalarTrack, start : Double, end : Double) -> ScalarTrack raise MotionError

    Copy a time range, adding interpolated boundary frames when needed.

    ScalarTrack::value_range

    fn ScalarTrack::value_range(self : ScalarTrack, samples_per_segment : Int) -> (Double, Double)

    ScalarTrack::velocity

    fn ScalarTrack::velocity(self : ScalarTrack, time : Double, mode? : Extrapolation) -> Double

    Estimate velocity with a central difference that respects track duration.

    ScalarTrack::with_curve

    fn ScalarTrack::with_curve(self : ScalarTrack, curve : Curve) -> ScalarTrack raise MotionError

    Return a track with a replacement curve on every segment.

    ScalarTrackBundle

    pub struct ScalarTrackBundle {
    channels : Array[ScalarChannel]
    start_time : Double
    end_time : Double
    } derive(
    Debug
    )

    A group of synchronized scalar tracks for UI properties, camera channels, or a compact control stream exported to a runtime.

    ScalarTrackBundle::channels

    ScalarTrackBundle::duration

    fn ScalarTrackBundle::duration(self : ScalarTrackBundle) -> Double

    ScalarTrackBundle::end_time

    fn ScalarTrackBundle::end_time(self : ScalarTrackBundle) -> Double

    ScalarTrackBundle::find

    fn ScalarTrackBundle::find(self : ScalarTrackBundle, name : String) -> ScalarChannel?

    ScalarTrackBundle::length

    fn ScalarTrackBundle::length(self : ScalarTrackBundle) -> Int

    ScalarTrackBundle::new

    ScalarTrackBundle::sample

    fn ScalarTrackBundle::sample(self : ScalarTrackBundle, time : Double, mode? : Extrapolation) -> BundleSample

    ScalarTrackBundle::sample_many

    fn ScalarTrackBundle::sample_many(self : ScalarTrackBundle, count : Int, mode? : Extrapolation) -> Array[BundleSample] raise MotionError

    ScalarTrackBundle::set_enabled

    fn ScalarTrackBundle::set_enabled(self : ScalarTrackBundle, name : String, enabled : Bool) -> ScalarTrackBundle raise MotionError

    ScalarTrackBundle::set_weight

    fn ScalarTrackBundle::set_weight(self : ScalarTrackBundle, name : String, weight : Double) -> ScalarTrackBundle raise MotionError

    ScalarTrackBundle::start_time

    fn ScalarTrackBundle::start_time(self : ScalarTrackBundle) -> Double

    ScalarTrackBundle::with_channel

    ScalarTrackBundle::without

    fn ScalarTrackBundle::without(self : ScalarTrackBundle, name : String) -> ScalarTrackBundle raise MotionError

    ScalarTrackBundleBuilder

    pub struct ScalarTrackBundleBuilder {
    channels : Array[ScalarChannel]
    } derive(
    Debug
    )

    ScalarTrackBundleBuilder::add

    ScalarTrackBundleBuilder::build

    ScalarTrackBundleBuilder::length

    ScalarTrackBundleBuilder::new

    ScalarTrackBundleBuilder::remove

    fn ScalarTrackBundleBuilder::remove(self : ScalarTrackBundleBuilder, name : String) -> Bool

    SequenceBuilder

    pub struct SequenceBuilder {
    tweens : Array[Tween]
    gap : Double
    }

    A mutable composition helper used by editors and importers.

    SequenceBuilder::add

    fn SequenceBuilder::add(self : SequenceBuilder, tween : Tween) -> Unit

    SequenceBuilder::build

    SequenceBuilder::new

    fn SequenceBuilder::new(gap? : Double) -> SequenceBuilder

    SequenceBuilder::remove_at

    fn SequenceBuilder::remove_at(self : SequenceBuilder, index : Int) -> Tween?

    SequenceSample

    pub(all) struct SequenceSample {
    time : Double
    value : Double
    index : Int
    progress : Double
    state : SequenceState
    } derive(
    Debug
    )

    A sample from a TweenSequence, including the active segment index.

    SequenceSample::index

    fn SequenceSample::index(self : SequenceSample) -> Int

    SequenceSample::progress

    fn SequenceSample::progress(self : SequenceSample) -> Double

    SequenceSample::state

    SequenceSample::time

    fn SequenceSample::time(self : SequenceSample) -> Double

    SequenceSample::value

    fn SequenceSample::value(self : SequenceSample) -> Double

    SequenceState

    pub(all) enum SequenceState {
    Before
    Active
    Gap
    After
    } derive(Eq,
    Debug
    )

    Lifecycle state for a serial composition of scalar tweens.

    ShakeFalloff2

    pub enum ShakeFalloff2 {
    ConstantShake
    LinearShake
    SmoothShake
    ExponentialShake(Double)
    } derive(
    Debug
    )

    SignalPeak2

    pub struct SignalPeak2 {
    index : Int
    value : Double
    prominence : Double
    width : Int
    } derive(
    Debug
    )

    Feature extraction for motion signals and benchmark diagnostics.

    SignalPeak2::index

    fn SignalPeak2::index(self : SignalPeak2) -> Int

    SignalPeak2::prominence

    fn SignalPeak2::prominence(self : SignalPeak2) -> Double

    SignalPeak2::value

    fn SignalPeak2::value(self : SignalPeak2) -> Double

    SignalPeak2::width

    fn SignalPeak2::width(self : SignalPeak2) -> Int

    SoftRange2

    pub struct SoftRange2 {
    minimum : Double
    maximum : Double
    softness : Double
    restitution : Double
    } derive(
    Debug
    )

    SoftRange2::contains

    fn SoftRange2::contains(self : SoftRange2, value : Double) -> Bool

    SoftRange2::maximum

    fn SoftRange2::maximum(self : SoftRange2) -> Double

    SoftRange2::minimum

    fn SoftRange2::minimum(self : SoftRange2) -> Double

    SoftRange2::resolve

    fn SoftRange2::resolve(self : SoftRange2, value : Double, velocity : Double) -> (Double, Double, ConstraintStatus2)

    SoftRange2::restitution

    fn SoftRange2::restitution(self : SoftRange2) -> Double

    SoftRange2::softness

    fn SoftRange2::softness(self : SoftRange2) -> Double

    Spline2D

    pub struct Spline2D {
    points : Array[Point2]
    tension : Double
    closed : Bool
    } derive(
    Debug
    )

    A Catmull-Rom spline over 2D control points.

    tension=0 is the standard centripetal-free Catmull-Rom form. The closed option connects the last control point back to the first one.

    Spline2D::bounds

    fn Spline2D::bounds(self : Spline2D, samples_per_segment? : Int) -> Bounds2D

    Spline2D::closed

    fn Spline2D::closed(self : Spline2D) -> Bool

    Spline2D::control_points

    fn Spline2D::control_points(self : Spline2D) -> Array[Point2]

    Spline2D::length

    fn Spline2D::length(self : Spline2D, samples_per_segment : Int) -> Double

    Spline2D::new

    fn Spline2D::new(points : Array[Point2], tension? : Double, closed? : Bool) -> Spline2D raise MotionError

    Spline2D::point_count

    fn Spline2D::point_count(self : Spline2D) -> Int

    Spline2D::polyline

    fn Spline2D::polyline(self : Spline2D, samples_per_segment : Int) -> Array[Point2]

    Spline2D::project

    fn Spline2D::project(self : Spline2D, target : Point2, samples_per_segment? : Int) -> SplineProjection

    Find the closest sampled point to a target, returning an approximate normalized parameter and the actual point on the spline.

    Spline2D::sample

    fn Spline2D::sample(self : Spline2D, parameter : Double) -> Point2

    Spline2D::sample_by_distance

    fn Spline2D::sample_by_distance(self : Spline2D, distance : Double, samples_per_segment? : Int) -> Point2

    Spline2D::sample_many

    fn Spline2D::sample_many(self : Spline2D, count : Int) -> Array[Point2] raise MotionError

    Spline2D::segment_count

    fn Spline2D::segment_count(self : Spline2D) -> Int

    Spline2D::speed

    fn Spline2D::speed(self : Spline2D, parameter : Double) -> Double

    Spline2D::tangent

    fn Spline2D::tangent(self : Spline2D, parameter : Double) -> Point2

    Spline2D::tension

    fn Spline2D::tension(self : Spline2D) -> Double

    Spline3D

    pub struct Spline3D {
    points : Array[Point3]
    tension : Double
    closed : Bool
    } derive(
    Debug
    )

    A Catmull-Rom spline over 3D control points for camera and scene motion.

    Spline3D::closed

    fn Spline3D::closed(self : Spline3D) -> Bool

    Spline3D::control_points

    fn Spline3D::control_points(self : Spline3D) -> Array[Point3]

    Spline3D::length

    fn Spline3D::length(self : Spline3D, samples_per_segment : Int) -> Double

    Spline3D::new

    fn Spline3D::new(points : Array[Point3], tension? : Double, closed? : Bool) -> Spline3D raise MotionError

    Spline3D::point_count

    fn Spline3D::point_count(self : Spline3D) -> Int

    Spline3D::polyline

    fn Spline3D::polyline(self : Spline3D, samples_per_segment : Int) -> Array[Point3]

    Spline3D::sample

    fn Spline3D::sample(self : Spline3D, parameter : Double) -> Point3

    Spline3D::sample_by_distance

    fn Spline3D::sample_by_distance(self : Spline3D, distance : Double, samples_per_segment? : Int) -> Point3

    Spline3D::sample_many

    fn Spline3D::sample_many(self : Spline3D, count : Int) -> Array[Point3] raise MotionError

    Spline3D::segment_count

    fn Spline3D::segment_count(self : Spline3D) -> Int

    Spline3D::speed

    fn Spline3D::speed(self : Spline3D, parameter : Double) -> Double

    Spline3D::tangent

    fn Spline3D::tangent(self : Spline3D, parameter : Double) -> Point3

    Spline3D::tension

    fn Spline3D::tension(self : Spline3D) -> Double

    SplineProjection

    pub(all) struct SplineProjection {
    parameter : Double
    distance : Double
    value : Point2
    error : Double
    } derive(
    Debug
    )

    A normalized projection on a spline, useful for path-following cameras.

    SplineProjection::distance

    fn SplineProjection::distance(self : SplineProjection) -> Double

    SplineProjection::error

    fn SplineProjection::error(self : SplineProjection) -> Double

    SplineProjection::parameter

    fn SplineProjection::parameter(self : SplineProjection) -> Double

    SplineProjection::value

    SpringSpec

    pub struct SpringSpec {
    stiffness : Double
    damping : Double
    mass : Double
    initial_velocity : Double
    } derive(
    Debug
    )

    Physical parameters for a damped spring response.

    SpringSpec::damping_ratio

    fn SpringSpec::damping_ratio(self : SpringSpec) -> Double

    SpringSpec::is_settled

    fn SpringSpec::is_settled(self : SpringSpec, start : Double, end : Double, time : Double, tolerance? : Double) -> Bool

    SpringSpec::natural_frequency

    fn SpringSpec::natural_frequency(self : SpringSpec) -> Double

    SpringSpec::sample

    fn SpringSpec::sample(self : SpringSpec, start : Double, end : Double, time : Double) -> MotionSample

    SpringSpec::sample_many

    fn SpringSpec::sample_many(self : SpringSpec, start : Double, end : Double, duration : Double, count : Int) -> Array[MotionSample] raise MotionError

    SpringSpec::settle_time

    fn SpringSpec::settle_time(self : SpringSpec, tolerance? : Double) -> Double

    SpringSpec::value_at

    fn SpringSpec::value_at(self : SpringSpec, start : Double, end : Double, time : Double) -> Double

    Spring position for a unit step from start to end.

    SpringSpec::velocity_at

    fn SpringSpec::velocity_at(self : SpringSpec, start : Double, end : Double, time : Double) -> Double

    Tempo

    pub struct Tempo {
    beats_per_minute : Double
    beat_offset : Double
    } derive(
    Debug
    )

    Beat-based timing helper for music and rhythm-driven interactions.

    Tempo::beat_duration

    fn Tempo::beat_duration(self : Tempo) -> Double

    Tempo::beats_to_seconds

    fn Tempo::beats_to_seconds(self : Tempo, beats : Double) -> Double

    Tempo::new

    fn Tempo::new(bpm : Double, beat_offset? : Double) -> Tempo raise MotionError

    Tempo::seconds_to_beats

    fn Tempo::seconds_to_beats(self : Tempo, seconds : Double) -> Double

    TempoPoint2

    pub struct TempoPoint2 {
    beat : Double
    bpm : Double
    } derive(
    Debug
    )

    A tempo change in an editorial timeline. Beats are represented as a continuous Double so a video frame can land between integer beat markers.

    TempoPoint2::beat

    fn TempoPoint2::beat(self : TempoPoint2) -> Double

    TempoPoint2::bpm

    fn TempoPoint2::bpm(self : TempoPoint2) -> Double

    TempoTimeline

    pub struct TempoTimeline {
    points : Array[TempoPoint2]
    origin_seconds : Double
    } derive(
    Debug
    )

    TempoTimeline::beat_to_seconds

    fn TempoTimeline::beat_to_seconds(self : TempoTimeline, beat : Double) -> Double

    TempoTimeline::bpm_at_seconds

    fn TempoTimeline::bpm_at_seconds(self : TempoTimeline, seconds : Double) -> Double

    TempoTimeline::length

    fn TempoTimeline::length(self : TempoTimeline) -> Int

    TempoTimeline::new

    fn TempoTimeline::new(points : Array[TempoPoint2], origin_seconds? : Double) -> TempoTimeline

    TempoTimeline::points

    TempoTimeline::quantize_beat

    fn TempoTimeline::quantize_beat(_self : TempoTimeline, beat : Double, subdivision : Int) -> Double

    TempoTimeline::seconds_to_beat

    fn TempoTimeline::seconds_to_beat(self : TempoTimeline, seconds : Double) -> Double

    TimeSignature2

    pub struct TimeSignature2 {
    numerator : Int
    denominator : Int
    } derive(
    Debug
    )

    TimeSignature2::bar_beats

    fn TimeSignature2::bar_beats(self : TimeSignature2) -> Double

    TimeSignature2::beat_in_bar

    fn TimeSignature2::beat_in_bar(self : TimeSignature2, beat : Double) -> Double

    TimeSignature2::denominator

    fn TimeSignature2::denominator(self : TimeSignature2) -> Int

    TimeSignature2::numerator

    fn TimeSignature2::numerator(self : TimeSignature2) -> Int

    TimeWarp

    pub struct TimeWarp {
    curve : Curve
    start : Double
    end : Double
    speed : Double
    } derive(
    Debug
    )

    A normalized time remapping used by editors and media exporters.

    TimeWarp::curve

    fn TimeWarp::curve(self : TimeWarp) -> Curve

    TimeWarp::duration

    fn TimeWarp::duration(self : TimeWarp) -> Double

    TimeWarp::map

    fn TimeWarp::map(self : TimeWarp, time : Double) -> Double

    TimeWarp::new

    fn TimeWarp::new(curve : Curve, start : Double, end : Double, speed? : Double) -> TimeWarp raise MotionError

    TimeWarp::unmap

    fn TimeWarp::unmap(self : TimeWarp, mapped_time : Double) -> Double

    Invert a timing curve with a fixed bisection budget.

    Timecode2

    pub struct Timecode2 {
    hours : Int
    minutes : Int
    seconds : Int
    frames : Int
    frame_rate : Double
    } derive(
    Debug
    )

    Timecode2::frame_index

    fn Timecode2::frame_index(self : Timecode2) -> Int

    Timecode2::frame_rate

    fn Timecode2::frame_rate(self : Timecode2) -> Double

    Timecode2::frames

    fn Timecode2::frames(self : Timecode2) -> Int

    Timecode2::hours

    fn Timecode2::hours(self : Timecode2) -> Int

    Timecode2::minutes

    fn Timecode2::minutes(self : Timecode2) -> Int

    Timecode2::seconds

    fn Timecode2::seconds(self : Timecode2) -> Int

    Timecode2::to_seconds

    fn Timecode2::to_seconds(self : Timecode2) -> Double

    Timeline

    pub struct Timeline {
    slots : Array[TrackSlot]
    } derive(
    Debug
    )

    A deterministic collection of named scalar tracks.

    Timeline::add

    fn Timeline::add(self : Timeline, slot : TrackSlot) -> Unit

    Timeline::duration

    fn Timeline::duration(self : Timeline) -> Double

    Timeline::new

    fn Timeline::new() -> Timeline

    Timeline::remove

    fn Timeline::remove(self : Timeline, name : String) -> Bool

    Timeline::sample

    fn Timeline::sample(self : Timeline, time : Double, mode? : Extrapolation) -> Array[TimelineValue]

    Sample every enabled track at a timeline coordinate.

    Timeline::sample_window

    fn Timeline::sample_window(self : Timeline, config : SamplingConfig, mode? : Extrapolation) -> Array[Array[TimelineValue]]

    Sample a timeline on a deterministic export grid.

    Timeline::set_enabled

    fn Timeline::set_enabled(self : Timeline, name : String, enabled : Bool) -> Bool

    Timeline::track_count

    fn Timeline::track_count(self : Timeline) -> Int

    Timeline::tracks

    fn Timeline::tracks(self : Timeline) -> Array[TrackSlot]

    TimelineEdgeKind

    pub enum TimelineEdgeKind {
    StartAfterEnd
    StartAfterStart
    EndWithEnd
    OffsetLink(Double)
    } derive(
    Debug
    )

    TimelineEvaluation2

    pub struct TimelineEvaluation2 {
    context : EvaluationContext2
    active_nodes : Array[TimelineGraphNode]
    render_frame : RenderFrame2
    events : Array[MotionEvent2]
    } derive(
    Debug
    )

    TimelineEvaluation2::active_nodes

    TimelineEvaluation2::context

    TimelineEvaluation2::events

    TimelineEvaluation2::render_frame

    TimelineEvaluator2

    pub struct TimelineEvaluator2 {
    graph : TimelineGraph
    render_plan : RenderPlan2
    event_queue : MotionEventQueue2
    previous_time : Double
    } derive(
    Debug
    )

    TimelineEvaluator2::active_count

    fn TimelineEvaluator2::active_count(self : TimelineEvaluator2, time : Double) -> Int

    TimelineEvaluator2::add_event

    fn TimelineEvaluator2::add_event(self : TimelineEvaluator2, event : MotionEvent2) -> Unit

    TimelineEvaluator2::evaluate

    fn TimelineEvaluator2::evaluate(self : TimelineEvaluator2, time : Double, frame : Int) -> TimelineEvaluation2

    TimelineEvaluator2::evaluate_schedule

    fn TimelineEvaluator2::evaluate_schedule(self : TimelineEvaluator2, schedule : FrameSchedule2) -> Array[TimelineEvaluation2]

    TimelineEvaluator2::graph

    TimelineEvaluator2::queue

    TimelineEvaluator2::render_plan

    TimelineEvaluator2::seek

    fn TimelineEvaluator2::seek(self : TimelineEvaluator2, time : Double) -> Unit

    TimelineGraph

    pub struct TimelineGraph {
    nodes : Array[TimelineGraphNode]
    edges : Array[TimelineGraphEdge]
    } derive(
    Debug
    )

    TimelineGraph::active_at

    fn TimelineGraph::active_at(self : TimelineGraph, time : Double) -> Array[TimelineGraphNode]

    TimelineGraph::add_edge

    TimelineGraph::add_node

    fn TimelineGraph::add_node(self : TimelineGraph, node : TimelineGraphNode) -> Bool

    TimelineGraph::edge_count

    fn TimelineGraph::edge_count(self : TimelineGraph) -> Int

    TimelineGraph::edges

    TimelineGraph::has_cycle

    fn TimelineGraph::has_cycle(self : TimelineGraph) -> Bool

    TimelineGraph::node_count

    fn TimelineGraph::node_count(self : TimelineGraph) -> Int

    TimelineGraph::nodes

    TimelineGraph::resolve

    TimelineGraph::sample

    fn TimelineGraph::sample(self : TimelineGraph, time : Double) -> TimelineGraphSample

    TimelineGraph::shift

    fn TimelineGraph::shift(self : TimelineGraph, delta : Double) -> TimelineGraph

    TimelineGraph::time_range

    fn TimelineGraph::time_range(self : TimelineGraph) -> (Double, Double)

    TimelineGraph::topological_order

    fn TimelineGraph::topological_order(self : TimelineGraph) -> Array[Int]

    TimelineGraphEdge

    pub struct TimelineGraphEdge {
    from : Int
    to : Int
    kind : TimelineEdgeKind
    } derive(
    Debug
    )

    TimelineGraphEdge::from

    fn TimelineGraphEdge::from(self : TimelineGraphEdge) -> Int

    TimelineGraphEdge::kind

    TimelineGraphEdge::to

    fn TimelineGraphEdge::to(self : TimelineGraphEdge) -> Int

    TimelineGraphNode

    pub struct TimelineGraphNode {
    id : Int
    name : String
    start : Double
    duration : Double
    enabled : Bool
    } derive(
    Debug
    )

    A dependency graph for arranging independent motion lanes in a composition. Nodes carry timing only; payloads can remain in application code and be sampled through the returned schedule.

    TimelineGraphNode::duration

    fn TimelineGraphNode::duration(self : TimelineGraphNode) -> Double

    TimelineGraphNode::enabled

    fn TimelineGraphNode::enabled(self : TimelineGraphNode) -> Bool

    TimelineGraphNode::end

    fn TimelineGraphNode::end(self : TimelineGraphNode) -> Double

    TimelineGraphNode::id

    fn TimelineGraphNode::id(self : TimelineGraphNode) -> Int

    TimelineGraphNode::name

    fn TimelineGraphNode::name(self : TimelineGraphNode) -> String

    TimelineGraphNode::start

    fn TimelineGraphNode::start(self : TimelineGraphNode) -> Double

    TimelineGraphNode::with_enabled

    fn TimelineGraphNode::with_enabled(self : TimelineGraphNode, enabled : Bool) -> TimelineGraphNode

    TimelineGraphNode::with_start

    fn TimelineGraphNode::with_start(self : TimelineGraphNode, start : Double) -> TimelineGraphNode

    TimelineGraphSample

    pub struct TimelineGraphSample {
    time : Double
    active_ids : Array[Int]
    progress : Array[Double]
    } derive(
    Debug
    )

    TimelineGraphSample::active_ids

    fn TimelineGraphSample::active_ids(self : TimelineGraphSample) -> Array[Int]

    TimelineGraphSample::progress

    fn TimelineGraphSample::progress(self : TimelineGraphSample) -> Array[Double]

    TimelineGraphSample::time

    fn TimelineGraphSample::time(self : TimelineGraphSample) -> Double

    TimelineValue

    pub(all) struct TimelineValue {
    name : String
    value : Double
    } derive(
    Debug
    )

    TimelineValue::name

    fn TimelineValue::name(self : TimelineValue) -> String

    TimelineValue::value

    fn TimelineValue::value(self : TimelineValue) -> Double

    ToneMapping

    pub enum ToneMapping {
    ClampTone
    Reinhard
    Exposure(Double)
    Filmic
    } derive(
    Debug
    )

    TrackBuilder

    pub struct TrackBuilder {
    frames : Array[Keyframe]
    }

    A mutable builder useful for editors that add frames interactively.

    TrackBuilder::add

    fn TrackBuilder::add(self : TrackBuilder, frame : Keyframe) -> Unit

    TrackBuilder::build

    TrackBuilder::new

    TrackBuilder::remove_at

    fn TrackBuilder::remove_at(self : TrackBuilder, index : Int) -> Keyframe?

    TrackBuilder::replace

    fn TrackBuilder::replace(self : TrackBuilder, index : Int, frame : Keyframe) -> Bool

    TrackSlot

    pub struct TrackSlot {
    name : String
    track : ScalarTrack
    offset : Double
    enabled : Bool
    } derive(
    Debug
    )

    A named scalar track placed on a shared media timeline.

    TrackSlot::enabled

    fn TrackSlot::enabled(self : TrackSlot) -> Bool

    TrackSlot::name

    fn TrackSlot::name(self : TrackSlot) -> String

    TrackSlot::offset

    fn TrackSlot::offset(self : TrackSlot) -> Double

    TrackSlot::track

    fn TrackSlot::track(self : TrackSlot) -> ScalarTrack

    Transform2D

    pub(all) struct Transform2D {
    position : Point2
    scale : Point2
    rotation : Double
    skew : Double
    } derive(
    Debug
    )

    2D affine transform represented as translation, scale, rotation and skew.

    Transform2D::position

    fn Transform2D::position(self : Transform2D) -> Point2

    Transform2D::rotation

    fn Transform2D::rotation(self : Transform2D) -> Double

    Transform2D::scale

    fn Transform2D::scale(self : Transform2D) -> Point2

    Transform2D::skew

    fn Transform2D::skew(self : Transform2D) -> Double

    Transform2Sample

    pub struct Transform2Sample {
    time : Double
    value : Transform2D
    matrix : Affine2D
    } derive(
    Debug
    )

    Transform2Sample::matrix

    Transform2Sample::time

    fn Transform2Sample::time(self : Transform2Sample) -> Double

    Transform2Sample::value

    Transform3BlendLayer

    pub struct Transform3BlendLayer {
    value : Transform3D
    weight : Double
    priority : Int
    } derive(
    Debug
    )

    Transform3BlendLayer::priority

    fn Transform3BlendLayer::priority(self : Transform3BlendLayer) -> Int

    Transform3BlendLayer::value

    Transform3BlendLayer::weight

    fn Transform3BlendLayer::weight(self : Transform3BlendLayer) -> Double

    Transform3D

    pub(all) struct Transform3D {
    position : Point3
    rotation : Quaternion
    scale : Point3
    } derive(
    Debug
    )

    A compact affine transform for scene graphs and camera rigs.

    Transform3D::apply

    fn Transform3D::apply(self : Transform3D, value : Point3) -> Point3

    Transform3D::around

    fn Transform3D::around(self : Transform3D, pivot : Point3) -> Transform3D

    Transform3D::combine

    fn Transform3D::combine(self : Transform3D, child : Transform3D) -> Transform3D

    Transform3D::identity

    fn Transform3D::identity() -> Transform3D

    Transform3D::inverse

    fn Transform3D::inverse(self : Transform3D) -> Transform3D

    Transform3D::is_identity

    fn Transform3D::is_identity(self : Transform3D) -> Bool

    Transform3D::lerp

    fn Transform3D::lerp(self : Transform3D, other : Transform3D, amount : Double) -> Transform3D

    Transform3D::matrix

    fn Transform3D::matrix(self : Transform3D) -> Matrix4

    Transform3D::position

    fn Transform3D::position(self : Transform3D) -> Point3

    Transform3D::rotation

    fn Transform3D::rotation(self : Transform3D) -> Quaternion

    Transform3D::scale

    fn Transform3D::scale(self : Transform3D) -> Point3

    Transform3D::scaled

    fn Transform3D::scaled(self : Transform3D, multiplier : Point3) -> Transform3D

    Transform3D::translated

    fn Transform3D::translated(self : Transform3D, offset : Point3) -> Transform3D

    Transform3D::with_position

    fn Transform3D::with_position(self : Transform3D, position : Point3) -> Transform3D

    Transform3D::with_rotation

    fn Transform3D::with_rotation(self : Transform3D, rotation : Quaternion) -> Transform3D

    Transform3D::with_scale

    fn Transform3D::with_scale(self : Transform3D, scale : Point3) -> Transform3D

    Transform3Delta

    pub struct Transform3Delta {
    translation : Point3
    rotation : Quaternion
    scale : Point3
    } derive(
    Debug
    )

    Spatial interpolation helpers for camera rigs and scene objects.

    Transform3Delta::rotation

    Transform3Delta::scale

    Transform3Delta::translation

    fn Transform3Delta::translation(self : Transform3Delta) -> Point3

    Transform3Keyframe

    pub struct Transform3Keyframe {
    time : Double
    value : Transform3D
    curve : Curve
    } derive(
    Debug
    )

    A keyframe for a 3D transform track.

    Transform3Keyframe::curve

    Transform3Keyframe::time

    fn Transform3Keyframe::time(self : Transform3Keyframe) -> Double

    Transform3Keyframe::value

    Transform3Track

    pub struct Transform3Track {
    frames : Array[Transform3Keyframe]
    } derive(
    Debug
    )

    Interpolates translation, scale, and rotation independently.

    Transform3Track::duration

    fn Transform3Track::duration(self : Transform3Track) -> Double

    Transform3Track::end_time

    fn Transform3Track::end_time(self : Transform3Track) -> Double

    Transform3Track::keyframes

    Transform3Track::length

    fn Transform3Track::length(self : Transform3Track) -> Int

    Transform3Track::map_values

    fn Transform3Track::map_values(self : Transform3Track, mapper : (Transform3D) -> Transform3D) -> Transform3Track raise MotionError

    Transform3Track::new

    Transform3Track::sample

    fn Transform3Track::sample(self : Transform3Track, time : Double, mode? : Extrapolation) -> Transform3D

    Transform3Track::sample_many

    fn Transform3Track::sample_many(self : Transform3Track, count : Int, mode? : Extrapolation) -> Array[Transform3D] raise MotionError

    Transform3Track::scale_time

    fn Transform3Track::scale_time(self : Transform3Track, factor : Double) -> Transform3Track raise MotionError

    Transform3Track::shift

    fn Transform3Track::shift(self : Transform3Track, offset : Double) -> Transform3Track raise MotionError

    Transform3Track::start_time

    fn Transform3Track::start_time(self : Transform3Track) -> Double

    Transform3Track::velocity

    fn Transform3Track::velocity(self : Transform3Track, time : Double) -> Point3

    TransformKeyframe

    pub struct TransformKeyframe {
    time : Double
    value : Transform2D
    curve : Curve
    } derive(
    Debug
    )

    A transform track that interpolates translation, scale, rotation, and skew.

    TransformTrack

    pub struct TransformTrack {
    frames : Array[TransformKeyframe]
    shortest_rotation : Bool
    } derive(
    Debug
    )

    TransformTrack::duration

    fn TransformTrack::duration(self : TransformTrack) -> Double

    TransformTrack::end_time

    fn TransformTrack::end_time(self : TransformTrack) -> Double

    TransformTrack::keyframes

    TransformTrack::length

    fn TransformTrack::length(self : TransformTrack) -> Int

    TransformTrack::new

    fn TransformTrack::new(frames : Array[TransformKeyframe], shortest_rotation? : Bool) -> TransformTrack raise MotionError

    TransformTrack::sample

    fn TransformTrack::sample(self : TransformTrack, time : Double, mode? : Extrapolation) -> Transform2D

    TransformTrack::sample_many

    fn TransformTrack::sample_many(self : TransformTrack, count : Int, mode? : Extrapolation) -> Array[Transform2D] raise MotionError

    TransformTrack::start_time

    fn TransformTrack::start_time(self : TransformTrack) -> Double

    TransportFrame

    pub struct TransportFrame {
    index : Int
    time : Double
    normalized : Double
    marker_hits : Array[MarkerHit]
    } derive(
    Debug
    )

    A fixed-rate export iterator that emits frame times and marker events.

    TransportFrame::index

    fn TransportFrame::index(self : TransportFrame) -> Int

    TransportFrame::marker_hits

    fn TransportFrame::marker_hits(self : TransportFrame) -> Array[MarkerHit]

    TransportFrame::normalized

    fn TransportFrame::normalized(self : TransportFrame) -> Double

    TransportFrame::time

    fn TransportFrame::time(self : TransportFrame) -> Double

    TransportRange

    pub struct TransportRange {
    start : Double
    end : Double
    } derive(
    Debug
    )

    A transport window with explicit in/out points for media scrubbing.

    TransportRange::clamp

    fn TransportRange::clamp(self : TransportRange, time : Double) -> Double

    TransportRange::contains

    fn TransportRange::contains(self : TransportRange, time : Double) -> Bool

    TransportRange::duration

    fn TransportRange::duration(self : TransportRange) -> Double

    TransportRange::end

    fn TransportRange::end(self : TransportRange) -> Double

    TransportRange::normalized

    fn TransportRange::normalized(self : TransportRange, time : Double) -> Double

    TransportRange::start

    fn TransportRange::start(self : TransportRange) -> Double

    TransportStatus

    pub(all) enum TransportStatus {
    Stopped
    Playing
    Paused
    Finished
    } derive(Eq,
    Debug
    )

    Tween

    pub struct Tween {
    from : Double
    to : Double
    duration : Double
    delay : Double
    repeat_count : Int
    mode : Extrapolation
    curve : Curve
    } derive(
    Debug
    )

    A scalar tween with delay, repeats, and optional ping-pong direction.

    Tween::delay

    fn Tween::delay(self : Tween) -> Double

    Tween::duration

    fn Tween::duration(self : Tween) -> Double

    Tween::from

    fn Tween::from(self : Tween) -> Double

    Tween::new

    fn Tween::new(from : Double, to : Double, duration : Double, delay? : Double, repeat_count? : Int, mode? : Extrapolation, curve? : Curve) -> Tween raise MotionError

    Tween::repeat_count

    fn Tween::repeat_count(self : Tween) -> Int

    Tween::sample

    fn Tween::sample(self : Tween, time : Double) -> TweenSample

    Sample a tween at wall-clock time. Time and duration use the same units.

    Tween::sample_many

    fn Tween::sample_many(self : Tween, count : Int) -> Array[TweenSample] raise MotionError

    Tween::sample_motion

    fn Tween::sample_motion(self : Tween, time : Double) -> MotionSample

    Tween::to

    fn Tween::to(self : Tween) -> Double

    Tween::total_duration

    fn Tween::total_duration(self : Tween) -> Double

    Tween::value_at

    fn Tween::value_at(self : Tween, time : Double) -> Double

    Tween::velocity_at

    fn Tween::velocity_at(self : Tween, time : Double) -> Double

    TweenSample

    pub(all) struct TweenSample {
    time : Double
    value : Double
    progress : Double
    cycle : Int
    state : TweenState
    } derive(
    Debug
    )

    A value sample with enough metadata for a renderer or UI state machine.

    TweenSample::cycle

    fn TweenSample::cycle(self : TweenSample) -> Int

    TweenSample::progress

    fn TweenSample::progress(self : TweenSample) -> Double

    TweenSample::state

    fn TweenSample::state(self : TweenSample) -> TweenState

    TweenSample::value

    fn TweenSample::value(self : TweenSample) -> Double

    TweenSequence

    pub struct TweenSequence {
    tweens : Array[Tween]
    gap : Double
    } derive(
    Debug
    )

    A serial composition of Tweens with optional gaps between segments.

    TweenSequence::duration

    fn TweenSequence::duration(self : TweenSequence) -> Double

    TweenSequence::gap

    fn TweenSequence::gap(self : TweenSequence) -> Double

    TweenSequence::length

    fn TweenSequence::length(self : TweenSequence) -> Int

    TweenSequence::new

    fn TweenSequence::new(tweens : Array[Tween], gap? : Double) -> TweenSequence raise MotionError

    TweenSequence::sample

    fn TweenSequence::sample(self : TweenSequence, time : Double) -> SequenceSample

    Sample the sequence in wall-clock time. A gap holds the previous value.

    TweenSequence::sample_many

    fn TweenSequence::sample_many(self : TweenSequence, count : Int) -> Array[SequenceSample] raise MotionError

    TweenSequence::tweens

    fn TweenSequence::tweens(self : TweenSequence) -> Array[Tween]

    TweenSequence::value_at

    fn TweenSequence::value_at(self : TweenSequence, time : Double) -> Double

    TweenState

    pub(all) enum TweenState {
    Before
    Active
    After
    } derive(Eq,
    Debug
    )

    Lifecycle state of a tween sample.

    ValidationBundle2

    pub struct ValidationBundle2 {
    reports : Array[DiagnosticReport2]
    summary : DiagnosticSummary2
    } derive(
    Debug
    )

    ValidationBundle2::passed

    fn ValidationBundle2::passed(self : ValidationBundle2) -> Bool

    ValidationBundle2::reports

    ValidationBundle2::summary

    VectorField2

    pub struct VectorField2 {
    mode : VectorFieldMode2
    scale : Double
    falloff : Double
    bounds : Bounds2D?
    } derive(
    Debug
    )

    VectorField2::integrate

    fn VectorField2::integrate(self : VectorField2, particle : FieldParticle2, start : Double, end : Double, steps : Int, drag : Double) -> Array[Point2]

    VectorField2::mode

    VectorField2::sample

    fn VectorField2::sample(self : VectorField2, position : Point2, time : Double) -> Point2

    VectorField2::step

    fn VectorField2::step(self : VectorField2, particle : FieldParticle2, time : Double, dt : Double, drag : Double) -> FieldParticle2

    VectorField2::with_bounds

    fn VectorField2::with_bounds(self : VectorField2, bounds : Bounds2D) -> VectorField2

    VectorField2::with_falloff

    fn VectorField2::with_falloff(self : VectorField2, falloff : Double) -> VectorField2

    VectorField2::with_scale

    fn VectorField2::with_scale(self : VectorField2, scale : Double) -> VectorField2

    VectorFieldMode2

    pub enum VectorFieldMode2 {
    UniformField(Point2)
    RadialField(Point2, Double)
    VortexField(Point2, Double)
    NoiseField(NoiseSource2, Double)
    } derive(
    Debug
    )

    Continuous vector fields for particles, brush strokes, and procedural camera offsets. A field owns its evaluator so integration stays backend independent.

    Viewport

    pub struct Viewport {
    width : Double
    height : Double
    pixel_ratio : Double
    } derive(
    Debug
    )

    A viewport in physical pixels. The camera keeps this separate from the animation timeline so a composition can be rendered at several sizes.

    Viewport::aspect

    fn Viewport::aspect(self : Viewport) -> Double

    Viewport::center

    fn Viewport::center(self : Viewport) -> Point2

    Viewport::height

    fn Viewport::height(self : Viewport) -> Double

    Viewport::physical_height

    fn Viewport::physical_height(self : Viewport) -> Double

    Viewport::physical_width

    fn Viewport::physical_width(self : Viewport) -> Double

    Viewport::pixel_ratio

    fn Viewport::pixel_ratio(self : Viewport) -> Double

    Viewport::width

    fn Viewport::width(self : Viewport) -> Double

    adaptive_sample

    fn adaptive_sample(func : (Double) -> Double, start : Double, end : Double, config : AdaptiveSamplingConfig) -> AdaptiveSampleResult raise MotionError

    Recursively sample a scalar curve where curvature exceeds a tolerance.

    adaptive_sample_tween

    fn adaptive_sample_tween(tween : Tween, start : Double, end : Double, config : AdaptiveSamplingConfig) -> AdaptiveSampleResult raise MotionError

    advect_points2

    fn advect_points2(field : VectorField2, points : Array[Point2], time : Double, dt : Double) -> Array[Point2]

    affine2d_from_transform

    fn affine2d_from_transform(value : Transform2D) -> Affine2D

    affine2d_identity

    fn affine2d_identity() -> Affine2D

    affine2d_rotation

    fn affine2d_rotation(angle : Double) -> Affine2D

    affine2d_scale

    fn affine2d_scale(value : Point2) -> Affine2D

    affine2d_skew

    fn affine2d_skew(skew : Double) -> Affine2D

    affine2d_translation

    fn affine2d_translation(value : Point2) -> Affine2D

    all_easings

    fn all_easings() -> Array[EasingId]

    Enumerate the built-ins in a stable order for editors and documentation.

    analyze_bezier

    fn analyze_bezier(curve : Bezier, samples : Int) -> CurveReport

    analyze_curve

    fn analyze_curve(curve : Curve, samples : Int) -> CurveStatistics

    analyze_easing

    fn analyze_easing(func : (Double) -> Double, samples : Int) -> CurveReport

    Inspect an arbitrary easing function using a fixed normalized grid.

    analyze_easing_id

    fn analyze_easing_id(id : EasingId, samples : Int) -> CurveReport

    analyze_path2d

    fn analyze_path2d(path : Path2D, count : Int) -> Path2DMetric2

    analyze_point_series2

    fn analyze_point_series2(series : PointSeries2, target : Point2, tolerance : Double) -> MotionMetrics2

    analyze_samples

    fn analyze_samples(samples : Array[SamplePoint]) -> Array[CurveAnalysisPoint]

    apply_camera_post

    fn apply_camera_post(camera : CameraRig, settings : CameraPostSettings2) -> CameraRig

    apply_groove

    fn apply_groove(beat : Double, pattern : GroovePattern) -> Double

    apply_shake_falloff

    fn apply_shake_falloff(value : Point2, mode : ShakeFalloff2, ratio : Double) -> Point2

    apply_transform3_delta

    fn apply_transform3_delta(value : Transform3D, delta : Transform3Delta, weight : Double) -> Transform3D

    aspect_ratio2

    fn aspect_ratio2(width : Int, height : Int) -> Double

    back_in

    fn back_in(t : Double, overshoot? : Double) -> Double

    Back easing with configurable overshoot.

    back_in_out

    fn back_in_out(t : Double, overshoot? : Double) -> Double

    back_out

    fn back_out(t : Double, overshoot? : Double) -> Double

    beat_cue

    fn beat_cue(beat : Double, label : String, duration? : Double, strength? : Double) -> BeatCue

    beat_grid

    fn beat_grid(tempo : TempoTimeline, signature : TimeSignature2) -> BeatGrid

    bezier_clamped

    fn bezier_clamped(x1 : Double, y1 : Double, x2 : Double, y2 : Double) -> Bezier

    Construct a curve while clamping its x controls to the CSS-valid range.

    blend

    fn blend(first : (Double) -> Double, second : (Double) -> Double, amount~ : Double) -> ((Double) -> Double)

    Blend two curves with an amount in the closed interval [0, 1].

    blend_bundles

    fn blend_bundles(first : ScalarTrackBundle, second : ScalarTrackBundle, amount : Double) -> ScalarTrackBundle raise MotionError

    Blend two bundles by channel name. Missing channels are carried through from the bundle that contains them.

    blend_color_layers

    fn blend_color_layers(layers : Array[ColorBlendLayer], fallback : Rgba) -> Rgba

    blend_mask2d

    fn blend_mask2d(values : Array[Double], default_weight? : Double) -> BlendMask2D

    blend_mode_name

    fn blend_mode_name(mode : BlendMode) -> String

    blend_modes

    fn blend_modes() -> Array[BlendMode]

    blend_point2_layers

    fn blend_point2_layers(layers : Array[Point2BlendLayer], fallback : Point2) -> Point2

    blend_point3_layers

    fn blend_point3_layers(layers : Array[Point3BlendLayer], fallback : Point3) -> Point3

    blend_rgba

    fn blend_rgba(base : Rgba, source : Rgba, mode : BlendMode) -> Rgba

    blend_scalar_layers

    fn blend_scalar_layers(layers : Array[ScalarBlendLayer], fallback : Double) -> Double

    blend_transform3_layers

    fn blend_transform3_layers(layers : Array[Transform3BlendLayer], fallback : Transform3D) -> Transform3D

    blend_values

    fn blend_values(first : Array[Double], second : Array[Double], amount : Double) -> Array[Double]

    bounce_in

    fn bounce_in(t : Double) -> Double

    bounce_in_out

    fn bounce_in_out(t : Double) -> Double

    bounce_out

    fn bounce_out(t : Double) -> Double

    Piecewise quadratic bounce used for UI and game motion.

    bounds2d

    fn bounds2d(minimum : Point2, maximum : Point2) -> Bounds2D

    bounds3d

    fn bounds3d(minimum : Point3, maximum : Point3) -> Bounds3D

    build_envelope

    fn build_envelope(curves : Array[Curve], samples : Int) -> CurveEnvelope

    build_event_window

    fn build_event_window(queue : MotionEventQueue2, previous : Double, current : Double) -> EventWindow2

    build_path_frame

    fn build_path_frame(sample : PathSample3D, up : Point3) -> PathFrame3D

    build_path_metric_profile

    fn build_path_metric_profile(path : Path3D, count : Int) -> PathMetricProfile3D

    cache_pool2

    fn cache_pool2(capacity? : Int) -> CachePool2

    camera_center_of_bounds

    fn camera_center_of_bounds(bounds : Bounds3D) -> Point3

    camera_depth_of

    fn camera_depth_of(camera : CameraRig, point : Point3) -> Double

    camera_focus_weight

    fn camera_focus_weight(camera : CameraRig, point : Point3, focus : Double, falloff : Double) -> Double

    camera_framing2

    fn camera_framing2(center : Point3, radius : Double, policy : FramingPolicy2, margin? : Double) -> CameraFraming2

    camera_framing_error

    fn camera_framing_error(camera : CameraRig, bounds : Bounds3D, margin : Double) -> Double

    camera_keyframe

    fn camera_keyframe(time : Double, pose : CameraPose, lens : CameraLens, curve? : Curve) -> CameraKeyframe raise MotionError

    camera_motion_delta

    fn camera_motion_delta(first : CameraRig, second : CameraRig) -> (Double, Double)

    camera_pose

    fn camera_pose(position : Point3, target : Point3, up? : Point3, roll? : Double) -> CameraPose

    camera_post_settings2

    fn camera_post_settings2() -> CameraPostSettings2

    camera_radius_of_bounds

    fn camera_radius_of_bounds(bounds : Bounds3D) -> Double

    camera_rig

    fn camera_rig(pose : CameraPose, lens : CameraLens, viewport : Viewport) -> CameraRig

    catmull_rom

    fn catmull_rom(previous : Double, start : Double, end : Double, next : Double, t : Double, tension? : Double) -> Double

    Catmull-Rom interpolation across four scalar samples.

    catmull_rom_array

    fn catmull_rom_array(values : Array[Double], position : Double) -> Double

    Cubic interpolation over a value array using clamped endpoint samples.

    catmull_rom_point2

    fn catmull_rom_point2(previous : Point2, start : Point2, end : Point2, next : Point2, t : Double, tension? : Double) -> Point2

    catmull_rom_point3

    fn catmull_rom_point3(previous : Point3, start : Point3, end : Point3, next : Point3, t : Double, tension? : Double) -> Point3

    circ_in

    fn circ_in(t : Double) -> Double

    circ_in_out

    fn circ_in_out(t : Double) -> Double

    circ_out

    fn circ_out(t : Double) -> Double

    clamp01

    fn clamp01(value : Double) -> Double

    clamp_values

    fn clamp_values(values : Array[Double], bounds : MotionBounds) -> Array[Double]

    classify_monotonicity

    fn classify_monotonicity(samples : Array[SamplePoint], tolerance? : Double) -> CurveMonotonicity

    cleanup_samples

    fn cleanup_samples(values : Array[Double], tolerance : Double) -> (Array[Double], KeyframeCleanupReport)

    color_blend_layer

    fn color_blend_layer(value : Rgba, weight : Double, mode? : BlendMode, priority? : Int) -> ColorBlendLayer

    color_matrix_brightness

    fn color_matrix_brightness(value : Double) -> ColorMatrix

    color_matrix_contrast

    fn color_matrix_contrast(value : Double) -> ColorMatrix

    color_matrix_identity

    fn color_matrix_identity() -> ColorMatrix

    color_matrix_saturation

    fn color_matrix_saturation(value : Double) -> ColorMatrix

    color_ramp_stop

    fn color_ramp_stop(position : Double, color : Rgba) -> ColorRampStop

    color_series2

    fn color_series2(times : Array[Double], values : Array[Rgba]) -> ColorSeries2

    compare_curves

    fn compare_curves(first : Curve, second : Curve, samples : Int) -> CurveComparison

    compare_motion_metrics2

    fn compare_motion_metrics2(first : MotionMetrics2, second : MotionMetrics2) -> Array[Double]

    compose

    fn compose(outer : (Double) -> Double, inner : (Double) -> Double) -> ((Double) -> Double)

    Compose two curves. outer(inner(t)) is evaluated without intermediate arrays.

    compose_curve_pipeline

    fn compose_curve_pipeline(first : CurvePipeline2, second : CurvePipeline2) -> CurvePipeline2

    compose_retime

    fn compose_retime(first : RetimeMap, second : RetimeMap, samples_per_segment? : Int) -> RetimeMap raise MotionError

    constrain_point2_step

    fn constrain_point2_step(target : Point2, current : Point2, velocity : Point2, acceleration : Point2, dt : Double, limit : MotionLimitProfile2) -> Point2ConstraintResult

    constrain_point3_step

    fn constrain_point3_step(target : Point3, current : Point3, velocity : Point3, acceleration : Point3, dt : Double, limit : MotionLimitProfile2) -> Point3ConstraintResult

    constrain_scalar_step

    fn constrain_scalar_step(target : Double, current : Double, velocity : Double, acceleration : Double, dt : Double, limit : MotionLimitProfile2) -> ConstraintResult2

    constraint_solve_config

    fn constraint_solve_config(frame_rate : Double, limits : MotionLimitProfile2) -> ConstraintSolveConfig

    constraint_statuses2

    fn constraint_statuses2() -> Array[ConstraintStatus2]

    convex_hull

    fn convex_hull(points : Array[Point2]) -> Polygon2D

    convolve_signal

    fn convolve_signal(signal : MotionSignal, kernel : Array[Double]) -> MotionSignal

    Convolve a signal with a finite kernel, using edge replication.

    critically_damped_step

    fn critically_damped_step(current : Double, target : Double, velocity : Double, response : Double, delta_time : Double) -> (Double, Double)

    cubic_in

    fn cubic_in(t : Double) -> Double

    Cubic acceleration.

    cubic_in_out

    fn cubic_in_out(t : Double) -> Double

    Cubic acceleration followed by deceleration.

    cubic_out

    fn cubic_out(t : Double) -> Double

    Cubic deceleration.

    cubic_path2d

    fn cubic_path2d(start : Point2, control_start : Point2, control_end : Point2, end : Point2) -> CubicPath2D

    cubic_path3d

    fn cubic_path3d(start : Point3, control_start : Point3, control_end : Point3, end : Point3) -> CubicPath3D

    cumulative_integral

    fn cumulative_integral(signal : MotionSignal) -> MotionSignal

    curve_feature_value

    fn curve_feature_value(curve : Curve, feature : CurveFeature, samples : Int) -> Double

    curve_features

    fn curve_features() -> Array[CurveFeature]

    curve_invariants_pass

    fn curve_invariants_pass(report : CurveInvariantReport2, tolerance : Double) -> Bool

    curve_lipschitz_bound

    fn curve_lipschitz_bound(curve : Curve, samples : Int) -> Double

    curve_lookup

    fn curve_lookup(func : (Double) -> Double, start : Double, end : Double, count : Int) -> Array[SamplePoint] raise MotionError

    Generate a lookup table with an explicit endpoint policy.

    curve_lut_bank

    fn curve_lut_bank() -> CurveLutBank

    curve_lut_builder

    fn curve_lut_builder(curve : Curve) -> CurveLutBuilder

    curve_maximum

    fn curve_maximum(samples : Array[SamplePoint]) -> SamplePoint?

    curve_minimum

    fn curve_minimum(samples : Array[SamplePoint]) -> SamplePoint?

    curve_minimum_time

    fn curve_minimum_time(curve : Curve, samples : Int) -> Double

    curve_peak_time

    fn curve_peak_time(curve : Curve, samples : Int) -> Double

    curve_pipeline2

    fn curve_pipeline2(curve : Curve) -> CurvePipeline2

    curve_pipeline_error

    fn curve_pipeline_error(pipeline : CurvePipeline2, table : CurveLookupTable, samples : Int) -> Double

    curve_remap2

    fn curve_remap2(input_min : Double, input_max : Double, output_min : Double, output_max : Double) -> CurveRemap2

    curve_stages2

    fn curve_stages2() -> Array[CurveStage2]

    curve_total_variation2

    fn curve_total_variation2(curve : Curve, samples : Int) -> Double

    damp_to_range

    fn damp_to_range(value : Double, minimum : Double, maximum : Double, strength : Double) -> Double

    decimate_samples

    fn decimate_samples(samples : Array[SamplePoint], stride : Int) -> Array[SamplePoint]

    Downsample a sample array by keeping every nth frame and preserving the end.

    derivative_of

    fn derivative_of(func : (Double) -> Double, t : Double, step? : Double) -> Double

    Numerically estimate a first derivative without allocating a sample buffer.

    deterministic_jitter

    fn deterministic_jitter(seed : Int, index : Int) -> Double

    diagnostic_code_name2

    fn diagnostic_code_name2(code : DiagnosticCode2) -> String

    diagnostic_codes2

    fn diagnostic_codes2() -> Array[DiagnosticCode2]

    diagnostic_report2

    fn diagnostic_report2(name : String) -> DiagnosticReport2

    diagnostic_severities2

    fn diagnostic_severities2() -> Array[DiagnosticSeverity2]

    diagnostic_severity_name2

    fn diagnostic_severity_name2(severity : DiagnosticSeverity2) -> String

    differentiate

    fn differentiate(values : Array[Double], step : Double) -> Array[Double]

    First difference of a sampled signal with an explicit time step.

    differentiate_signal

    fn differentiate_signal(signal : MotionSignal) -> MotionSignal

    Differentiate a signal using central differences in the interior.

    easing

    fn easing(id : EasingId) -> ((Double) -> Double)

    Return a first-class easing function for use in a sampler or a custom blend.

    elastic_in

    fn elastic_in(t : Double, amplitude? : Double, period? : Double) -> Double

    Elastic acceleration. Amplitude and period are normalized motion controls.

    elastic_in_out

    fn elastic_in_out(t : Double, amplitude? : Double, period? : Double) -> Double

    elastic_out

    fn elastic_out(t : Double, amplitude? : Double, period? : Double) -> Double

    enforce_monotonic

    fn enforce_monotonic(values : Array[Double], increasing : Bool) -> Array[Double]

    enforce_range

    fn enforce_range(values : Array[Double], minimum : Double, maximum : Double) -> Array[Double]

    estimate_compressed_bytes

    fn estimate_compressed_bytes(frame_count : Int, width : Int, height : Int, bits_per_pixel : Double, compression : Double) -> Int

    estimate_settling_time

    fn estimate_settling_time(curve : Curve, tolerance : Double, samples : Int) -> Double

    estimate_zero_crossings

    fn estimate_zero_crossings(curve : Curve, samples : Int) -> Int

    evaluate_color_track

    fn evaluate_color_track(track : RgbaTrack, schedule : FrameSchedule2) -> ColorSeries2

    evaluate_point2_track

    fn evaluate_point2_track(track : Point2Track, schedule : FrameSchedule2) -> PointSeries2

    evaluate_render_quality

    fn evaluate_render_quality(expected : Array[Double], actual : Array[Double], expected_colors : Array[Rgba], actual_colors : Array[Rgba]) -> RenderQualityMetrics2

    evaluate_scalar_track

    fn evaluate_scalar_track(track : ScalarTrack, schedule : FrameSchedule2) -> ScalarSeries2

    evaluation_context2

    fn evaluation_context2(time : Double, frame : Int, normalized : Double, delta : Double, direction : Int) -> EvaluationContext2

    evaluation_progress

    fn evaluation_progress(values : Array[TimelineEvaluation2]) -> Array[Double]

    evaluation_times

    fn evaluation_times(values : Array[TimelineEvaluation2]) -> Array[Double]

    event_queue_duration

    fn event_queue_duration(queue : MotionEventQueue2) -> Double

    event_times

    fn event_times(events : Array[MotionEvent2]) -> Array[Double]

    expo_in

    fn expo_in(t : Double) -> Double

    expo_in_out

    fn expo_in_out(t : Double) -> Double

    expo_out

    fn expo_out(t : Double) -> Double

    exponential_smooth2

    fn exponential_smooth2(values : Array[Double], factor : Double) -> Array[Double]

    export_chunk_count

    fn export_chunk_count(schedule : FrameSchedule2, chunk_size : Int) -> Int

    export_duration_for_frames

    fn export_duration_for_frames(frame_count : Int, frame_rate : Double) -> Double

    export_entry_checksum

    fn export_entry_checksum(values : Array[Double]) -> Int

    export_formats2

    fn export_formats2() -> Array[ExportFormat2]

    export_frame_index

    fn export_frame_index(schedule : FrameSchedule2, time : Double) -> Int

    export_manifest2

    fn export_manifest2(settings : ExportSettings2) -> ExportManifest2

    export_manifest_entry2

    fn export_manifest_entry2(id : Int, name : String, start : Double, end : Double, frame_count : Int) -> ExportManifestEntry2

    export_settings2

    fn export_settings2(format : ExportFormat2, width : Int, height : Int, frame_rate : Double) -> ExportSettings2

    export_time_for_frame

    fn export_time_for_frame(schedule : FrameSchedule2, frame : Int) -> Double

    field_curl2

    fn field_curl2(field : VectorField2, position : Point2, time : Double, epsilon? : Double) -> Double

    field_divergence2

    fn field_divergence2(field : VectorField2, position : Point2, time : Double, epsilon? : Double) -> Double

    field_particle2

    fn field_particle2(position : Point2, velocity : Point2, lifetime : Double) -> FieldParticle2

    filter_events_by_kind

    fn filter_events_by_kind(events : Array[MotionEvent2], kind : MotionEventKind2) -> Array[MotionEvent2]

    find_signal_peaks2

    fn find_signal_peaks2(values : Array[Double], threshold : Double, minimum_distance : Int) -> Array[SignalPeak2]

    first_crossing

    fn first_crossing(samples : Array[SamplePoint], target : Double) -> Double?

    Find the first time at which a sorted curve reaches a target value.

    fit_dimensions2

    fn fit_dimensions2(width : Int, height : Int, maximum : Int) -> (Int, Int)

    frame_budget2

    fn frame_budget2(schedule : FrameSchedule2, bytes_per_frame : Int, throughput : Double) -> FrameBudget2

    frame_channels2

    fn frame_channels2() -> Array[FrameChannel2]

    frame_schedule2

    fn frame_schedule2(start : Double, end : Double, frame_rate : Double, first_frame? : Int) -> FrameSchedule2

    framing_policies2

    fn framing_policies2() -> Array[FramingPolicy2]

    gradient_stop

    fn gradient_stop(position : Double, color : Rgba, curve? : Curve) -> GradientStop raise MotionError

    graph_build_statuses

    fn graph_build_statuses() -> Array[GraphBuildStatus]

    groove_patterns

    fn groove_patterns() -> Array[GroovePattern]

    hermite

    fn hermite(start : Double, end : Double, tangent_start : Double, tangent_end : Double, t : Double) -> Double

    Cubic Hermite interpolation. Tangents use the same units as values.

    hsv

    fn hsv(hue~ : Double, saturation~ : Double, value~ : Double, alpha? : Double) -> Hsv

    inspect_colors

    fn inspect_colors(name : String, colors : Array[Rgba]) -> DiagnosticReport2

    inspect_curve_endpoints

    fn inspect_curve_endpoints(name : String, curve : Curve, tolerance : Double) -> DiagnosticReport2

    inspect_curve_invariants

    fn inspect_curve_invariants(curve : Curve, samples : Int) -> CurveInvariantReport2

    inspect_frame_indices

    fn inspect_frame_indices(schedule : FrameSchedule2, indices : Array[Int]) -> FrameDropReport2

    inspect_motion_limits

    fn inspect_motion_limits(name : String, samples : Array[Double], frame_rate : Double, maximum_velocity : Double) -> DiagnosticReport2

    inspect_scalar_values

    fn inspect_scalar_values(name : String, values : Array[Double], tolerance : Double) -> DiagnosticReport2

    integrate_analyzed_curve

    fn integrate_analyzed_curve(samples : Array[SamplePoint]) -> Double

    Estimate the signed area under a curve using the trapezoidal rule.

    integrate_curve

    fn integrate_curve(func : (Double) -> Double, samples : Int) -> Double

    Integrate a normalized curve with the trapezoid rule.

    integrate_samples

    fn integrate_samples(samples : Array[SamplePoint]) -> Double

    Approximate the integral of a sampled scalar signal with trapezoids.

    integrate_signal

    fn integrate_signal(signal : MotionSignal) -> Double

    interpolate_angle

    fn interpolate_angle(start : Double, end : Double, t : Double) -> Double

    Interpolate an angle in radians along the shortest path.

    interpolate_hsv

    fn interpolate_hsv(start : Hsv, end : Hsv, t : Double) -> Hsv

    interpolate_point2

    fn interpolate_point2(start : Point2, end : Point2, t : Double) -> Point2

    interpolate_point3

    fn interpolate_point3(start : Point3, end : Point3, t : Double) -> Point3

    interpolate_rgba

    fn interpolate_rgba(start : Rgba, end : Rgba, t : Double, premultiplied? : Bool) -> Rgba

    Interpolate straight in RGBA space, optionally preserving premultiplied alpha.

    interpolate_rgba_hsv

    fn interpolate_rgba_hsv(start : Rgba, end : Rgba, t : Double) -> Rgba

    interpolate_samples

    fn interpolate_samples(samples : Array[AdaptiveSamplePoint], time : Double) -> Double

    Linear interpolation over a sorted adaptive sample.

    interpolate_scalar

    fn interpolate_scalar(start : Double, end : Double, t : Double) -> Double

    Scalar interpolation primitive.

    interpolate_transform

    fn interpolate_transform(start : Transform2D, end : Transform2D, t : Double, shortest_rotation? : Bool) -> Transform2D

    jitter_sequence2

    fn jitter_sequence2(seed : Int, amplitude : Point2) -> JitterSequence2

    join_styles2d

    fn join_styles2d() -> Array[JoinStyle2D]

    keyframe

    fn keyframe(time : Double, value : Double, curve? : Curve) -> Keyframe raise MotionError

    layer_blend_modes

    fn layer_blend_modes() -> Array[LayerBlendMode]

    linear

    fn linear(t : Double) -> Double

    Linear interpolation with no acceleration.

    local_maxima

    fn local_maxima(samples : Array[SamplePoint], prominence : Double) -> Array[SamplePoint] raise MotionError

    Keep local maxima with a configurable minimum prominence.

    lookup_value

    fn lookup_value(samples : Array[SamplePoint], time : Double) -> Double

    Evaluate a table with linear interpolation and clamped boundaries.

    low_pass_signal

    fn low_pass_signal(signal : MotionSignal, alpha : Double) -> MotionSignal

    Apply a first-order exponential low-pass filter.

    map_curve_range

    fn map_curve_range(samples : Array[SamplePoint], output_min : Double, output_max : Double) -> Array[SamplePoint]

    Compose a source curve with an output range.

    marker

    fn marker(time : Double, name : String, payload? : String) -> MotionMarker raise MotionError

    marker_cursor

    fn marker_cursor(timeline : MarkerTimeline, start_time? : Double) -> MarkerCursor

    marker_sequence

    fn marker_sequence(names : Array[String], start : Double, interval : Double) -> MarkerTimeline raise MotionError

    Build a timeline from a regular sequence of marker names.

    maximum_sample_error

    fn maximum_sample_error(first : Array[SamplePoint], second : Array[SamplePoint]) -> Double

    Return the largest absolute error between two aligned sample arrays.

    mean

    fn mean(values : Array[Double]) -> Double

    media_asset2

    fn media_asset2(id : Int, name : String, kind : MediaKind2, start : Double, duration : Double, bounds : Bounds2D) -> MediaAsset2

    media_catalog2

    fn media_catalog2() -> MediaCatalog2

    media_kinds2

    fn media_kinds2() -> Array[MediaKind2]

    median

    fn median(values : Array[Double]) -> Double

    median_filter2

    fn median_filter2(values : Array[Double], radius : Int) -> Array[Double]

    metric_within_budget2

    fn metric_within_budget2(metrics : MotionMetrics2, maximum_speed : Double, maximum_acceleration : Double) -> Bool

    mirror

    fn mirror(ease : (Double) -> Double) -> ((Double) -> Double)

    Reflect a curve around the center point, useful for reversible UI motion.

    monotone_envelope

    fn monotone_envelope(values : Array[Double]) -> Array[Double]

    Clamp a signal to a monotone non-decreasing envelope.

    monotonic_project

    fn monotonic_project(values : Array[Double], increasing : Bool) -> Array[Double]

    motion_budget2

    fn motion_budget2(maximum_speed : Double, maximum_acceleration : Double, maximum_path_length : Double) -> MotionBudget2

    motion_clip

    fn motion_clip(name : String, track : ScalarTrack, markers? : MarkerTimeline, loop_mode? : ClipLoopMode) -> MotionClip raise MotionError

    motion_event2

    fn motion_event2(time : Double, id : Int, label : String, kind : MotionEventKind2, payload? : Double) -> MotionEvent2

    motion_event_kinds2

    fn motion_event_kinds2() -> Array[MotionEventKind2]

    motion_event_queue2

    fn motion_event_queue2() -> MotionEventQueue2

    motion_limit_profile2

    fn motion_limit_profile2(maximum_velocity? : Double, maximum_acceleration? : Double, maximum_jerk? : Double, tolerance? : Double, iterations? : Int) -> MotionLimitProfile2

    motion_profile

    fn motion_profile(func : (Double) -> Double, samples : Int) -> Array[MotionSample] raise MotionError

    Produce value, velocity, and acceleration samples for a normalized curve.

    motion_report2

    fn motion_report2(name : String, metrics : Array[Double], budget : MotionBudget2, quality : RenderQualityMetrics2) -> MotionReport2

    motion_state

    fn motion_state(name : String, value : Double) -> MotionStateNode raise MotionError

    motion_transition

    fn motion_transition(from : String, to : String, duration : Double, curve? : Curve) -> MotionStateTransition raise MotionError

    moving_average

    fn moving_average(values : Array[Double], window : Int) -> Array[Double]

    Moving-average smoothing for an already sampled scalar signal.

    moving_average2

    fn moving_average2(values : Array[Double], radius : Int) -> Array[Double]

    next_event_time

    fn next_event_time(events : Array[MotionEvent2], after : Double) -> Double?

    noise_source2

    fn noise_source2(seed : Int) -> NoiseSource2

    normalize_samples

    fn normalize_samples(values : Array[Double]) -> Array[Double]

    Normalize a signal to [0, 1]. Constant signals map to zero.

    normalize_signal

    fn normalize_signal(signal : MotionSignal) -> MotionSignal

    normalize_weights

    fn normalize_weights(weights : Array[Double]) -> Array[Double]

    offset_path2d_samples

    fn offset_path2d_samples(path : Path2D, count : Int, offset : Double) -> Array[Point2]

    offset_polyline2d

    fn offset_polyline2d(line : Polyline2D, distance : Double) -> Polyline2D

    orthographic_lens

    fn orthographic_lens(height : Double, near_plane? : Double, far_plane? : Double) -> CameraLens

    palette2

    fn palette2(name : String, colors : Array[Rgba]) -> Palette2

    palette_average

    fn palette_average(colors : Array[Rgba]) -> Rgba

    palette_gradient2

    fn palette_gradient2(start : Rgba, end : Rgba, count : Int) -> Palette2

    palette_lerp

    fn palette_lerp(palette : Array[Rgba], ratio : Double) -> Rgba

    palette_nearest

    fn palette_nearest(palette : Array[Rgba], color : Rgba) -> Rgba

    palette_variance

    fn palette_variance(colors : Array[Rgba]) -> Double

    path2d_arc_parameters

    fn path2d_arc_parameters(path : Path2D, count : Int) -> Array[Double]

    path2d_closest_parameter

    fn path2d_closest_parameter(path : Path2D, target : Point2, samples : Int) -> Double

    path2d_curvature_estimate

    fn path2d_curvature_estimate(path : Path2D, parameter : Double, epsilon? : Double) -> Double

    path2d_curvature_profile

    fn path2d_curvature_profile(path : Path2D, count : Int) -> Array[Double]

    path2d_distance_to_segment

    fn path2d_distance_to_segment(path : Path2D, target : Point2, samples : Int) -> Double

    path2d_is_degenerate

    fn path2d_is_degenerate(path : Path2D, tolerance : Double) -> Bool

    path2d_motion_length

    fn path2d_motion_length(path : Path2D, start : Double, end : Double, samples : Int) -> Double

    path2d_normals

    fn path2d_normals(path : Path2D, count : Int) -> Array[Point2]

    path2d_resample_uniform

    fn path2d_resample_uniform(path : Path2D, count : Int) -> Path2DMetric2

    path2d_sample_by_distance_batch

    fn path2d_sample_by_distance_batch(path : Path2D, distances : Array[Double]) -> Array[Point2]

    path2d_split_samples

    fn path2d_split_samples(path : Path2D, parameters : Array[Double]) -> Array[Point2]

    path2d_tangent_batch

    fn path2d_tangent_batch(path : Path2D, parameters : Array[Double]) -> Array[Point2]

    path_builder2d

    fn path_builder2d(start : Point2) -> PathBuilder2D

    path_builder3d

    fn path_builder3d(start : Point3) -> PathBuilder3D

    path_chord_error

    fn path_chord_error(path : Path3D, samples : Int) -> Double

    path_cubic

    fn path_cubic(start : Point2, control_start : Point2, control_end : Point2, end : Point2) -> PathSegment2D

    path_cubic3d

    fn path_cubic3d(start : Point3, control_start : Point3, control_end : Point3, end : Point3) -> PathSegment3D

    path_is_closed

    fn path_is_closed(path : Path3D, tolerance : Double) -> Bool

    path_line

    fn path_line(start : Point2, end : Point2) -> PathSegment2D

    path_line3d

    fn path_line3d(start : Point3, end : Point3) -> PathSegment3D

    path_speed_at

    fn path_speed_at(path : Path3D, parameter : Double) -> Double

    path_speed_profile

    fn path_speed_profile(path : Path3D, count : Int) -> Array[Double]

    peak_index

    fn peak_index(values : Array[Double]) -> Int?

    percentile

    fn percentile(values : Array[Double], ratio : Double) -> Double

    Compute a percentile value from a copied and sorted scalar array.

    perspective_lens

    fn perspective_lens(field_of_view : Double, near_plane? : Double, far_plane? : Double) -> CameraLens

    point2

    fn point2(x~ : Double, y~ : Double) -> Point2

    point2_angle

    fn point2_angle(first : Point2, second : Point2) -> Double

    point2_blend_layer

    fn point2_blend_layer(value : Point2, weight : Double, mode? : LayerBlendMode, priority? : Int) -> Point2BlendLayer

    point2_cross

    fn point2_cross(first : Point2, second : Point2) -> Double

    point2_dot

    fn point2_dot(first : Point2, second : Point2) -> Double

    Dot product for planar tangent and normal calculations.

    point2_from_polar

    fn point2_from_polar(radius : Double, angle : Double) -> Point2

    point2_keyframe

    fn point2_keyframe(time : Double, value~ : Point2, curve? : Curve) -> Point2Keyframe raise MotionError

    point2_length

    fn point2_length(value : Point2) -> Double

    point2_lerp_clamped

    fn point2_lerp_clamped(first : Point2, second : Point2, ratio : Double) -> Point2

    point2_normal

    fn point2_normal(value : Point2) -> Point2

    point2_normalized

    fn point2_normalized(value : Point2) -> Point2

    point2_reflect

    fn point2_reflect(value : Point2, normal : Point2) -> Point2

    point3

    fn point3(x~ : Double, y~ : Double, z~ : Double) -> Point3

    point3_blend_layer

    fn point3_blend_layer(value : Point3, weight : Double, mode? : LayerBlendMode, priority? : Int) -> Point3BlendLayer

    point3_cross

    fn point3_cross(first : Point3, second : Point3) -> Point3

    point3_distance

    fn point3_distance(first : Point3, second : Point3) -> Double

    point3_dot

    fn point3_dot(first : Point3, second : Point3) -> Double

    point3_keyframe

    fn point3_keyframe(time : Double, value~ : Point3, curve? : Curve) -> Point3Keyframe raise MotionError

    point3_length

    fn point3_length(value : Point3) -> Double

    point3_lerp_clamped

    fn point3_lerp_clamped(first : Point3, second : Point3, ratio : Double) -> Point3

    point3_normalized

    fn point3_normalized(value : Point3) -> Point3

    point_series2

    fn point_series2(times : Array[Double], values : Array[Point2]) -> PointSeries2

    polygon2d

    fn polygon2d(vertices : Array[Point2]) -> Polygon2D

    polygon2d_from_bounds

    fn polygon2d_from_bounds(bounds : Bounds2D) -> Polygon2D

    polygon2d_rotate

    fn polygon2d_rotate(polygon : Polygon2D, angle : Double, origin? : Point2) -> Polygon2D

    polygon2d_scale

    fn polygon2d_scale(polygon : Polygon2D, scale : Point2, origin? : Point2) -> Polygon2D

    polygon2d_translate

    fn polygon2d_translate(polygon : Polygon2D, offset : Point2) -> Polygon2D

    polyline2d

    fn polyline2d(points : Array[Point2], closed? : Bool) -> Polyline2D

    polynomial_in

    fn polynomial_in(t : Double, exponent~ : Double) -> Double

    Polynomial easing with a caller-selected exponent.

    polynomial_in_out

    fn polynomial_in_out(t : Double, exponent~ : Double) -> Double

    polynomial_out

    fn polynomial_out(t : Double, exponent~ : Double) -> Double

    procedural_motion2

    fn procedural_motion2(base : Point2, velocity : Point2, jitter : JitterSequence2, envelope : Curve) -> ProceduralMotion2

    project_bounds3d

    fn project_bounds3d(camera : CameraRig, bounds : Bounds3D) -> Bounds2D

    project_safe

    fn project_safe(camera : CameraRig, point : Point3, margin : Double) -> (Point2, Bool)

    project_samples2

    fn project_samples2(camera : CameraRig, points : Array[Point3]) -> Array[ProjectionSample2]

    project_to_range

    fn project_to_range(value : Double, minimum : Double, maximum : Double) -> Double

    quad_in

    fn quad_in(t : Double) -> Double

    Quadratic acceleration.

    quad_in_out

    fn quad_in_out(t : Double) -> Double

    Quadratic acceleration followed by deceleration.

    quad_out

    fn quad_out(t : Double) -> Double

    Quadratic deceleration.

    quality_budget2

    fn quality_budget2(temporal_limit : Double, spatial_limit : Double, color_limit : Double, minimum_coverage : Double) -> QualityBudget2

    quality_budget_limits2

    fn quality_budget_limits2(budget : QualityBudget2) -> Array[Double]

    quality_sample_count2

    fn quality_sample_count2(quality : RenderQuality2) -> Int

    quantize_colors2

    fn quantize_colors2(palette : Palette2, colors : Array[Rgba]) -> Array[PaletteQuantization2]

    quantize_to_grid

    fn quantize_to_grid(time : Double, step : Double) -> Double

    quart_in

    fn quart_in(t : Double) -> Double

    Quartic acceleration.

    quart_in_out

    fn quart_in_out(t : Double) -> Double

    Quartic acceleration followed by deceleration.

    quart_out

    fn quart_out(t : Double) -> Double

    Quartic deceleration.

    quaternion

    fn quaternion(x~ : Double, y~ : Double, z~ : Double, w~ : Double) -> Quaternion

    quint_in

    fn quint_in(t : Double) -> Double

    Quintic acceleration.

    quint_in_out

    fn quint_in_out(t : Double) -> Double

    Quintic acceleration followed by deceleration.

    quint_out

    fn quint_out(t : Double) -> Double

    Quintic deceleration.

    ramp_interpolations

    fn ramp_interpolations() -> Array[RampInterpolation]

    remap_curve_values

    fn remap_curve_values(values : Array[Double], remap : CurveRemap2) -> Array[Double]

    remap_times

    fn remap_times(times : Array[Double], warp : TimeWarp) -> Array[Double]

    remap_value

    fn remap_value(value : Double, source_min : Double, source_max : Double, target_min : Double, target_max : Double) -> Double

    render_layer2

    fn render_layer2(id : Int, name : String, kind : RenderLayerKind2, order : Int, bounds : Bounds2D) -> RenderLayer2

    render_layer_kinds2

    fn render_layer_kinds2() -> Array[RenderLayerKind2]

    render_plan2

    fn render_plan2(start : Double, end : Double, clear_color : Rgba) -> RenderPlan2

    render_qualities2

    fn render_qualities2() -> Array[RenderQuality2]

    reprojection_error

    fn reprojection_error(camera : CameraRig, world : Point3) -> Double

    resample_adaptive

    fn resample_adaptive(result : AdaptiveSampleResult, count : Int) -> Array[SamplePoint] raise MotionError

    Resample an adaptive result at a fixed number of output points.

    resample_constrained_signal

    fn resample_constrained_signal(values : Array[Double], count : Int) -> Array[Double]

    resample_signal

    fn resample_signal(signal : MotionSignal, step : Double) -> MotionSignal raise MotionError

    Resample at a new step while preserving the signal's time span.

    rescale_time

    fn rescale_time(samples : Array[SamplePoint], start : Double, end : Double) -> Array[SamplePoint]

    retime_linear

    fn retime_linear(input_start : Double, input_end : Double, output_start : Double, output_end : Double) -> RetimeMap raise MotionError

    retime_segment

    fn retime_segment(input_start : Double, input_end : Double, output_start : Double, output_end : Double, curve? : Curve) -> RetimeSegment raise MotionError

    reverse_samples

    fn reverse_samples(samples : Array[SamplePoint]) -> Array[SamplePoint]

    Reverse the time direction while preserving the original sample order in the returned array, making it convenient for playback direction toggles.

    rgba

    fn rgba(r~ : Double, g~ : Double, b~ : Double, a? : Double) -> Rgba

    rgba_keyframe

    fn rgba_keyframe(time : Double, value~ : Rgba, curve? : Curve) -> RgbaKeyframe raise MotionError

    rms

    fn rms(values : Array[Double]) -> Double

    sample_cache_key2

    fn sample_cache_key2(track_id : Int, revision : Int, samples : Int, start : Double, end : Double) -> SampleCacheKey2

    sample_curve_batch

    fn sample_curve_batch(curve : Curve, count : Int) -> ScalarSeries2

    sample_function

    fn sample_function(func : (Double) -> Double, start : Double, end : Double, count : Int) -> Array[SamplePoint] raise MotionError

    Sample a function on a uniform grid. This is useful for waveform and curve previews.

    sample_lut_batch

    fn sample_lut_batch(table : CurveLookupTable, count : Int) -> ScalarSeries2

    sample_path3d

    fn sample_path3d(path : Path3D, parameter : Double) -> PathSample3D

    sample_path3d_by_distance

    fn sample_path3d_by_distance(path : Path3D, distance : Double) -> PathSample3D

    sample_track

    fn sample_track(track : ScalarTrack, config : SamplingConfig, mode? : Extrapolation) -> Array[SamplePoint]

    sample_tween

    fn sample_tween(tween : Tween, config : SamplingConfig) -> Array[SamplePoint]

    sample_validation_policy2

    fn sample_validation_policy2() -> SampleValidationPolicy2

    scalar_blend_layer

    fn scalar_blend_layer(value : Double, weight : Double, mode? : LayerBlendMode, priority? : Int) -> ScalarBlendLayer

    scalar_channel

    fn scalar_channel(name : String, track : ScalarTrack, enabled? : Bool, weight? : Double, offset? : Double) -> ScalarChannel raise MotionError

    scalar_series2

    fn scalar_series2(times : Array[Double], values : Array[Double]) -> ScalarSeries2

    scale_markers

    fn scale_markers(timeline : MarkerTimeline, factor : Double) -> MarkerTimeline raise MotionError

    Return a copy with marker times scaled around the origin.

    screen_safe_bounds

    fn screen_safe_bounds(viewport : Viewport, margin : Double) -> Bounds2D

    screen_safe_contains

    fn screen_safe_contains(viewport : Viewport, point : Point2, margin : Double) -> Bool

    sequence_item

    fn sequence_item(clip : MotionClip, start : Double, weight? : Double) -> ClipSequenceItem raise MotionError

    shake_falloff_value

    fn shake_falloff_value(mode : ShakeFalloff2, ratio : Double) -> Double

    shake_falloffs2

    fn shake_falloffs2() -> Array[ShakeFalloff2]

    shift_markers

    fn shift_markers(timeline : MarkerTimeline, offset : Double) -> MarkerTimeline raise MotionError

    Return a copy with all marker times shifted by an offset.

    signal_autocorrelation2

    fn signal_autocorrelation2(values : Array[Double], lag : Int) -> Double

    signal_derivative2

    fn signal_derivative2(values : Array[Double], frame_rate : Double) -> Array[Double]

    signal_energy

    fn signal_energy(signal : MotionSignal) -> Double

    signal_envelope2

    fn signal_envelope2(values : Array[Double], radius : Int) -> (Array[Double], Array[Double])

    signal_integrate2

    fn signal_integrate2(values : Array[Double], frame_rate : Double, initial : Double) -> Array[Double]

    signal_maximum

    fn signal_maximum(signal : MotionSignal) -> Double?

    signal_mean2

    fn signal_mean2(values : Array[Double]) -> Double

    signal_minimum

    fn signal_minimum(signal : MotionSignal) -> Double?

    signal_normalize2

    fn signal_normalize2(values : Array[Double]) -> Array[Double]

    signal_residual2

    fn signal_residual2(values : Array[Double], smooth_radius : Int) -> Array[Double]

    signal_rms

    fn signal_rms(signal : MotionSignal) -> Double

    signal_rms2

    fn signal_rms2(values : Array[Double]) -> Double

    signal_to_samples

    fn signal_to_samples(signal : MotionSignal) -> Array[SamplePoint]

    signal_variance2

    fn signal_variance2(values : Array[Double]) -> Double

    simplify_samples

    fn simplify_samples(samples : Array[SamplePoint], tolerance : Double) -> Array[SamplePoint] raise MotionError

    Remove samples that are within a scalar tolerance of their chord.

    sine_in

    fn sine_in(t : Double) -> Double

    Sine acceleration.

    sine_in_out

    fn sine_in_out(t : Double) -> Double

    Sine acceleration followed by deceleration.

    sine_out

    fn sine_out(t : Double) -> Double

    Sine deceleration.

    smooth_damp

    fn smooth_damp(current : Double, target : Double, velocity : Double, smooth_time : Double, delta_time : Double) -> (Double, Double)

    smooth_signal

    fn smooth_signal(signal : MotionSignal, radius : Int) -> MotionSignal

    Create a centered moving average; edge windows are shortened rather than padded, avoiding artificial impulses at clip boundaries.

    soft_limit

    fn soft_limit(value : Double, minimum : Double, maximum : Double, softness : Double) -> Double

    Apply a soft saturation instead of a hard clamp near both bounds.

    soft_range2

    fn soft_range2(minimum : Double, maximum : Double, softness? : Double, restitution? : Double) -> SoftRange2

    solve_constrained_points2

    fn solve_constrained_points2(values : Array[Point2], config : ConstraintSolveConfig) -> Array[Point2]

    solve_constrained_points3

    fn solve_constrained_points3(values : Array[Point3], config : ConstraintSolveConfig) -> Array[Point3]

    solve_constrained_signal

    fn solve_constrained_signal(values : Array[Double], config : ConstraintSolveConfig) -> ConstraintSolveResult

    solve_distance_constraint

    fn solve_distance_constraint(current : Point3, target : Point3, distance : Double) -> Point3

    solve_orthographic_height

    fn solve_orthographic_height(camera : CameraRig, bounds : Bounds3D, margin : Double) -> Double

    split_export_chunks

    fn split_export_chunks(schedule : FrameSchedule2, chunk_size : Int, bytes_per_frame : Int) -> Array[ExportChunk2]

    spring_spec

    fn spring_spec(stiffness : Double, damping : Double, mass? : Double, initial_velocity? : Double) -> SpringSpec raise MotionError

    stagger

    fn stagger(count : Int, delay : Double, interval : Double) -> Array[Double]

    standard_deviation

    fn standard_deviation(values : Array[Double]) -> Double

    summarize_diagnostics

    fn summarize_diagnostics(reports : Array[DiagnosticReport2]) -> DiagnosticSummary2

    summarize_evaluations

    fn summarize_evaluations(values : Array[TimelineEvaluation2]) -> EvaluationStats2

    tempo_point2

    fn tempo_point2(beat : Double, bpm : Double) -> TempoPoint2

    threshold_crossings

    fn threshold_crossings(samples : Array[SamplePoint], threshold : Double) -> Array[Double] raise MotionError

    Find crossings of a scalar threshold, using linear interpolation in each span.

    time_signature2

    fn time_signature2(numerator : Int, denominator : Int) -> TimeSignature2

    timecode2

    fn timecode2(seconds : Double, frame_rate : Double) -> Timecode2

    timeline_edge_kinds

    fn timeline_edge_kinds() -> Array[TimelineEdgeKind]

    timeline_evaluator2

    fn timeline_evaluator2(graph : TimelineGraph, render_plan : RenderPlan2) -> TimelineEvaluator2

    timeline_graph

    fn timeline_graph() -> TimelineGraph

    timeline_graph_edge

    fn timeline_graph_edge(from : Int, to : Int, kind : TimelineEdgeKind) -> TimelineGraphEdge

    timeline_graph_node

    fn timeline_graph_node(id : Int, name : String, start : Double, duration : Double) -> TimelineGraphNode

    tone_map

    fn tone_map(color : Rgba, mode : ToneMapping) -> Rgba

    tone_mapping_presets

    fn tone_mapping_presets() -> Array[ToneMapping]

    total_variation

    fn total_variation(samples : Array[SamplePoint]) -> Double

    Estimate total variation, which is useful for quantizing a motion signal.

    track_slot

    fn track_slot(name : String, track : ScalarTrack, offset? : Double, enabled? : Bool) -> TrackSlot

    transform2_sample

    fn transform2_sample(time : Double, value : Transform2D) -> Transform2Sample

    transform2d

    fn transform2d(position~ : Point2, scale~ : Point2, rotation~ : Double, skew? : Double) -> Transform2D

    transform2d_apply

    fn transform2d_apply(value : Transform2D, point : Point2) -> Point2

    transform2d_from_affine

    fn transform2d_from_affine(value : Affine2D) -> Transform2D

    transform3_axes

    fn transform3_axes(value : Transform3D) -> (Point3, Point3, Point3)

    transform3_blend_layer

    fn transform3_blend_layer(value : Transform3D, weight : Double, priority? : Int) -> Transform3BlendLayer

    transform3_clamp_scale

    fn transform3_clamp_scale(value : Transform3D, minimum : Point3, maximum : Point3) -> Transform3D

    transform3_delta

    fn transform3_delta(first : Transform3D, second : Transform3D) -> Transform3Delta

    transform3_distance

    fn transform3_distance(first : Transform3D, second : Transform3D) -> Double

    transform3_keyframe

    fn transform3_keyframe(time : Double, value~ : Transform3D, curve? : Curve) -> Transform3Keyframe raise MotionError

    transform3_local_point

    fn transform3_local_point(value : Transform3D, point : Point3) -> Point3

    transform3_look_at

    fn transform3_look_at(position : Point3, target : Point3, up : Point3) -> Transform3D

    transform3_track_error

    fn transform3_track_error(track : Transform3Track, samples : Int) -> Double raise MotionError

    transform3_world_point

    fn transform3_world_point(value : Transform3D, point : Point3) -> Point3

    transform3d

    fn transform3d(position~ : Point3, rotation~ : Quaternion, scale~ : Point3) -> Transform3D

    transform3d_average

    fn transform3d_average(values : Array[Transform3D], weights : Array[Double]) -> Transform3D

    transform_keyframe

    fn transform_keyframe(time : Double, value~ : Transform2D, curve? : Curve) -> TransformKeyframe raise MotionError

    transport_frame_count

    fn transport_frame_count(range : TransportRange, frame_rate : Double) -> Int

    transport_frames

    fn transport_frames(range : TransportRange, frame_rate : Double, markers? : MarkerTimeline) -> Array[TransportFrame] raise MotionError

    transport_progress

    fn transport_progress(range : TransportRange, time : Double) -> Double

    transport_range

    fn transport_range(start : Double, end : Double) -> TransportRange raise MotionError

    transport_time_at_frame

    fn transport_time_at_frame(range : TransportRange, frame_rate : Double, frame : Int) -> Double

    validate_export_dimensions

    fn validate_export_dimensions(width : Int, height : Int, maximum : Int) -> Bool

    validate_lut2

    fn validate_lut2(name : String, table : CurveLookupTable, curve : Curve, policy : SampleValidationPolicy2) -> DiagnosticReport2

    validate_sample_times2

    fn validate_sample_times2(name : String, times : Array[Double], policy : SampleValidationPolicy2) -> DiagnosticReport2

    validate_sample_values2

    fn validate_sample_values2(name : String, values : Array[Double], policy : SampleValidationPolicy2) -> DiagnosticReport2

    validation_bundle2

    fn validation_bundle2(reports : Array[DiagnosticReport2]) -> ValidationBundle2

    variance

    fn variance(values : Array[Double]) -> Double

    vector_field2

    fn vector_field2(mode : VectorFieldMode2) -> VectorField2

    vector_field_modes2

    fn vector_field_modes2() -> Array[VectorFieldMode2]

    vector_field_value

    fn vector_field_value(mode : VectorFieldMode2, position : Point2, time : Double) -> Point2

    viewport

    fn viewport(width : Double, height : Double, pixel_ratio? : Double) -> Viewport