@viji-dev/core
Version:
Universal execution engine for Viji Creative scenes
463 lines (427 loc) • 11.5 kB
TypeScript
declare namespace VijiCore {
declare interface AnalysisConfiguration {
fftSize?: number;
smoothing?: number;
frequencyBands?: FrequencyBand[];
beatDetection?: boolean;
onsetDetection?: boolean;
}
declare interface AudioAPI {
isConnected: boolean;
volume: {
rms: number;
peak: number;
};
beat?: {
isKick: boolean;
confidence: number;
};
bands: Record<string, number>;
getFrequencyData: () => Uint8Array;
}
declare interface CaptureFrameOptions {
/** MIME type for output, e.g., 'image/png', 'image/jpeg', 'image/webp' */
type?: string;
/**
* Target resolution.
* - number: scale factor relative to current canvas size (e.g., 0.5 = 50%)
* - { width, height }: exact output size; if aspect ratio differs from canvas,
* the source is center-cropped to match the target aspect ratio before scaling
*/
resolution?: number | {
width: number;
height: number;
};
}
declare interface ColorConfig {
label: string;
description?: string;
group?: string;
category?: ParameterCategory;
}
declare interface ColorParameter {
value: string;
label: string;
description?: string;
group: string;
category: ParameterCategory;
}
declare type CVFeature = 'faceDetection' | 'faceMesh' | 'handTracking' | 'poseDetection' | 'bodySegmentation';
declare type CVFrameRateMode = 'full' | 'half' | 'quarter' | 'eighth';
declare interface FaceData {
id: number;
bounds: {
x: number;
y: number;
width: number;
height: number;
};
confidence: number;
landmarks?: {
x: number;
y: number;
z?: number;
}[];
expressions: {
neutral: number;
happy: number;
sad: number;
angry: number;
surprised: number;
disgusted: number;
fearful: number;
};
headPose: {
pitch: number;
yaw: number;
roll: number;
};
}
declare type FrameRateMode = 'full' | 'half';
declare interface FrequencyBand {
name: string;
min: number;
max: number;
}
declare interface HandData {
id: number;
handedness: 'left' | 'right';
confidence: number;
bounds: {
x: number;
y: number;
width: number;
height: number;
};
landmarks: {
x: number;
y: number;
z: number;
}[];
palm: {
x: number;
y: number;
z: number;
};
fingers: {
thumb: {
tip: {
x: number;
y: number;
z: number;
};
extended: boolean;
};
index: {
tip: {
x: number;
y: number;
z: number;
};
extended: boolean;
};
middle: {
tip: {
x: number;
y: number;
z: number;
};
extended: boolean;
};
ring: {
tip: {
x: number;
y: number;
z: number;
};
extended: boolean;
};
pinky: {
tip: {
x: number;
y: number;
z: number;
};
extended: boolean;
};
};
gestures: {
fist: number;
openPalm: number;
peace: number;
thumbsUp: number;
pointing: number;
};
}
declare interface ImageConfig {
label: string;
description?: string;
group?: string;
category?: ParameterCategory;
}
declare interface ImageParameter {
value: ImageBitmap | OffscreenCanvas | null;
label: string;
description?: string;
group: string;
category: ParameterCategory;
}
declare interface KeyboardAPI {
isPressed(key: string): boolean;
wasPressed(key: string): boolean;
wasReleased(key: string): boolean;
activeKeys: Set<string>;
pressedThisFrame: Set<string>;
releasedThisFrame: Set<string>;
lastKeyPressed: string;
lastKeyReleased: string;
shift: boolean;
ctrl: boolean;
alt: boolean;
meta: boolean;
}
declare interface MouseAPI {
x: number;
y: number;
isInCanvas: boolean;
isPressed: boolean;
leftButton: boolean;
rightButton: boolean;
middleButton: boolean;
velocity: {
x: number;
y: number;
};
deltaX: number;
deltaY: number;
wheelDelta: number;
wheelX: number;
wheelY: number;
wasPressed: boolean;
wasReleased: boolean;
wasMoved: boolean;
}
declare interface NumberConfig {
min?: number;
max?: number;
step?: number;
label: string;
description?: string;
group?: string;
category?: ParameterCategory;
}
declare interface NumberParameter {
value: number;
min: number;
max: number;
step: number;
label: string;
description?: string;
group: string;
category: ParameterCategory;
}
declare type ParameterCategory = 'audio' | 'video' | 'interaction' | 'general';
declare interface PoseData {
confidence: number;
landmarks: {
x: number;
y: number;
z: number;
visibility: number;
}[];
face: {
x: number;
y: number;
}[];
torso: {
x: number;
y: number;
}[];
leftArm: {
x: number;
y: number;
}[];
rightArm: {
x: number;
y: number;
}[];
leftLeg: {
x: number;
y: number;
}[];
rightLeg: {
x: number;
y: number;
}[];
}
declare type Resolution = {
width: number;
height: number;
};
declare interface SegmentationData {
mask: Uint8Array;
width: number;
height: number;
}
declare interface SelectConfig {
options: string[] | number[];
label: string;
description?: string;
group?: string;
category?: ParameterCategory;
}
declare interface SelectParameter {
value: string | number;
options: string[] | number[];
label: string;
description?: string;
group: string;
category: ParameterCategory;
}
declare interface SliderConfig {
min?: number;
max?: number;
step?: number;
label: string;
description?: string;
group?: string;
category?: ParameterCategory;
}
declare interface SliderParameter {
value: number;
min: number;
max: number;
step: number;
label: string;
description?: string;
group: string;
category: ParameterCategory;
}
declare interface TextConfig {
label: string;
description?: string;
group?: string;
category?: ParameterCategory;
maxLength?: number;
}
declare interface TextParameter {
value: string;
maxLength?: number;
label: string;
description?: string;
group: string;
category: ParameterCategory;
}
declare interface ToggleConfig {
label: string;
description?: string;
group?: string;
category?: ParameterCategory;
}
declare interface ToggleParameter {
value: boolean;
label: string;
description?: string;
group: string;
category: ParameterCategory;
}
declare interface TouchAPI {
points: TouchPoint[];
count: number;
started: TouchPoint[];
moved: TouchPoint[];
ended: TouchPoint[];
primary: TouchPoint | null;
gestures: TouchGestureAPI;
}
declare interface TouchGestureAPI {
isPinching: boolean;
isRotating: boolean;
isPanning: boolean;
isTapping: boolean;
pinchScale: number;
pinchDelta: number;
rotationAngle: number;
rotationDelta: number;
panDelta: {
x: number;
y: number;
};
tapCount: number;
lastTapTime: number;
tapPosition: {
x: number;
y: number;
} | null;
}
declare interface TouchPoint {
id: number;
x: number;
y: number;
pressure: number;
radius: number;
radiusX: number;
radiusY: number;
rotationAngle: number;
force: number;
deltaX: number;
deltaY: number;
velocity: {
x: number;
y: number;
};
isNew: boolean;
isActive: boolean;
isEnding: boolean;
}
declare const VERSION = "0.2.20";
declare interface VideoAPI {
isConnected: boolean;
currentFrame: OffscreenCanvas | null;
frameWidth: number;
frameHeight: number;
frameRate: number;
getFrameData: () => ImageData | null;
faces: FaceData[];
hands: HandData[];
pose: PoseData | null;
segmentation: SegmentationData | null;
cv: {
enableFaceDetection(enabled: boolean): Promise<void>;
enableFaceMesh(enabled: boolean): Promise<void>;
enableHandTracking(enabled: boolean): Promise<void>;
enablePoseDetection(enabled: boolean): Promise<void>;
enableBodySegmentation(enabled: boolean): Promise<void>;
getActiveFeatures(): CVFeature[];
isProcessing(): boolean;
};
}
declare interface VijiAPI {
canvas: OffscreenCanvas;
ctx?: OffscreenCanvasRenderingContext2D;
gl?: WebGL2RenderingContext;
width: number;
height: number;
pixelRatio: number;
time: number;
deltaTime: number;
frameCount: number;
fps: number;
audio: AudioAPI;
video: VideoAPI;
mouse: MouseAPI;
keyboard: KeyboardAPI;
touches: TouchAPI;
slider: (defaultValue: number, config: SliderConfig) => SliderParameter;
color: (defaultValue: string, config: ColorConfig) => ColorParameter;
toggle: (defaultValue: boolean, config: ToggleConfig) => ToggleParameter;
select: (defaultValue: string | number, config: SelectConfig) => SelectParameter;
text: (defaultValue: string, config: TextConfig) => TextParameter;
number: (defaultValue: number, config: NumberConfig) => NumberParameter;
image: (defaultValue: null, config: ImageConfig) => ImageParameter;
useContext(type: '2d'): OffscreenCanvasRenderingContext2D;
useContext(type: 'webgl'): WebGLRenderingContext | WebGL2RenderingContext;
}
}
declare const viji: VijiCore.VijiAPI;
declare function render(viji: VijiCore.VijiAPI): void;