Codeboard.
Technical referenceAPI signaturesData shapes

Animation types

Data shapes for animation. See all type groups for other domains and shared units. Import public types from codeboard-studio; helper shapes are included to explain nested values.

TwoBoneRig

Code
export interface TwoBoneRig {
    elbowId: Id;
    upperLength: number;
    lowerLength: number;
    restPose?: {
        root: {
            x: number;
            y: number;
            rotation: number;
        };
        elbowRotation: number;
    };
}

DrawingExposure

Code
export interface DrawingExposure {
    frame: number;
    drawingId: Id | null;
}

DrawingInterval

Code
export interface DrawingInterval {
    startFrame: number;
    endFrame: number;
    drawingId: Id | null;
}

DrawingNeighbors

Code
export interface DrawingNeighbors {
    current: DrawingInterval;
    previous: DrawingInterval | null;
    next: DrawingInterval | null;
}

Transition

Code
export interface Transition {
    type: "cut" | "dissolve" | "wipe-left" | "wipe-right";
    durationFrames: number;
}

Easing

Code
export type Easing = "linear" | "ease-in-out" | "hold" | {
    type: "cubic-bezier";
    x1: number;
    y1: number;
    x2: number;
    y2: number;
};

CameraChannel

Code
export type CameraChannel = "x" | "y" | "zoom" | "rotation";

CameraKeyframe

Code
export interface CameraKeyframe {
    id: Id;
    frame: number;
    x?: number;
    y?: number;
    zoom?: number;
    rotation?: number;
    easing: Easing;
    channelEasing?: Partial<Record<CameraChannel, Easing>>;
}

LayerEffectChannel

Code
export type LayerEffectChannel = "offsetX" | "offsetY" | "opacity";

LayerEffectValue

Code
export interface LayerEffectValue {
    index: number;
    channel?: LayerEffectChannel;
    value: number;
    easing?: Easing;
}

LayerKeyframe

Code
export interface LayerKeyframe {
    effectValues?: LayerEffectValue[];
    id: Id;
    frame: number;
    transform: Partial<Transform>;
    opacity?: number;
    depth?: number;
    easing: Easing;
    channelEasing?: Partial<Record<LayerChannel, Easing>>;
}

LayerChannel

Code
export type LayerChannel = keyof Transform | "opacity" | "depth";

CameraKeyframeInput

Code
export type CameraKeyframeInput = Partial<Pick<CameraKeyframe, CameraChannel | "easing">>;

CameraKeyframeChanges

Code
export type CameraKeyframeChanges = Partial<Omit<CameraKeyframe, "id">>;

LayerKeyframeInput

Code
export interface LayerKeyframeInput {
    effectValues?: LayerKeyframe["effectValues"];
    transform?: Partial<Transform>;
    opacity?: number;
    depth?: number;
    easing?: LayerKeyframe["easing"];
}

LayerKeyframeChanges

Code
export type LayerKeyframeChanges = Partial<Omit<LayerKeyframe, "id">>;

MouthCue

Code
export interface MouthCue {
    startFrame: number;
    endFrame: number;
    mouth: string;
}

LipSyncOptions

Code
export interface LipSyncOptions {
    startFrame: number;
    endFrame: number;
    mouths: Record<string, string | null>;
    restDrawingId: string | null;
    cues: readonly MouthCue[];
    corrections?: readonly DrawingInterval[];
}

LipSyncTimingOptions

Code
export interface LipSyncTimingOptions {
    sourceRate: RationalRate;
    targetRate: RationalRate;
    rounding?: TimeRounding;
}

ShotMergeOptions

Code
export type ShotMergeOptions = ValueMergeOptions;

ShotMergeConflict

Code
export type ShotMergeConflict = ValueMergeConflict;

ShotMergeReport

Code
export type ShotMergeReport = ValueMergeReport;

TwoBoneSolution

Code
export interface TwoBoneSolution {
    rootRotation: number;
    elbowRotation: number;
    elbow: {
        x: number;
        y: number;
    };
    end: {
        x: number;
        y: number;
    };
    reachable: boolean;
    error: number;
}

RationalRate

Code
export interface RationalRate {
    numerator: number;
    denominator: number;
}

TimeRounding

Code
export type TimeRounding = "nearest" | "floor" | "ceil" | "exact";

TimeConversion

Code
export interface TimeConversion {
    value: number;
    exact: boolean;
    /** Rounded value minus the exact position, in destination ticks. */
    error: {
        numerator: string;
        denominator: string;
    };
}

EvaluatedCamera

Code
export interface EvaluatedCamera {
    x: number;
    y: number;
    zoom: number;
    rotation: number;
}

ShotRetimeReport

Code
export interface ShotRetimeReport {
    animationId: string;
    before: {
        durationFrames: number;
        frameRate: RationalRate;
    };
    after: {
        durationFrames: number;
        frameRate: RationalRate;
    };
    rounding: TimeRounding;
    positions: number;
    movedPositions: number;
    quantizedPositions: number;
    audio: {
        policy: ShotRetimeOptions["audio"];
        clips: number;
        movedStarts: number;
    };
}

CoordinateOptions

Code
export interface CoordinateOptions {
    frame?: number;
    camera?: boolean;
}

ArtworkCoordinateSpace

Code
export interface ArtworkCoordinateSpace {
    layerId: string;
    rootLayerId: string;
    targetId: string;
    frame: number;
    localToFrame: AffineMatrix;
    frameToLocal: AffineMatrix | null;
    parentToFrame: AffineMatrix;
    frameToParent: AffineMatrix | null;
}

ShotCoordinateSpace

Code
export interface ShotCoordinateSpace extends ArtworkCoordinateSpace {
    animationId: string;
}

ShotMeshQuery

Code
export type ShotMeshQuery = PageOptions & ({
    collection: "vertices";
    frame?: number;
} | {
    collection: "triangles" | "keyframes" | "joints" | "weights";
});

ShotPointOptions

Code
export interface ShotPointOptions extends CoordinateOptions {
    direction: "localToFrame" | "frameToLocal";
}

ShotPointCandidate

Code
export interface ShotPointCandidate {
    point: {
        x: number;
        y: number;
    };
    faces: {
        layerId: string;
        triangleIndex: number;
        weights: number[];
    }[];
}

ShotControllerQuery

Code
export type ShotControllerQuery = PageOptions & {
    collection: "targets" | "keyframes";
    frame?: number;
};

ControllerTransferOptions

Code
export interface ControllerTransferOptions {
    controllers: readonly {
        sourceId: string;
        targetId: string;
    }[];
    layers: readonly {
        sourceId: string;
        targetId: string;
    }[];
    frameOffset: number;
    sourceRange?: {
        startFrame: number;
        endFrame: number;
    };
}

ControllerCaptureOptions

Code
export type ControllerCaptureOptions = {
    id: string;
    name: string;
    frame: number;
    evaluation: "base" | "controlled";
    targets: readonly {
        layerId: string;
        channels: readonly LayerChannel[];
    }[];
} & ({
    mode: "replace";
} | {
    mode: "additive";
    referenceFrame: number;
});

ControllerPerformance

Code
export interface ControllerPerformance {
    format: "codeboard-controller-performance";
    version: 1;
    id: string;
    name: string;
    frameRate: RationalRate;
    controllers: ShotController[];
    sha256: string;
}

On this page