class export
ApexPainter
Primary server-side rendering and media façade for the current Apexify.js package.
apexify.jsCURRENTnode22node24node26
Source: lib-next/apex-painter/main.ts (opens in a new tab)Signature
export declare class ApexPainter {
private readonly _outputFormat;
private readonly canvasCreator;
private readonly imageCreator;
private readonly textCreator;
private readonly textMetricsCreator;
private readonly path2DCreator;
private readonly hitDetectionCreator;
private readonly pixelDataCreator;
private readonly gifCreator;
private readonly chartCreator;
private readonly sceneCreator;
private readonly canvasCreate;
private readonly imageTextCreate;
private readonly sceneCreate;
private readonly chartCreate;
private readonly gifCreate;
private readonly videoCreate;
private readonly audioCreate;
private readonly templateCreate;
private readonly outputSaveCreate;
/**
* Shared FFmpeg session + {@link VideoCreator}. Prefer {@link createVideo}, {@link getVideoInfo},
* {@link extractFrameAtTime}, etc.; use `video` when you need the stack object itself.
*/
readonly video: VideoStack;
/**
* Named composition assets for `$id` / dotted-path resolution. Duplicate registrations are rejected unless
* an explicit `replace*` method is used.
*/
readonly assets: AssetManager;
/**
* Optional extension APIs registered with {@link ApexPainter.plugins.use}.
*/
readonly plugins: PluginHost;
/**
* Reusable scene fragments (**`badge`**, **`progressBar`**, **`avatar`**, **`card`**, **`watermark`**) returning {@link SceneLayer}[].
*/
readonly components: PainterComponents;
/**
* Stitch, collage, compress, palette, resize, convert, filters, blend, crop, mask, gradient, hex check.
*/
readonly image: PainterImageUtils;
/**
* Procedural sound synthesis (WAV buffers for {@link createVideo} `mixAudio`, games, UI SFX).
* `painter.createAudio.preset('laser')`, `.synth({ layers })`, `.sequence({ events })`, `.mix([...])`.
*/
readonly createAudio: PainterCreateAudio;
private _detect;
private _path2d;
private _pixels;
private _output;
private readonly _saveSession;
constructor({ type }?: OutputFormat);
get outputFormat(): OutputFormat;
get detect(): PainterHitDetect;
get path2d(): PainterPath2D;
get pixels(): PainterPixels;
get output(): PainterOutput;
private maybeResolveRefs;
/**
* Deep-resolves `$name` / `$value.path` leaves across composition data, using {@link assets}.
* Escape a literal dollar sign as `$$`.
*/
prepareForRender<T>(value: T): T;
createCanvas(canvas: CanvasConfig, painterOpts?: PainterAssetRefsOptions): Promise<CanvasResults>;
createImage(images: ImageProperties | ImageProperties[], canvasBuffer: CanvasResults | Buffer, options?: CreateImageOptions, painterOpts?: PainterAssetRefsOptions): Promise<Buffer>;
createText(textArray: TextProperties | TextProperties[], canvasBuffer: CanvasResults | Buffer, painterOpts?: PainterAssetRefsOptions): Promise<Buffer>;
measureText(textProps: TextProperties, painterOpts?: PainterAssetRefsOptions): Promise<TextMetrics>;
/**
* Layered scene composition (chart / image / text / path / surface). Layer array order is stable bottom-to-top.
* Builder inputs are copied on ingress and render snapshots are isolated from later caller mutation.
*/
createScene(config: {
width: number;
height: number;
background?: SceneRenderInput["background"];
layers?: SceneLayer[];
}): SceneBuilder;
createScene(width: number, height: number): SceneBuilder;
/**
* Reusable immutable scene design: native-value `{{placeholders}}`, `$namedAssets`, flex/grid layout nodes,
* precise `visible` conditionals, unique `id` overrides, and deterministic render-time insertions.
*/
createTemplate(definition: TemplateSceneDefinition, options?: TemplateOptions): TemplateHandle;
/**
* Installs one named plugin transactionally. Installation is serialized and may be asynchronous; callers must await it.
*/
use(plugin: ApexifyPlugin<ApexPainter>): Promise<this>;
renderScene(input: SceneRenderInput, options?: SceneRenderOptions): Promise<Buffer>;
/**
* Validates scene dimensions, aggregate composition budgets, nested surfaces, text/image/chart counts, remote assets,
* and finite transforms. Validation is mandatory before rendering.
*/
validateSceneRenderInput(input: SceneRenderInput, options?: Pick<SceneRenderOptions, "maxSurfaceDepth">): void;
renderSceneToGIF(scene: SceneRenderInput, gif: {
options: GIFOptions;
gifFrames?: SceneGifInputFrame[];
prependComposedRaster?: boolean;
composedFrameDuration?: number;
composedFrameRepeat?: number;
sceneRender?: SceneRenderOptions;
}): Promise<Awaited<ReturnType<GIFCreator["createGIF"]>>>;
renderSceneToVideoFrames(scene: SceneRenderInput, video: {
options: VideoCreationOptions;
prependComposedToFrames?: boolean;
framesWithRepeats?: SceneVideoFrameSlot[];
sceneRender?: SceneRenderOptions;
}): Promise<SceneToVideoResult>;
createVideo(options: VideoCreationOptions, painterOpts?: PainterAssetRefsOptions): Promise<SceneToVideoResult>;
/**
* Declarative video edit pipeline (trim, splice, text, audio + synth). Layer `id` upserts — no duplicate ops.
*/
videoPipeline(source?: string | Buffer, initialLayers?: import("../types/video-pipeline.js").VideoPipelineLayer[]): import("../video/video-pipeline-builder.js").VideoPipeline;
getVideoInfo(source: string | Buffer, skipFfmpegCheck?: boolean): Promise<import("../index.js").VideoProbeMetadata>;
extractFrames(videoSource: string | Buffer, options: ExtractFramesOptions): Promise<{
source: string;
isRemote: boolean;
}[]>;
extractAllFrames(videoSource: string | Buffer, options?: ExtractAllFramesOptions): Promise<{
source: string;
frameNumber: number;
time: number;
}[]>;
extractFrameAtTime(videoSource: string | Buffer, timeSeconds: number, outputFormat?: "jpg" | "png", quality?: number): Promise<Buffer<ArrayBufferLike>>;
extractFrameByNumber(videoSource: string | Buffer, frameNumber: number, outputFormat?: "jpg" | "png", quality?: number): Promise<Buffer<ArrayBufferLike>>;
extractMultipleFrames(videoSource: string | Buffer, times: number[], outputFormat?: "jpg" | "png", quality?: number): Promise<Buffer<ArrayBufferLike>[]>;
createChart<T extends "pie" | "bar" | "horizontalBar" | "line" | "scatter" | "radar" | "polarArea">(chartType: T, data: T extends "pie" ? PieSlice[] : T extends "bar" ? BarChartData[] : T extends "horizontalBar" ? HorizontalBarChartData[] : T extends "line" ? LineSeries[] : T extends "scatter" ? ScatterSeries[] : T extends "radar" ? RadarSeries[] : T extends "polarArea" ? PolarAreaSlice[] : never, options?: T extends "pie" ? PieChartOptions : T extends "bar" ? BarChartOptions : T extends "horizontalBar" ? HorizontalBarChartOptions : T extends "line" ? LineChartOptions : T extends "scatter" ? ScatterChartOptions : T extends "radar" ? RadarChartOptions : T extends "polarArea" ? PolarAreaChartOptions : never, painterOpts?: PainterAssetRefsOptions): Promise<Buffer>;
createComparisonChart(options: import("../chart/impl/comparisonchart.js").ComparisonChartOptions, painterOpts?: PainterAssetRefsOptions): Promise<Buffer>;
createComboChart(options: import("../chart/impl/combochart.js").ComboChartOptions, painterOpts?: PainterAssetRefsOptions): Promise<Buffer>;
createGIF(gifFrames: GIFInputFrame[] | undefined, options: GIFOptions, painterOpts?: PainterAssetRefsOptions): Promise<Awaited<ReturnType<GIFCreator["createGIF"]>>>;
animate(frames: Frame[], defaultDuration: number, defaultWidth?: number, defaultHeight?: number, options?: import("../gif/animate-frames.js").AnimateOptions, painterOpts?: PainterAssetRefsOptions): Promise<Buffer[] | undefined>;
batch(operations: BatchOperation[], opts?: BatchChainAssetOpts): Promise<Buffer[]>;
chain(operations: ChainOperation[], opts?: BatchChainAssetOpts): Promise<Buffer>;
/** Convert a rendered buffer to this painter instance's configured output representation. */
toOutput(results: Buffer): Promise<Buffer | string | Blob | ArrayBuffer>;
/** @deprecated Use {@link toOutput} instead. Retained for Apexify.js 5.x/6.x compatibility. */
outPut(results: Buffer): Promise<Buffer | string | Blob | ArrayBuffer>;
save(buffer: Buffer, options?: SaveOptions): Promise<SaveResult>;
saveMultiple(buffers: Buffer[], options?: SaveOptions): Promise<SaveResult[]>;
}Members
Related APIs
No explicit related API metadata.