@ume-group/contracts 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -0
- package/dist/adserving.d.ts +150 -0
- package/dist/adserving.d.ts.map +1 -0
- package/dist/adserving.js +8 -0
- package/dist/campaigns.d.ts +37 -0
- package/dist/campaigns.d.ts.map +1 -0
- package/dist/campaigns.js +8 -0
- package/dist/gausst.d.ts +236 -0
- package/dist/gausst.d.ts.map +1 -0
- package/dist/gausst.js +307 -0
- package/dist/gausst.test.d.ts +2 -0
- package/dist/gausst.test.d.ts.map +1 -0
- package/dist/gausst.test.js +71 -0
- package/dist/index.d.ts +1531 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1112 -0
- package/dist/layer2/index.d.ts +9 -0
- package/dist/layer2/index.d.ts.map +1 -0
- package/dist/layer2/index.js +10 -0
- package/dist/layer2/shaders.d.ts +185 -0
- package/dist/layer2/shaders.d.ts.map +1 -0
- package/dist/layer2/shaders.js +604 -0
- package/dist/layer2/webcam-utils.d.ts +113 -0
- package/dist/layer2/webcam-utils.d.ts.map +1 -0
- package/dist/layer2/webcam-utils.js +147 -0
- package/dist/layer2/webcam-utils.test.d.ts +2 -0
- package/dist/layer2/webcam-utils.test.d.ts.map +1 -0
- package/dist/layer2/webcam-utils.test.js +18 -0
- package/dist/layer2.d.ts +558 -0
- package/dist/layer2.d.ts.map +1 -0
- package/dist/layer2.js +376 -0
- package/dist/layer2.test.d.ts +2 -0
- package/dist/layer2.test.d.ts.map +1 -0
- package/dist/layer2.test.js +65 -0
- package/dist/perspective.d.ts +28 -0
- package/dist/perspective.d.ts.map +1 -0
- package/dist/perspective.js +157 -0
- package/dist/segmentation/MediaPipeSegmenter.d.ts +201 -0
- package/dist/segmentation/MediaPipeSegmenter.d.ts.map +1 -0
- package/dist/segmentation/MediaPipeSegmenter.js +434 -0
- package/dist/segmentation/index.d.ts +5 -0
- package/dist/segmentation/index.d.ts.map +1 -0
- package/dist/segmentation/index.js +4 -0
- package/dist/webcam/GarbageMatteDragManager.d.ts +63 -0
- package/dist/webcam/GarbageMatteDragManager.d.ts.map +1 -0
- package/dist/webcam/GarbageMatteDragManager.js +183 -0
- package/dist/webcam/WebcamStreamManager.d.ts +103 -0
- package/dist/webcam/WebcamStreamManager.d.ts.map +1 -0
- package/dist/webcam/WebcamStreamManager.js +356 -0
- package/dist/webcam/index.d.ts +5 -0
- package/dist/webcam/index.d.ts.map +1 -0
- package/dist/webcam/index.js +2 -0
- package/openapi/admetise.yaml +632 -0
- package/openapi/includu.yaml +621 -0
- package/openapi/integration.yaml +372 -0
- package/openapi/shared/schemas.yaml +227 -0
- package/package.json +53 -0
package/dist/layer2.d.ts
ADDED
|
@@ -0,0 +1,558 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Layer 2: 3D Composite Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for the 3D composite layer that enables:
|
|
5
|
+
* - 3D Space Ads: GAM ad templates positioned in 3D space
|
|
6
|
+
* - Participation: Webcam composite with chroma keying
|
|
7
|
+
*
|
|
8
|
+
* Uses the Gausst coordinate system from Patent US8761580B2
|
|
9
|
+
*/
|
|
10
|
+
export interface CameraSettings {
|
|
11
|
+
/** Vertical field of view in degrees (default: 60 - Gausst default, ~82° horizontal) */
|
|
12
|
+
fov: number;
|
|
13
|
+
/** Camera position in meters [x, y, z] - Gausst: camera at origin [0, 1.6, 0] (eye level) */
|
|
14
|
+
position: [number, number, number];
|
|
15
|
+
/** Camera rotation in degrees [tilt, pan, roll] - Gausst camera terms (default: [-5, 0, 0]) */
|
|
16
|
+
rotation: [number, number, number];
|
|
17
|
+
/** Camera look-at target in meters [x, y, z] - Gausst: [0, 1.6, -10] (looking at -Z, objects in front) */
|
|
18
|
+
lookAt: [number, number, number];
|
|
19
|
+
}
|
|
20
|
+
export declare const DEFAULT_CAMERA_SETTINGS: CameraSettings;
|
|
21
|
+
export type MaterialType = 'unlit' | 'standard';
|
|
22
|
+
export interface Ad3DPlacement {
|
|
23
|
+
/** Unique identifier */
|
|
24
|
+
id: string;
|
|
25
|
+
/** Reference to GAM ad template */
|
|
26
|
+
templateId: string;
|
|
27
|
+
/** Start frame (inclusive) */
|
|
28
|
+
startFrame: number;
|
|
29
|
+
/** End frame (exclusive) */
|
|
30
|
+
endFrame: number;
|
|
31
|
+
/** Position in meters [x, y, z] */
|
|
32
|
+
position: [number, number, number];
|
|
33
|
+
/** Rotation in degrees [x, y, z] - standard Three.js Euler angles (pitch, yaw, roll) */
|
|
34
|
+
rotation: [number, number, number];
|
|
35
|
+
/** Uniform scale factor (default: 1.0) */
|
|
36
|
+
scale: number;
|
|
37
|
+
/** Material type - unlit ignores lighting, standard receives shadows */
|
|
38
|
+
materialType: MaterialType;
|
|
39
|
+
/** Optional label for display in timeline */
|
|
40
|
+
label?: string;
|
|
41
|
+
/** Edge feathering (0-10, 0 = hard edge, 10 = very soft). Softens all edges uniformly. */
|
|
42
|
+
feather?: number;
|
|
43
|
+
/** Per-edge feathering. When set, overrides uniform 'feather' value. */
|
|
44
|
+
featherEdges?: FeatherEdges;
|
|
45
|
+
/** Show sample ad texture instead of solid color (for previewing feather effect) */
|
|
46
|
+
showSampleTexture?: boolean;
|
|
47
|
+
/** Sample texture mode: 'pattern' for checkerboard, 'color' for solid color, 'image' for URL */
|
|
48
|
+
sampleTextureMode?: 'pattern' | 'color' | 'image';
|
|
49
|
+
/** Custom color for solid color preview mode (hex string, e.g. '#FF5500') */
|
|
50
|
+
sampleTextureColor?: string;
|
|
51
|
+
/** Image URL for 'image' mode (external ad creative for preview) */
|
|
52
|
+
sampleTextureImageUrl?: string;
|
|
53
|
+
/** Per-shot positioning overrides. Key = ShotPreset.id */
|
|
54
|
+
shotTransforms?: Record<string, ShotTransformOverride>;
|
|
55
|
+
}
|
|
56
|
+
export declare const DEFAULT_AD_3D_PLACEMENT: Omit<Ad3DPlacement, 'id' | 'templateId' | 'startFrame' | 'endFrame'>;
|
|
57
|
+
/**
|
|
58
|
+
* Background removal method:
|
|
59
|
+
* - 'ai': AI-powered segmentation (TensorFlow.js/MediaPipe) - works anywhere, no green screen needed
|
|
60
|
+
* - 'chromaKey': Traditional chroma key - requires green/blue screen but sharper edges
|
|
61
|
+
* - 'none': No background removal (raw webcam feed)
|
|
62
|
+
*/
|
|
63
|
+
export type BackgroundRemovalMethod = 'ai' | 'chromaKey' | 'none';
|
|
64
|
+
/**
|
|
65
|
+
* AI segmentation model to use for background removal
|
|
66
|
+
* - 'mediapipe': MediaPipe Selfie Segmentation (faster, good for real-time)
|
|
67
|
+
* - 'bodypix': TensorFlow.js BodyPix (more accurate body parts, slower)
|
|
68
|
+
*/
|
|
69
|
+
export type AISegmentationModel = 'mediapipe' | 'bodypix';
|
|
70
|
+
/**
|
|
71
|
+
* AI model quality mode (maps to underlying model)
|
|
72
|
+
* - 'fast': selfie_segmenter — quick, good for close-up
|
|
73
|
+
* - 'quality': DeepLabV3 — better at distance, slower
|
|
74
|
+
*/
|
|
75
|
+
export type AIModelQuality = 'fast' | 'quality';
|
|
76
|
+
export interface AISegmentationSettings {
|
|
77
|
+
/** Which AI model to use */
|
|
78
|
+
model: AISegmentationModel;
|
|
79
|
+
/** Segmentation threshold 0-1 (probability cutoff for foreground) */
|
|
80
|
+
threshold: number;
|
|
81
|
+
/** Edge blur radius in pixels (soften mask edges) */
|
|
82
|
+
edgeBlur: number;
|
|
83
|
+
/** Flip horizontally (mirror mode for selfie view) */
|
|
84
|
+
flipHorizontal: boolean;
|
|
85
|
+
/** Low latency mode - disables temporal smoothing for real-time response */
|
|
86
|
+
lowLatency: boolean;
|
|
87
|
+
/** Model quality: 'fast' (selfie) or 'quality' (DeepLabV3) */
|
|
88
|
+
quality: AIModelQuality;
|
|
89
|
+
}
|
|
90
|
+
export declare const DEFAULT_AI_SEGMENTATION_SETTINGS: AISegmentationSettings;
|
|
91
|
+
export type ChromaKeyColor = 'green' | 'blue' | 'custom';
|
|
92
|
+
/**
|
|
93
|
+
* HSV window settings for fine-grained chroma key control.
|
|
94
|
+
* Based on legacy Gausst algorithm - allows explicit min/max ranges for H, S, V.
|
|
95
|
+
* When enabled, these override the simple tolerance-based approach.
|
|
96
|
+
*/
|
|
97
|
+
export interface HSVWindowSettings {
|
|
98
|
+
/** Enable HSV window mode (default: false, uses tolerance-based keying) */
|
|
99
|
+
enabled: boolean;
|
|
100
|
+
/** Minimum hue (0-360 degrees, wraps around for red tones) */
|
|
101
|
+
minHue: number;
|
|
102
|
+
/** Maximum hue (0-360 degrees) */
|
|
103
|
+
maxHue: number;
|
|
104
|
+
/** Minimum saturation (0-1) */
|
|
105
|
+
minSaturation: number;
|
|
106
|
+
/** Maximum saturation (0-1) */
|
|
107
|
+
maxSaturation: number;
|
|
108
|
+
/** Minimum value/brightness (0-1) */
|
|
109
|
+
minValue: number;
|
|
110
|
+
/** Maximum value/brightness (0-1) */
|
|
111
|
+
maxValue: number;
|
|
112
|
+
}
|
|
113
|
+
export declare const DEFAULT_HSV_WINDOW_SETTINGS: HSVWindowSettings;
|
|
114
|
+
export interface ChromaKeySettings {
|
|
115
|
+
/** Key color preset or custom */
|
|
116
|
+
color: ChromaKeyColor;
|
|
117
|
+
/** Custom hex color (e.g., '#00FF00') when color is 'custom' */
|
|
118
|
+
customColor?: string;
|
|
119
|
+
/** Color tolerance 0-1 (how much color variance to key out) */
|
|
120
|
+
tolerance: number;
|
|
121
|
+
/** Spill suppression 0-1 (reduce color bleeding on edges) */
|
|
122
|
+
spillSuppression: number;
|
|
123
|
+
/** Edge softness 0-1 (blend edges for smoother cutout) */
|
|
124
|
+
edgeSoftness: number;
|
|
125
|
+
/** HSV window settings for advanced control */
|
|
126
|
+
hsvWindow?: HSVWindowSettings;
|
|
127
|
+
}
|
|
128
|
+
export declare const DEFAULT_CHROMA_KEY_SETTINGS: ChromaKeySettings;
|
|
129
|
+
export interface BackgroundRemovalConfig {
|
|
130
|
+
/** Which method to use for background removal */
|
|
131
|
+
method: BackgroundRemovalMethod;
|
|
132
|
+
/** AI segmentation settings (used when method is 'ai') */
|
|
133
|
+
aiSettings: AISegmentationSettings;
|
|
134
|
+
/** Chroma key settings (used when method is 'chromaKey') */
|
|
135
|
+
chromaKeySettings: ChromaKeySettings;
|
|
136
|
+
}
|
|
137
|
+
export declare const DEFAULT_BACKGROUND_REMOVAL: BackgroundRemovalConfig;
|
|
138
|
+
export interface ColorMatchSettings {
|
|
139
|
+
/** Brightness adjustment -1 to 1 (default: 0) */
|
|
140
|
+
brightness: number;
|
|
141
|
+
/** Contrast adjustment -1 to 1 (default: 0) */
|
|
142
|
+
contrast: number;
|
|
143
|
+
/** Saturation adjustment -1 to 1 (default: 0) */
|
|
144
|
+
saturation: number;
|
|
145
|
+
/** Color temperature -1 (cool/blue) to 1 (warm/orange) (default: 0) */
|
|
146
|
+
temperature: number;
|
|
147
|
+
}
|
|
148
|
+
export declare const DEFAULT_COLOR_MATCH_SETTINGS: ColorMatchSettings;
|
|
149
|
+
/**
|
|
150
|
+
* Framing type describes how the webcam plane is set up to frame a person.
|
|
151
|
+
* Used to help with auto-positioning and scale calculations.
|
|
152
|
+
*/
|
|
153
|
+
export type FramingType = 'full' | 'waist' | 'shoulders';
|
|
154
|
+
/**
|
|
155
|
+
* Garbage matte mode - controls which masking method is used.
|
|
156
|
+
* - 'off': No garbage matte
|
|
157
|
+
* - 'rectangle': Simple 4-corner crop (most common use case)
|
|
158
|
+
* - 'polygon': Complex shapes for arbitrary masking
|
|
159
|
+
*/
|
|
160
|
+
export type GarbageMatteMode = 'off' | 'rectangle' | 'polygon';
|
|
161
|
+
/**
|
|
162
|
+
* 2D point in normalized UV coordinates (0-1).
|
|
163
|
+
* x: 0 = left edge, 1 = right edge
|
|
164
|
+
* y: 0 = top edge, 1 = bottom edge
|
|
165
|
+
*/
|
|
166
|
+
export interface Point2D {
|
|
167
|
+
x: number;
|
|
168
|
+
y: number;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Rectangle garbage matte - simple 4-corner crop.
|
|
172
|
+
* Defined by top-left and bottom-right corners in UV space.
|
|
173
|
+
*/
|
|
174
|
+
export interface RectangleGarbageMatte {
|
|
175
|
+
topLeft: Point2D;
|
|
176
|
+
bottomRight: Point2D;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Polygon garbage matte - arbitrary shape.
|
|
180
|
+
* Defined by vertices in UV space, minimum 3 points.
|
|
181
|
+
*/
|
|
182
|
+
export interface PolygonGarbageMatte {
|
|
183
|
+
vertices: Point2D[];
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Per-edge feather settings for independent softness control.
|
|
187
|
+
* Each value is 0-10 (0 = hard edge, 10 = very soft).
|
|
188
|
+
*/
|
|
189
|
+
export interface FeatherEdges {
|
|
190
|
+
top: number;
|
|
191
|
+
right: number;
|
|
192
|
+
bottom: number;
|
|
193
|
+
left: number;
|
|
194
|
+
}
|
|
195
|
+
export declare const DEFAULT_FEATHER_EDGES: FeatherEdges;
|
|
196
|
+
/**
|
|
197
|
+
* Complete garbage matte settings.
|
|
198
|
+
* Applied BEFORE chroma key/AI segmentation in the shader pipeline.
|
|
199
|
+
*/
|
|
200
|
+
export interface GarbageMatteSettings {
|
|
201
|
+
/** Which masking mode is active */
|
|
202
|
+
mode: GarbageMatteMode;
|
|
203
|
+
/** Rectangle crop bounds (used when mode === 'rectangle') */
|
|
204
|
+
rectangle: RectangleGarbageMatte;
|
|
205
|
+
/** Polygon shapes (used when mode === 'polygon', supports multiple) */
|
|
206
|
+
polygons: PolygonGarbageMatte[];
|
|
207
|
+
/** Edge feather/blur (0-10, 0 = hard edge). Used when featherEdges is not set. */
|
|
208
|
+
feather: number;
|
|
209
|
+
/** Per-edge feather settings (optional, overrides 'feather' when set) */
|
|
210
|
+
featherEdges?: FeatherEdges;
|
|
211
|
+
/** Invert mask (keep outside, remove inside) */
|
|
212
|
+
invert: boolean;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Default garbage matte settings - full frame, no masking.
|
|
216
|
+
*/
|
|
217
|
+
export declare const DEFAULT_GARBAGE_MATTE_SETTINGS: GarbageMatteSettings;
|
|
218
|
+
/**
|
|
219
|
+
* Creator's current webcam runtime settings, transferred to the player
|
|
220
|
+
* during preview mode so they don't have to reconfigure from scratch.
|
|
221
|
+
*
|
|
222
|
+
* Only used in preview mode — never saved with published projects.
|
|
223
|
+
* Each field is optional so partial settings can be transferred.
|
|
224
|
+
*/
|
|
225
|
+
export interface PreviewWebcamSettings {
|
|
226
|
+
method: BackgroundRemovalMethod;
|
|
227
|
+
mirrored: boolean;
|
|
228
|
+
deviceId?: string;
|
|
229
|
+
/** Device label for cross-origin matching (device IDs are origin-specific) */
|
|
230
|
+
deviceLabel?: string;
|
|
231
|
+
/** Audio input device ID */
|
|
232
|
+
audioDeviceId?: string;
|
|
233
|
+
/** Audio device label for cross-origin matching */
|
|
234
|
+
audioDeviceLabel?: string;
|
|
235
|
+
participantHeight?: number;
|
|
236
|
+
aiSettings: AISegmentationSettings;
|
|
237
|
+
chromaKeySettings: ChromaKeySettings;
|
|
238
|
+
colorCorrection: ColorMatchSettings;
|
|
239
|
+
garbageMatte: GarbageMatteSettings;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* WebcamComposite - Template data that gets saved with the project.
|
|
243
|
+
*
|
|
244
|
+
* This contains ONLY data that content creators set up:
|
|
245
|
+
* - Position, rotation, scale in 3D space
|
|
246
|
+
* - Timing (start/end frames)
|
|
247
|
+
* - Reference height for participant scaling
|
|
248
|
+
* - Framing type
|
|
249
|
+
* - Default background removal method preference (just a suggestion for participants)
|
|
250
|
+
* - Editor's webcam device ID (for content creator convenience)
|
|
251
|
+
*
|
|
252
|
+
* NOTE: Keying settings (threshold, tolerance, etc.) and color correction are
|
|
253
|
+
* NOT saved here - they are runtime-only in WebcamRuntimeState because each
|
|
254
|
+
* user's webcam has different characteristics.
|
|
255
|
+
*
|
|
256
|
+
* EDITOR vs PLAYER device handling:
|
|
257
|
+
* - Editor: Uses editorDeviceId so content creators don't have to reselect their webcam
|
|
258
|
+
* - Player: Ignores editorDeviceId, participants select their own camera
|
|
259
|
+
*/
|
|
260
|
+
export interface WebcamComposite {
|
|
261
|
+
/** Unique identifier */
|
|
262
|
+
id: string;
|
|
263
|
+
/** Enable/disable webcam composite */
|
|
264
|
+
enabled: boolean;
|
|
265
|
+
/** Start frame (inclusive) */
|
|
266
|
+
startFrame: number;
|
|
267
|
+
/** End frame (exclusive) */
|
|
268
|
+
endFrame: number;
|
|
269
|
+
/** Position in meters [x, y, z] */
|
|
270
|
+
position: [number, number, number];
|
|
271
|
+
/** Rotation in degrees [x, y, z] - standard Three.js Euler angles (pitch, yaw, roll) */
|
|
272
|
+
rotation: [number, number, number];
|
|
273
|
+
/** Uniform scale factor (default: 1.0) - applied after height ratio calculation */
|
|
274
|
+
scale: number;
|
|
275
|
+
/**
|
|
276
|
+
* Reference height in cm - the height this scene is calibrated for.
|
|
277
|
+
* When a participant enters their height, scale = participantHeight / referenceHeight.
|
|
278
|
+
* Default: 170cm (average adult height)
|
|
279
|
+
*/
|
|
280
|
+
referenceHeight: number;
|
|
281
|
+
/**
|
|
282
|
+
* Framing type - how the webcam plane frames a person.
|
|
283
|
+
* - 'full': Full body visible (standing)
|
|
284
|
+
* - 'waist': Waist up (seated or half body)
|
|
285
|
+
* - 'shoulders': Head and shoulders (close-up)
|
|
286
|
+
*/
|
|
287
|
+
framingType: FramingType;
|
|
288
|
+
/**
|
|
289
|
+
* Default background removal method preference.
|
|
290
|
+
* This is just a suggestion for participants - they configure their own keying.
|
|
291
|
+
* - 'ai': AI-powered segmentation (default, works anywhere)
|
|
292
|
+
* - 'chromaKey': Traditional chroma key (for users with green screens)
|
|
293
|
+
* - 'none': No background removal
|
|
294
|
+
*/
|
|
295
|
+
defaultMethod: BackgroundRemovalMethod;
|
|
296
|
+
/**
|
|
297
|
+
* Default AI segmentation settings - saved for editor convenience.
|
|
298
|
+
* When content creator reopens project, their tuned AI settings are restored.
|
|
299
|
+
* Participants start with these as defaults but can adjust for their own lighting.
|
|
300
|
+
*/
|
|
301
|
+
defaultAiSettings?: Partial<Pick<AISegmentationSettings, 'threshold' | 'edgeBlur'>>;
|
|
302
|
+
/**
|
|
303
|
+
* Default chroma key settings - saved for editor convenience.
|
|
304
|
+
* When content creator reopens project, their tuned chroma key settings are restored.
|
|
305
|
+
* Includes HSV window settings for fine-grained control.
|
|
306
|
+
*/
|
|
307
|
+
defaultChromaKeySettings?: Partial<ChromaKeySettings>;
|
|
308
|
+
/**
|
|
309
|
+
* Editor's webcam device ID - saved for content creator convenience.
|
|
310
|
+
* When the content creator reopens the project, their webcam is auto-selected.
|
|
311
|
+
* IMPORTANT: This is IGNORED in the Player - participants select their own camera.
|
|
312
|
+
*/
|
|
313
|
+
editorDeviceId?: string;
|
|
314
|
+
/**
|
|
315
|
+
* Editor's audio device ID - saved for content creator convenience.
|
|
316
|
+
* When the content creator reopens the project, their mic is auto-selected.
|
|
317
|
+
* IMPORTANT: This is IGNORED in the Player - participants select their own mic.
|
|
318
|
+
*/
|
|
319
|
+
editorAudioDeviceId?: string;
|
|
320
|
+
/**
|
|
321
|
+
* Garbage matte settings - manual mask to hide unwanted areas.
|
|
322
|
+
* Applied BEFORE chroma key/AI in the shader pipeline.
|
|
323
|
+
* Saved with project (scene-specific, not per-user).
|
|
324
|
+
*/
|
|
325
|
+
garbageMatteSettings?: GarbageMatteSettings;
|
|
326
|
+
/** Optional label for display in timeline */
|
|
327
|
+
label?: string;
|
|
328
|
+
/** Per-shot positioning overrides. Key = ShotPreset.id */
|
|
329
|
+
shotTransforms?: Record<string, ShotTransformOverride>;
|
|
330
|
+
/**
|
|
331
|
+
* Lock participant position — prevents participants from overriding the creator's
|
|
332
|
+
* scene layout with their own fixed position. By default (undefined/false), participants
|
|
333
|
+
* can always switch to fixed position mode (sign language, teaching, coaching).
|
|
334
|
+
* Set to true when the participant's placement is integral to the content.
|
|
335
|
+
*/
|
|
336
|
+
lockParticipantPosition?: boolean;
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Minimum capture height in cm for generous framing.
|
|
340
|
+
* The webcam plane is always at least this tall, allowing taller people
|
|
341
|
+
* to walk into frame without reconfiguration. Background removal
|
|
342
|
+
* makes the extra space transparent.
|
|
343
|
+
*/
|
|
344
|
+
export declare const MIN_CAPTURE_HEIGHT_CM = 210;
|
|
345
|
+
export declare const DEFAULT_WEBCAM_COMPOSITE: Omit<WebcamComposite, 'id' | 'startFrame' | 'endFrame'>;
|
|
346
|
+
/**
|
|
347
|
+
* WebcamRuntimeState - Runtime-only state for webcam processing.
|
|
348
|
+
*
|
|
349
|
+
* This is NOT saved with the project. Each user (content creator or participant)
|
|
350
|
+
* configures their own keying and color settings because:
|
|
351
|
+
* - Each webcam has different color characteristics
|
|
352
|
+
* - Lighting conditions vary per user's environment
|
|
353
|
+
* - Keying thresholds depend on individual backgrounds
|
|
354
|
+
*
|
|
355
|
+
* Both the Editor (for content creators) and Player (for participants) maintain
|
|
356
|
+
* their own instance of this state.
|
|
357
|
+
*/
|
|
358
|
+
export interface WebcamRuntimeState {
|
|
359
|
+
/** MediaDevices device ID (undefined = default camera) */
|
|
360
|
+
deviceId?: string;
|
|
361
|
+
/** MediaDevices audio input ID (undefined = default microphone) */
|
|
362
|
+
audioDeviceId?: string;
|
|
363
|
+
/** Current background removal method being used */
|
|
364
|
+
method: BackgroundRemovalMethod;
|
|
365
|
+
/** AI segmentation settings (when method is 'ai') */
|
|
366
|
+
aiSettings: AISegmentationSettings;
|
|
367
|
+
/** Chroma key settings (when method is 'chromaKey') */
|
|
368
|
+
chromaKeySettings: ChromaKeySettings;
|
|
369
|
+
/** Color correction settings */
|
|
370
|
+
colorCorrection: ColorMatchSettings;
|
|
371
|
+
/** Whether the webcam stream is currently active */
|
|
372
|
+
isActive: boolean;
|
|
373
|
+
/** Whether background removal processing is enabled */
|
|
374
|
+
processingEnabled: boolean;
|
|
375
|
+
/** Mirror the webcam horizontally (default: true for user-facing cameras) */
|
|
376
|
+
mirrored: boolean;
|
|
377
|
+
}
|
|
378
|
+
export declare const DEFAULT_WEBCAM_RUNTIME_STATE: WebcamRuntimeState;
|
|
379
|
+
/**
|
|
380
|
+
* Create a WebcamRuntimeState initialized from a WebcamComposite template.
|
|
381
|
+
* Uses the template's defaultMethod, defaultAiSettings, and defaultChromaKeySettings as starting values.
|
|
382
|
+
*/
|
|
383
|
+
export declare function createRuntimeStateFromTemplate(template: WebcamComposite): WebcamRuntimeState;
|
|
384
|
+
/**
|
|
385
|
+
* ShotPreset - A reusable camera configuration for a shot.
|
|
386
|
+
* Each preset stores its own camera settings (FOV, position, rotation).
|
|
387
|
+
* Multiple shot segments can reference the same preset.
|
|
388
|
+
*/
|
|
389
|
+
export interface ShotPreset {
|
|
390
|
+
/** Unique identifier */
|
|
391
|
+
id: string;
|
|
392
|
+
/** Human-readable name (e.g., "Wide Shot", "Close-up Host") */
|
|
393
|
+
name: string;
|
|
394
|
+
/** Camera settings for this shot */
|
|
395
|
+
camera: CameraSettings;
|
|
396
|
+
/** Timeline segment color (hex string, e.g., '#6366F1') */
|
|
397
|
+
color?: string;
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* ShotSegment - Defines which shot preset is active for a time range.
|
|
401
|
+
* Segments are non-overlapping and cover the entire timeline when present.
|
|
402
|
+
*/
|
|
403
|
+
export interface ShotSegment {
|
|
404
|
+
/** Unique identifier */
|
|
405
|
+
id: string;
|
|
406
|
+
/** Reference to ShotPreset.id */
|
|
407
|
+
presetId: string;
|
|
408
|
+
/** Start frame (inclusive) */
|
|
409
|
+
startFrame: number;
|
|
410
|
+
/** End frame (exclusive) */
|
|
411
|
+
endFrame: number;
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* ShotTransformOverride - Per-shot positioning for an ad or webcam.
|
|
415
|
+
* When present for a shot preset, overrides the object's default transform.
|
|
416
|
+
*/
|
|
417
|
+
export interface ShotTransformOverride {
|
|
418
|
+
/** Position in meters [x, y, z] */
|
|
419
|
+
position: [number, number, number];
|
|
420
|
+
/** Rotation in degrees [x, y, z] */
|
|
421
|
+
rotation: [number, number, number];
|
|
422
|
+
/** Uniform scale factor */
|
|
423
|
+
scale: number;
|
|
424
|
+
/** Whether the object is visible in this shot */
|
|
425
|
+
visible: boolean;
|
|
426
|
+
}
|
|
427
|
+
export interface Layer2Scene {
|
|
428
|
+
/** Camera configuration (default camera when no shots / multicam disabled) */
|
|
429
|
+
camera: CameraSettings;
|
|
430
|
+
/** Array of 3D ad placements */
|
|
431
|
+
ads: Ad3DPlacement[];
|
|
432
|
+
/**
|
|
433
|
+
* Webcam participation composite (optional)
|
|
434
|
+
* - undefined: not included in JSON (field omitted)
|
|
435
|
+
* - null: explicitly clears participation on server
|
|
436
|
+
*/
|
|
437
|
+
participation?: WebcamComposite | null;
|
|
438
|
+
/** Full Three.js scene JSON for advanced mode (future: Option A+) */
|
|
439
|
+
advancedSceneJson?: string;
|
|
440
|
+
/** Whether multicam mode is enabled (opt-in by creator) */
|
|
441
|
+
multicamEnabled?: boolean;
|
|
442
|
+
/** Shot presets — reusable camera configurations */
|
|
443
|
+
shotPresets?: ShotPreset[];
|
|
444
|
+
/** Shot segments — which preset is active when */
|
|
445
|
+
shotSegments?: ShotSegment[];
|
|
446
|
+
}
|
|
447
|
+
export declare const DEFAULT_LAYER2_SCENE: Layer2Scene;
|
|
448
|
+
/**
|
|
449
|
+
* Generate a unique ID for Layer 2 objects
|
|
450
|
+
*/
|
|
451
|
+
export declare function generateLayer2Id(prefix: 'ad3d' | 'webcam'): string;
|
|
452
|
+
/**
|
|
453
|
+
* Create a new 3D ad placement with defaults
|
|
454
|
+
*/
|
|
455
|
+
export declare function createAd3DPlacement(templateId: string, startFrame: number, endFrame: number, overrides?: Partial<Ad3DPlacement>): Ad3DPlacement;
|
|
456
|
+
/**
|
|
457
|
+
* Create a new webcam composite template with defaults.
|
|
458
|
+
* Note: This creates only the template data. Runtime state (keying, color)
|
|
459
|
+
* is created separately using createRuntimeStateFromTemplate().
|
|
460
|
+
*
|
|
461
|
+
* Scale represents the PLANE HEIGHT in meters (Gausst coordinate system).
|
|
462
|
+
* For a 170cm person: scale = 1.70 / 0.85 = 2.0 (plane is 2.0m tall)
|
|
463
|
+
*/
|
|
464
|
+
export declare function createWebcamComposite(startFrame: number, endFrame: number, overrides?: Partial<WebcamComposite>): WebcamComposite;
|
|
465
|
+
/**
|
|
466
|
+
* Check if an ad is visible at a given frame
|
|
467
|
+
*/
|
|
468
|
+
export declare function isAdVisibleAtFrame(ad: Ad3DPlacement, frame: number): boolean;
|
|
469
|
+
/**
|
|
470
|
+
* Check if webcam composite is visible at a given frame
|
|
471
|
+
*/
|
|
472
|
+
export declare function isWebcamVisibleAtFrame(webcam: WebcamComposite | undefined, frame: number): boolean;
|
|
473
|
+
/**
|
|
474
|
+
* Get all visible 3D ads at a given frame
|
|
475
|
+
*/
|
|
476
|
+
export declare function getVisibleAdsAtFrame(scene: Layer2Scene, frame: number): Ad3DPlacement[];
|
|
477
|
+
/**
|
|
478
|
+
* Calculate the scale factor for a participant based on their height
|
|
479
|
+
* relative to the reference height set by the content creator.
|
|
480
|
+
*
|
|
481
|
+
* @param referenceHeight - Height in cm that the scene is calibrated for
|
|
482
|
+
* @param participantHeight - Actual participant height in cm
|
|
483
|
+
* @returns Scale factor to apply (1.0 = same height as reference)
|
|
484
|
+
*
|
|
485
|
+
* @example
|
|
486
|
+
* // Content creator is 180cm, participant is 160cm
|
|
487
|
+
* calculateParticipantScale(180, 160) // Returns 0.889 (participant appears shorter)
|
|
488
|
+
*
|
|
489
|
+
* // Content creator is 160cm, participant is 180cm
|
|
490
|
+
* calculateParticipantScale(160, 180) // Returns 1.125 (participant appears taller)
|
|
491
|
+
*/
|
|
492
|
+
export declare function calculateParticipantScale(referenceHeight: number, participantHeight: number): number;
|
|
493
|
+
/**
|
|
494
|
+
* Generate a unique ID for shot system objects
|
|
495
|
+
*/
|
|
496
|
+
export declare function generateShotId(prefix?: 'shot' | 'seg'): string;
|
|
497
|
+
/**
|
|
498
|
+
* Find which shot preset is active at a given frame.
|
|
499
|
+
* Returns null if multicam is disabled or no segment covers this frame.
|
|
500
|
+
*/
|
|
501
|
+
export declare function getActiveShotPreset(scene: Layer2Scene, frame: number): ShotPreset | null;
|
|
502
|
+
/**
|
|
503
|
+
* Get the camera settings to use at a given frame.
|
|
504
|
+
* When multicam is enabled and a shot preset covers this frame, returns that preset's camera.
|
|
505
|
+
* Otherwise returns the scene's default camera.
|
|
506
|
+
*/
|
|
507
|
+
export declare function getActiveCamera(scene: Layer2Scene, frame: number): CameraSettings;
|
|
508
|
+
/** Result type for resolved object transforms */
|
|
509
|
+
export interface ResolvedTransform {
|
|
510
|
+
position: [number, number, number];
|
|
511
|
+
rotation: [number, number, number];
|
|
512
|
+
scale: number;
|
|
513
|
+
visible: boolean;
|
|
514
|
+
}
|
|
515
|
+
/**
|
|
516
|
+
* Resolve an ad's transform for the current frame.
|
|
517
|
+
* If a shot-specific override exists, use it. Otherwise use the ad's default transform.
|
|
518
|
+
* When multicam is enabled and no shot covers the frame, the ad is hidden.
|
|
519
|
+
*/
|
|
520
|
+
export declare function getAdTransformAtFrame(ad: Ad3DPlacement, scene: Layer2Scene, frame: number): ResolvedTransform;
|
|
521
|
+
/**
|
|
522
|
+
* Resolve a webcam composite's transform for the current frame.
|
|
523
|
+
* If a shot-specific override exists, use it. Otherwise use the webcam's default transform.
|
|
524
|
+
* When multicam is enabled and no shot covers the frame, the webcam is hidden.
|
|
525
|
+
*/
|
|
526
|
+
export declare function getWebcamTransformAtFrame(webcam: WebcamComposite, scene: Layer2Scene, frame: number): ResolvedTransform;
|
|
527
|
+
export interface SegmentValidationResult {
|
|
528
|
+
/** Whether all segments are valid (no unresolved overlaps, valid bounds) */
|
|
529
|
+
valid: boolean;
|
|
530
|
+
/** Cleaned segments (minor overlaps auto-resolved) */
|
|
531
|
+
segments: ShotSegment[];
|
|
532
|
+
/** Unresolved overlaps (> 2 frames) that require user attention */
|
|
533
|
+
overlaps?: Array<{
|
|
534
|
+
segA: string;
|
|
535
|
+
segB: string;
|
|
536
|
+
overlapFrames: number;
|
|
537
|
+
}>;
|
|
538
|
+
}
|
|
539
|
+
/**
|
|
540
|
+
* Validate and auto-fix shot segments for overlap and bound issues.
|
|
541
|
+
*
|
|
542
|
+
* - Minor overlaps (≤ 2 frames): auto-fixed by snapping earlier segment's endFrame
|
|
543
|
+
* - Major overlaps (> 2 frames): reported in `overlaps[]` for user resolution
|
|
544
|
+
* - Invalid bounds (startFrame >= endFrame, startFrame < 0): auto-fixed
|
|
545
|
+
*
|
|
546
|
+
* Called at import boundaries (tracking import, Advanced Mode sync, JSON load),
|
|
547
|
+
* NOT during drag (drag handler already clamps per-frame).
|
|
548
|
+
*/
|
|
549
|
+
export declare function validateAndFixSegments(segments: ShotSegment[]): SegmentValidationResult;
|
|
550
|
+
/**
|
|
551
|
+
* Validate that all segment presetId references point to existing presets.
|
|
552
|
+
* Returns orphaned segment IDs (presetId not found in presets array).
|
|
553
|
+
*/
|
|
554
|
+
export declare function validatePresetReferences(segments: ShotSegment[], presets: ShotPreset[]): {
|
|
555
|
+
valid: boolean;
|
|
556
|
+
orphanedSegments?: string[];
|
|
557
|
+
};
|
|
558
|
+
//# sourceMappingURL=layer2.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layer2.d.ts","sourceRoot":"","sources":["../src/layer2.ts"],"names":[],"mappings":"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"}
|