Layer SDK
The most up-to-date Typescript for the SDK can be found at https://script.layerstatic.com/layer/sdk-latest.d.ts
Last updated on December 10, 2025
declare global {
const $layer: LayerSDK;
}
declare function addEventListener(
type: LayerEvent,
listener: EventListenerOrEventListenerObject,
options?: boolean | AddEventListenerOptions
): void;
export interface LayerParamChangeEvent extends CustomEvent {
detail: {
id: string;
value: boolean | string | number | ColorResult;
};
};
export type LayerEvent =
| 'layer:parameters' // Signals update to one or more parameters in studio
| 'layer:paramchange' // Signals update to one parameter in studio
export type ParameterOption = {
value: string;
label?: string;
};
export type Parameter = NumberParameter
| BooleanParameter
| ColorParameter
| ListParameter
| HashParameter;
export type BaseParameter = {
// used to identify the parameter field, e.g. $layer.parameters[parameter.id]
id: string;
// The text displayed to the user for this parameter
name: string;
// Determines the inputs and outputs of the parameter
kind: 'NUMBER' | 'BOOLEAN' | 'COLOR' | 'LIST' | 'HASH';
// Displayed as a tooltip for aiding a user in understanding
// the application of the parameter's value
description?: string;
// Determines which group of users has access to set custom values
// for this parameter. defaults to VIEWER
customization_level?: 'ARTIST' | 'CURATOR' | 'VIEWER';
// default value
default?: any;
};
export type ColorParameter = BaseParameter & {
kind: 'COLOR';
// A HEX color string, pattern: /^#[A-Fa-f0-9]{6}$/, default #FFFFFF
default?: string;
};
export type BooleanParameter = BaseParameter & {
kind: 'BOOLEAN';
default?: boolean;
};
export type NumberParameter = BaseParameter & {
kind: 'NUMBER';
min?: number | string; // default 0
max?: number | string; // default 100
step?: number | string; // default 1.0
default?: number | string;
};
export type ListParameter = BaseParameter & {
kind: 'LIST';
options: Array<ParameterOption | string>;
default?: string;
};
export type HashParameter = BaseParameter & {
kind: 'HASH';
default?: string;
// default pattern is ALPHANUMERIC
pattern?: 'ALPHANUMERIC' | 'HEX' | 'ALPHABETIC' | 'BASE64';
minLength?: number;
maxLength?: number;
};
export interface ColorResult extends String {
readonly rgb: [number, number, number] | null;
readonly hsl: [number, number, number] | null;
readonly hex: string | null;
};
export type LayerSDK = {
// desired resolution of art piece
width: number;
height: number;
// Turn on 'layer:preview' events
previewEnabled: boolean;
// Indicates the SDK is being used on a Layer managed domain or not.
readonly devMode: boolean;
// A UUID that is unique to this version of the parameters
readonly uuid: string;
// a randomly generated float seeded with the UUID
readonly prng: number;
// A dictionary of field/value pairs that correspond to the .id
// property of the parameters defined by $layer.params(...entries)
// and either the default value of that property or the value passed
// from the parent platform.
readonly parameters: Readonly<Record<string, boolean | string | number | ColorResult>>;
// Define one or more parameters using the Parameter schema.
// Resolves to the initialized value of the parameters.
params(...params: Parameter[]): Promise<LayerSDK['parameters']>;
// supply the parent platform with a generated video with MIME video/mp4
// optionally, supply a thumbnail image also, otherwise the first frame of
// the video will be captured as the thumbnail
preview(video: Blob, thumbnail?: Blob): LayerSDK;
// Register a canvas element that can be used tell the LayerSDK
// where to capture a screenshot. Layer will call toDataUrl() on
// the canvas when triggered by the parent platform.
registerCanvas(canvasElement: HTMLCanvasElement): LayerSDK;
// setter version of registerCanvas
canvas: HTMLCanvasElement | null;
// show FPS overlay
startFPSOverlay(targetFPS = 60, fill = true): LayerSDK;
// remopve FPS Overlay
stopFPSOverlay(): LayerSDK;
};