SpectrumExpression type

Spectrum expression tree describing a video processing pipeline. Each expression takes a source (another expression) and transforms it.

Signature:

export type SpectrumExpression = {
    type: "source";
    name?: string;
} | {
    type: "resize";
    source: SpectrumExpression;
    width: number;
    height: number;
    algorithm?: ResizeAlgorithm;
    name?: string;
} | {
    type: "crop";
    source: SpectrumExpression;
    x: number;
    y: number;
    width: number;
    height: number;
    maintainAspect?: boolean;
    fillMode?: CropFillMode;
    name?: string;
} | {
    type: "compose";
    source: SpectrumExpression;
    overlays: CompositeLayer[];
    name?: string;
} | {
    type: "colorGrade";
    source: SpectrumExpression;
    liftR?: number;
    liftG?: number;
    liftB?: number;
    gammaR?: number;
    gammaG?: number;
    gammaB?: number;
    gainR?: number;
    gainG?: number;
    gainB?: number;
    hueShift?: number;
    saturation?: number;
    lightness?: number;
    brightness?: number;
    contrast?: number;
    vibrance?: number;
    shadowsR?: number;
    shadowsG?: number;
    shadowsB?: number;
    highlightsR?: number;
    highlightsG?: number;
    highlightsB?: number;
    midtonesR?: number;
    midtonesG?: number;
    midtonesB?: number;
    name?: string;
} | {
    type: "toneMap";
    source: SpectrumExpression;
    algorithm: ToneMapMethod;
    peakNits: number;
    displayNits: number;
    exposure?: number;
    contrast?: number;
    saturation?: number;
    name?: string;
} | {
    type: "lut";
    source: SpectrumExpression;
    lutData: number[];
    lutDimensionSize: number;
    interpolationMethod?: LutInterpolationMethod;
    strength?: number;
    name?: string;
} | {
    type: "transferFunction";
    source: SpectrumExpression;
    targetTransfer: TransferFunction;
    sourceTransfer?: TransferFunction;
    name?: string;
} | {
    type: "gamutMap";
    source: SpectrumExpression;
    targetPrimaries: ColorPrimaries;
    sourcePrimaries?: ColorPrimaries;
    method: GamutMappingMethod;
    name?: string;
} | {
    type: "frameRateConvert";
    source: SpectrumExpression;
    targetFpsNum: number;
    targetFpsDen: number;
    method?: FRCMethod;
    name?: string;
} | {
    type: "deinterlace";
    source: SpectrumExpression;
    method?: DeinterlaceMethod;
    fieldOrder?: FieldOrder;
    name?: string;
} | {
    type: "interlace";
    source: SpectrumExpression;
    fieldOrder?: FieldOrder;
    name?: string;
};