remotion
Version:
Make videos programmatically
99 lines (98 loc) • 3.48 kB
TypeScript
import type { ComponentType, LazyExoticComponent } from 'react';
import React from 'react';
import type { AnyZodObject } from 'zod';
import type { CalculateMetadataFunction } from './Composition.js';
import type { BaseMetadata } from './CompositionManagerContext.js';
import type { DownloadBehavior } from './download-behavior.js';
import type { InferProps, PropsIfHasProps } from './props-if-has-props.js';
export type TComposition<Schema extends AnyZodObject, Props extends Record<string, unknown>> = {
width: number | undefined;
height: number | undefined;
fps: number | undefined;
durationInFrames: number | undefined;
id: string;
folderName: string | null;
parentFolderName: string | null;
component: LazyExoticComponent<ComponentType<Props>>;
nonce: number;
schema: Schema | null;
calculateMetadata: CalculateMetadataFunction<InferProps<Schema, Props>> | null;
} & PropsIfHasProps<Schema, Props>;
export type AnyComposition = TComposition<AnyZodObject, Record<string, unknown>>;
export type TCompMetadataWithCalcFunction<Schema extends AnyZodObject, Props extends Record<string, unknown>> = Pick<TComposition<Schema, Props>, 'id' | 'height' | 'width' | 'fps' | 'durationInFrames' | 'defaultProps' | 'calculateMetadata'>;
export type TCompMetadata<Schema extends AnyZodObject, Props extends Record<string, unknown>> = Pick<TComposition<Schema, Props>, 'id' | 'height' | 'width' | 'fps' | 'durationInFrames' | 'defaultProps'>;
export type AnyCompMetadata = TCompMetadata<AnyZodObject, Record<string, unknown>>;
type EnhancedTSequenceData = {
type: 'sequence';
} | {
type: 'audio';
src: string;
volume: string | number;
doesVolumeChange: boolean;
startMediaFrom: number;
playbackRate: number;
} | {
type: 'video';
src: string;
volume: string | number;
doesVolumeChange: boolean;
startMediaFrom: number;
playbackRate: number;
};
export type LoopDisplay = {
numberOfTimes: number;
startOffset: number;
durationInFrames: number;
};
export type TSequence = {
from: number;
duration: number;
id: string;
displayName: string;
parent: string | null;
rootId: string;
showInTimeline: boolean;
nonce: number;
loopDisplay: LoopDisplay | undefined;
stack: string | null;
premountDisplay: number | null;
} & EnhancedTSequenceData;
export type AudioOrVideoAsset = {
type: 'audio' | 'video';
src: string;
id: string;
frame: number;
volume: number;
mediaFrame: number;
playbackRate: number;
toneFrequency: number | null;
audioStartFrame: number;
};
type DiscriminatedArtifact = {
contentType: 'binary';
content: string;
} | {
contentType: 'text';
content: string;
} | {
contentType: 'thumbnail';
};
export type ArtifactAsset = {
type: 'artifact';
id: string;
filename: string;
frame: number;
downloadBehavior: DownloadBehavior | null;
} & DiscriminatedArtifact;
export type TRenderAsset = AudioOrVideoAsset | ArtifactAsset;
export declare const compositionsRef: React.RefObject<{
getCompositions: () => AnyComposition[];
} | null>;
export declare const CompositionManagerProvider: React.FC<{
readonly children: React.ReactNode;
readonly numberOfAudioTags: number;
readonly onlyRenderComposition: string | null;
readonly currentCompositionMetadata: BaseMetadata | null;
readonly audioLatencyHint: AudioContextLatencyCategory;
}>;
export {};