Class: Options
Defined in: src/core/Options.ts:100
A central configuration class for the entire XR Blocks system. It aggregates all settings and provides chainable methods for enabling common features.
Constructors
Constructor
new Options(
options?):Options
Defined in: src/core/Options.ts:229
Constructs the Options object by merging default values with provided custom options.
Parameters
options?
A custom options object to override the defaults.
ai?
{ enabled?: boolean; gemini?: { apiKey?: string; config?: { }; enabled?: boolean; keyValid?: boolean; liveModel?: string; model?: string; urlParam?: string; }; globalUrlParams?: { key?: string; }; model?: AIModel; openai?: { apiKey?: string; enabled?: boolean; model?: string; urlParam?: string; }; promptForApiKey?: boolean; } = ...
ai.enabled?
boolean = false
ai.gemini?
{ apiKey?: string; config?: { }; enabled?: boolean; keyValid?: boolean; liveModel?: string; model?: string; urlParam?: string; } = ...
ai.gemini.apiKey?
string = ''
ai.gemini.config?
{ } = {}
ai.gemini.enabled?
boolean = false
ai.gemini.keyValid?
boolean = false
ai.gemini.liveModel?
string = GEMINI_DEFAULT_LIVE_MODEL
ai.gemini.model?
string = GEMINI_DEFAULT_FLASH_MODEL
ai.gemini.urlParam?
string = 'geminiKey'
ai.globalUrlParams?
{ key?: string; } = ...
ai.globalUrlParams.key?
string = 'key'
ai.model?
AIModel = 'gemini'
ai.openai?
{ apiKey?: string; enabled?: boolean; model?: string; urlParam?: string; } = ...
ai.openai.apiKey?
string = ''
ai.openai.enabled?
boolean = false
ai.openai.model?
string = 'gpt-4.1'
ai.openai.urlParam?
string = 'openaiKey'
ai.promptForApiKey?
boolean = false
Show a browser dialog before AI starts so a prototype user can provide, replace, or remove an API key kept only for the current page. Disabled by default. The dialog is skipped when the page URL or keys.json already provides a key.
antialias?
boolean = true
Whether to use antialiasing.
camera?
{ far?: number; near?: number; } = ...
camera.far?
number = 500
camera.near?
number = 0.01
canvas?
{ }
Canvas element to use for rendering. If not defined, a new element will be added to document body.
catchScriptExceptions?
boolean = true
Whether to catch all exceptions thrown by developer scripts in the main update loop and physics step, and log them using console.error instead of crashing the application. When enabled, exceptions in one script will not prevent other scripts or subsystems from updating.
context?
{ debugging?: boolean; enable?: () => ContextOptions; enabled?: boolean; enableScene?: () => ContextOptions; enableSetOfMark?: () => ContextOptions; enableVisibleObjects?: () => ContextOptions; scene?: { enable?: () => SceneOptions; enabled?: boolean; enableSetOfMark?: () => SceneOptions; enableVisibleObjects?: () => SceneOptions; pollingIntervalMs?: number; som?: { enable?: () => SceneSetOfMarkOptions; enabled?: boolean; }; visibleObjects?: { enable?: () => SceneVisibilityOptions; enabled?: boolean; occlusionOpacityThreshold?: number; }; }; } = ...
context.debugging?
boolean = false
context.enable?
() => ContextOptions
context.enabled?
boolean = false
context.enableScene?
() => ContextOptions
context.enableSetOfMark?
() => ContextOptions
context.enableVisibleObjects?
() => ContextOptions
context.scene?
{ enable?: () => SceneOptions; enabled?: boolean; enableSetOfMark?: () => SceneOptions; enableVisibleObjects?: () => SceneOptions; pollingIntervalMs?: number; som?: { enable?: () => SceneSetOfMarkOptions; enabled?: boolean; }; visibleObjects?: { enable?: () => SceneVisibilityOptions; enabled?: boolean; occlusionOpacityThreshold?: number; }; } = ...
context.scene.enable?
() => SceneOptions
context.scene.enabled?
boolean = false
context.scene.enableSetOfMark?
() => SceneOptions
context.scene.enableVisibleObjects?
() => SceneOptions
context.scene.pollingIntervalMs?
number = 3000
context.scene.som?
{ enable?: () => SceneSetOfMarkOptions; enabled?: boolean; } = ...
context.scene.som.enable?
() => SceneSetOfMarkOptions
context.scene.som.enabled?
boolean = false
context.scene.visibleObjects?
{ enable?: () => SceneVisibilityOptions; enabled?: boolean; occlusionOpacityThreshold?: number; } = ...
context.scene.visibleObjects.enable?
() => SceneVisibilityOptions
context.scene.visibleObjects.enabled?
boolean = false
context.scene.visibleObjects.occlusionOpacityThreshold?
number = 0
Raycast hits on materials with effective opacity less than or equal to this threshold are ignored for line-of-sight occlusion.
controllers?
{ debug?: boolean; enabled?: boolean; enabledMouse?: boolean; visualization?: boolean; visualizeRays?: boolean; } = ...
controllers.debug?
boolean = false
Whether to enable debugging features for controllers.
controllers.enabled?
boolean = true
Whether controller input is enabled.
controllers.enabledMouse?
boolean = true
Whether mouse input should act as a controller on desktop.
controllers.visualization?
boolean = false
Whether to show controller models.
controllers.visualizeRays?
boolean = false
Whether to show the ray lines extending from the controllers.
debugging?
boolean = false
Global flag for enabling various debugging features.
depth?
{ dataFormatPreference?: readonly (XRDepthDataFormat | undefined)[]; debugging?: boolean; depthMesh?: { colliderUpdateFps?: number; depthFullResolution?: number; depthMeshUpdateFps?: number; enabled?: boolean; ignoreEdgePixels?: number; opacity?: number; patchHoles?: boolean; patchHolesUpper?: boolean; renderShadow?: boolean; shadowOpacity?: number; showDebugTexture?: boolean; updateFullResolutionGeometry?: boolean; updateVertexNormals?: boolean; useDepthTexture?: boolean; useDownsampledGeometry?: boolean; useDualCollider?: boolean; }; depthTexture?: { applyGaussianBlur?: boolean; applyKawaseBlur?: boolean; constantKernel?: boolean; enabled?: boolean; }; depthTypeRequest?: readonly (XRDepthType | undefined)[]; enabled?: boolean; matchDepthView?: boolean; occlusion?: { enabled?: boolean; }; usagePreference?: readonly (XRDepthUsage | undefined)[]; } = ...
depth.dataFormatPreference?
readonly (XRDepthDataFormat | undefined)[] = ...
depth.debugging?
boolean = false
depth.depthMesh?
{ colliderUpdateFps?: number; depthFullResolution?: number; depthMeshUpdateFps?: number; enabled?: boolean; ignoreEdgePixels?: number; opacity?: number; patchHoles?: boolean; patchHolesUpper?: boolean; renderShadow?: boolean; shadowOpacity?: number; showDebugTexture?: boolean; updateFullResolutionGeometry?: boolean; updateVertexNormals?: boolean; useDepthTexture?: boolean; useDownsampledGeometry?: boolean; useDualCollider?: boolean; } = ...
depth.depthMesh.colliderUpdateFps?
number = 5
depth.depthMesh.depthFullResolution?
number = 160
depth.depthMesh.depthMeshUpdateFps?
number = 0
FPS cap for depth mesh geometry updates. 0 = update every frame.
depth.depthMesh.enabled?
boolean = false
depth.depthMesh.ignoreEdgePixels?
number = 3
depth.depthMesh.opacity?
number = 1.0
depth.depthMesh.patchHoles?
boolean = false
depth.depthMesh.patchHolesUpper?
boolean = false
depth.depthMesh.renderShadow?
boolean = false
depth.depthMesh.shadowOpacity?
number = 0.25
depth.depthMesh.showDebugTexture?
boolean = false
depth.depthMesh.updateFullResolutionGeometry?
boolean = false
depth.depthMesh.updateVertexNormals?
boolean = false
depth.depthMesh.useDepthTexture?
boolean = false
depth.depthMesh.useDownsampledGeometry?
boolean = true
depth.depthMesh.useDualCollider?
boolean = false
depth.depthTexture?
{ applyGaussianBlur?: boolean; applyKawaseBlur?: boolean; constantKernel?: boolean; enabled?: boolean; } = ...
depth.depthTexture.applyGaussianBlur?
boolean = false
depth.depthTexture.applyKawaseBlur?
boolean = false
depth.depthTexture.constantKernel?
boolean = false
depth.depthTexture.enabled?
boolean = false
depth.depthTypeRequest?
readonly (XRDepthType | undefined)[] = ...
depth.enabled?
boolean = false
depth.matchDepthView?
boolean = false
depth.occlusion?
{ enabled?: boolean; } = ...
depth.occlusion.enabled?
boolean = false
depth.usagePreference?
readonly (XRDepthUsage | undefined)[] = []
deviceCamera?
{ cameraLabel?: string; enabled?: boolean; rgbToDepthParams?: { k1?: number; k2?: number; k3?: number; p1?: number; p2?: number; scale?: number; scaleX?: number; scaleY?: number; translateU?: number; translateV?: number; xc?: number; yc?: number; }; videoConstraints?: { }; willCaptureFrequently?: boolean; } = ...
deviceCamera.cameraLabel?
string
deviceCamera.enabled?
boolean = false
deviceCamera.rgbToDepthParams?
{ k1?: number; k2?: number; k3?: number; p1?: number; p2?: number; scale?: number; scaleX?: number; scaleY?: number; translateU?: number; translateV?: number; xc?: number; yc?: number; } = ...
Parameters for RGB to depth UV mapping given different aspect ratios.
deviceCamera.rgbToDepthParams.k1?
number
deviceCamera.rgbToDepthParams.k2?
number
deviceCamera.rgbToDepthParams.k3?
number
deviceCamera.rgbToDepthParams.p1?
number
deviceCamera.rgbToDepthParams.p2?
number
deviceCamera.rgbToDepthParams.scale?
number
deviceCamera.rgbToDepthParams.scaleX?
number
deviceCamera.rgbToDepthParams.scaleY?
number
deviceCamera.rgbToDepthParams.translateU?
number
deviceCamera.rgbToDepthParams.translateV?
number
deviceCamera.rgbToDepthParams.xc?
number
deviceCamera.rgbToDepthParams.yc?
number
deviceCamera.videoConstraints?
{ }
Constraints for getUserMedia. This will guide the initial camera
selection.
deviceCamera.willCaptureFrequently?
boolean = false
Hint for performance optimization on frequent captures.
enableAI?
() => Options
enableAutomationMode?
(config) => Options
enableCamera?
(facingMode) => Options
enableContext?
() => Options
enableControllers?
() => Options
enableDepth?
() => Options
enableFaceDetection?
() => Options
enableGestures?
() => Options
enableHandRays?
() => Options
enableHands?
() => Options
enableHeadGestures?
() => Options
enableHumanDetection?
() => Options
enableObjectDetection?
() => Options
enablePlaneDetection?
() => Options
enableReticles?
() => Options
enableSceneContext?
() => Options
enableSegmentation?
() => Options
enableSetOfMarkContext?
() => Options
enableSimulator?
boolean = true
enableStrokes?
() => Options
enableVisibleObjectsContext?
() => Options
enableVR?
() => Options
enableXRTransitions?
() => Options
formFactor?
"auto" | "xr" | "hud" | "vr" | "desktop" | "mobile"
gestures?
{ enable?: () => GestureRecognitionOptions; enabled?: boolean; gestureRecognizer?: { dispose?: () => void; getGestureConfigurations?: () => Record<string, GestureConfiguration>; init?: () => Promise<void>; recognize?: (context) => GestureScoreMap | Promise<GestureScoreMap>; }; gestures?: {[key: string]: { enabled?: boolean; threshold?: number; } | undefined; }; minimumConfidence?: number; poseEstimator?: { dispose?: () => void; getHandContext?: (handedness) => HandContext | null; getHandContexts?: () => Partial<Record<HandLabel, HandContext>>; init?: (dependencies?) => Promise<void>; }; setGestureConfig?: (name, config) => GestureRecognitionOptions; setGestureEnabled?: (name, enabled) => GestureRecognitionOptions; setGestureRecognizer?: (gestureRecognizer) => GestureRecognitionOptions; setPoseEstimator?: (poseEstimator) => GestureRecognitionOptions; updateIntervalMs?: number; } = ...
gestures.enable?
() => GestureRecognitionOptions
gestures.enabled?
boolean = false
gestures.gestureRecognizer?
{ dispose?: () => void; getGestureConfigurations?: () => Record<string, GestureConfiguration>; init?: () => Promise<void>; recognize?: (context) => GestureScoreMap | Promise<GestureScoreMap>; } = ...
gestures.gestureRecognizer.dispose?
() => void
gestures.gestureRecognizer.getGestureConfigurations?
() => Record<string, GestureConfiguration>
gestures.gestureRecognizer.init?
() => Promise<void>
gestures.gestureRecognizer.recognize?
(context) => GestureScoreMap | Promise<GestureScoreMap>
gestures.gestures?
{[key: string]: { enabled?: boolean; threshold?: number; } | undefined; } = {}
gestures.minimumConfidence?
number = 0.6
gestures.poseEstimator?
{ dispose?: () => void; getHandContext?: (handedness) => HandContext | null; getHandContexts?: () => Partial<Record<HandLabel, HandContext>>; init?: (dependencies?) => Promise<void>; } = ...
gestures.poseEstimator.dispose?
() => void
gestures.poseEstimator.getHandContext?
(handedness) => HandContext | null
gestures.poseEstimator.getHandContexts?
() => Partial<Record<HandLabel, HandContext>>
gestures.poseEstimator.init?
(dependencies?) => Promise<void>
gestures.setGestureConfig?
(name, config) => GestureRecognitionOptions
gestures.setGestureEnabled?
(name, enabled) => GestureRecognitionOptions
gestures.setGestureRecognizer?
(gestureRecognizer) => GestureRecognitionOptions
gestures.setPoseEstimator?
(poseEstimator) => GestureRecognitionOptions
gestures.updateIntervalMs?
number = 33
hands?
{ debugging?: boolean; enabled?: boolean; enableHands?: () => HandsOptions; enableHandsVisualization?: () => HandsOptions; visualization?: boolean; visualizeJoints?: boolean; visualizeMeshes?: boolean; } = ...
hands.debugging?
boolean = false
hands.enabled?
boolean = false
Whether hand tracking is enabled.
hands.enableHands?
() => HandsOptions
hands.enableHandsVisualization?
() => HandsOptions
hands.visualization?
boolean = false
Whether to show any hand visualization.
hands.visualizeJoints?
boolean = false
Whether to show the tracked hand joints.
hands.visualizeMeshes?
boolean = false
Whether to show the virtual hand meshes.
headGestures?
{ enable?: () => HeadGestureRecognitionOptions; enabled?: boolean; gestureRecognizer?: { dispose?: () => void; getGestureConfigurations?: () => Record<string, HeadGestureConfiguration>; init?: () => Promise<void>; recognize?: (context) => HeadGestureScoreMap | Promise<HeadGestureScoreMap>; setGestureConfig?: (name, config) => void; }; gestures?: {[key: string]: { enabled?: boolean; threshold?: number; } | undefined; }; historyDurationMs?: number; maximumSampleAngleRadians?: number; maximumSampleGapMs?: number; minimumConfidence?: number; releaseConfidence?: number; setGestureConfig?: (name, config) => HeadGestureRecognitionOptions; setGestureEnabled?: (name, enabled) => HeadGestureRecognitionOptions; setGestureRecognizer?: (gestureRecognizer) => HeadGestureRecognitionOptions; updateIntervalMs?: number; warmupDurationMs?: number; } = ...
headGestures.enable?
() => HeadGestureRecognitionOptions
headGestures.enabled?
boolean = false
headGestures.gestureRecognizer?
{ dispose?: () => void; getGestureConfigurations?: () => Record<string, HeadGestureConfiguration>; init?: () => Promise<void>; recognize?: (context) => HeadGestureScoreMap | Promise<HeadGestureScoreMap>; setGestureConfig?: (name, config) => void; } = ...
headGestures.gestureRecognizer.dispose?
() => void
headGestures.gestureRecognizer.getGestureConfigurations?
() => Record<string, HeadGestureConfiguration>
headGestures.gestureRecognizer.init?
() => Promise<void>
headGestures.gestureRecognizer.recognize?
(context) => HeadGestureScoreMap | Promise<HeadGestureScoreMap>
headGestures.gestureRecognizer.setGestureConfig?
(name, config) => void
headGestures.gestures?
{[key: string]: { enabled?: boolean; threshold?: number; } | undefined; } = {}
headGestures.historyDurationMs?
number = 1500
headGestures.maximumSampleAngleRadians?
number = ...
headGestures.maximumSampleGapMs?
number = 250
headGestures.minimumConfidence?
number = 0.6
headGestures.releaseConfidence?
number = 0.4
headGestures.setGestureConfig?
(name, config) => HeadGestureRecognitionOptions
headGestures.setGestureEnabled?
(name, enabled) => HeadGestureRecognitionOptions
headGestures.setGestureRecognizer?
(gestureRecognizer) => HeadGestureRecognitionOptions
headGestures.updateIntervalMs?
number = 16
headGestures.warmupDurationMs?
number = 200
interaction?
{ longSelectDuration?: number; raycastMode?: RaycastMode; } = ...
interaction.longSelectDuration?
number = 0.75
Seconds a stable object selection must be held before long-select.
interaction.raycastMode?
RaycastMode = 'continuous'
When to sample ray intersections for interaction.
lighting?
{ castDirectionalLightShadow?: boolean; debugging?: boolean; enabled?: boolean; useAmbientSH?: boolean; useDirectionalLight?: boolean; useDynamicSoftShadow?: boolean; } = ...
lighting.castDirectionalLightShadow?
boolean = false
Cast shadows using diretional light.
lighting.debugging?
boolean = false
Enables debugging renders and logs.
lighting.enabled?
boolean = false
Enables XR lighting.
lighting.useAmbientSH?
boolean = false
Add ambient spherical harmonics to lighting.
lighting.useDirectionalLight?
boolean = false
Add main diredtional light to lighting.
lighting.useDynamicSoftShadow?
boolean = false
Adjust hardness of shadows according to relative brightness of main light.
logarithmicDepthBuffer?
boolean = false
Whether to use a logarithmic depth buffer. Useful for depth-aware occlusions.
permissions?
{ camera?: boolean; geolocation?: boolean; microphone?: boolean; } = ...
Which permissions to request before entering the XR session.
permissions.camera?
boolean = false
permissions.geolocation?
boolean = false
permissions.microphone?
boolean = false
physics?
{ fps?: number; gravity?: { x?: number; y?: number; z?: number; }; RAPIER?: { init?: () => Promise<void>; }; useEventQueue?: boolean; worldStep?: boolean; } = ...
physics.fps?
number = 45
The target frames per second for the physics simulation loop.
physics.gravity?
{ x?: number; y?: number; z?: number; } = ...
The global gravity vector applied to the physics world.
physics.gravity.x?
number = 0.0
physics.gravity.y?
number = -9.81
physics.gravity.z?
number = 0.0
physics.RAPIER?
{ init?: () => Promise<void>; }
Instance of RAPIER.
physics.RAPIER.init?
() => Promise<void>
physics.useEventQueue?
boolean = false
If true, an event queue will be created and passed to world.step(),
enabling the handling of collision and contact events.
physics.worldStep?
boolean = true
If true, the Physics manager will automatically call world.step()
on its fixed interval. Set to false if you want to control the
simulation step manually.
referenceSpaceType?
XRReferenceSpaceType = 'local-floor'
reticles?
{ defaultRenderDistance?: number; enabled?: boolean; maxDistance?: number; projectOnDepthMesh?: boolean; } = ...
reticles.defaultRenderDistance?
number = 0
Distance in meters at which to render the reticle when no valid hit is found. Set to 0 to hide the reticle on a miss.
reticles.enabled?
boolean = true
reticles.maxDistance?
number
Maximum reticle drawing distance in meters. It does not limit targeting.
reticles.projectOnDepthMesh?
boolean = false
Whether reticles use the real-world depth mesh as a surface.
setAppDescription?
(description) => Options
setAppTitle?
(title) => Options
simulator?
{ activeEnvironmentIndex?: number; blendingMode?: "screen" | "normal"; defaultHand?: Handedness; defaultMode?: SimulatorMode; deviceCamera?: { enabled?: boolean; }; environments?: readonly ({ manifestPath?: string; name?: string; } | undefined)[]; geminiLivePanel?: { element?: string; enabled?: boolean; }; handPhysics?: { contactOffset?: number; enabled?: boolean; friction?: number; mass?: number; radius?: number; restitution?: number; }; handPosePanel?: { element?: string; enabled?: boolean; }; initialCameraPosition?: { x?: number; y?: number; z?: number; }; instructions?: { customInstructions?: readonly ({ description?: ... | ...; header?: ... | ...; videoSrc?: ... | ...; } | undefined)[]; element?: string; enabled?: boolean; showAutomatically?: boolean; }; leftHandOrigin?: { x?: number; y?: number; z?: number; }; modeToggle?: { enabled?: boolean; toggleKey?: Keycodes | null; toggleOrder?: { Editor?: SimulatorMode; Hands?: SimulatorMode; Navigation?: SimulatorMode; PointerLock?: SimulatorMode; User?: SimulatorMode; }; }; navMesh?: { enabled?: boolean; eyeHeight?: number; showDebugVisualizations?: boolean; }; physics?: { enabled?: boolean; }; reachAngle?: { angle?: number; enabled?: boolean; }; reachDistance?: { enabled?: boolean; radius?: number; }; renderToRenderTexture?: boolean; rightHandOrigin?: { x?: number; y?: number; z?: number; }; simulatorSettingsPanel?: { element?: string; enabled?: boolean; }; stereo?: { enabled?: boolean; }; } = ...
simulator.activeEnvironmentIndex?
number = 0
simulator.blendingMode?
"screen" | "normal" = 'normal'
simulator.defaultHand?
Handedness = Handedness.LEFT
simulator.defaultMode?
SimulatorMode = SimulatorMode.USER
simulator.deviceCamera?
{ enabled?: boolean; } = ...
simulator.deviceCamera.enabled?
boolean = true
simulator.environments?
readonly ({ manifestPath?: string; name?: string; } | undefined)[] = ...
simulator.geminiLivePanel?
{ element?: string; enabled?: boolean; } = ...
simulator.geminiLivePanel.element?
string = 'xrblocks-simulator-geminilive'
simulator.geminiLivePanel.enabled?
boolean = false
simulator.handPhysics?
{ contactOffset?: number; enabled?: boolean; friction?: number; mass?: number; radius?: number; restitution?: number; } = ...
Optional physical constraints for simulated hands. Requires Rapier.
simulator.handPhysics.contactOffset?
number
simulator.handPhysics.enabled?
boolean
simulator.handPhysics.friction?
number
simulator.handPhysics.mass?
number
simulator.handPhysics.radius?
number
simulator.handPhysics.restitution?
number
simulator.handPosePanel?
{ element?: string; enabled?: boolean; } = ...
simulator.handPosePanel.element?
string = 'xrblocks-simulator-hand-pose-panel'
simulator.handPosePanel.enabled?
boolean = true
simulator.initialCameraPosition?
{ x?: number; y?: number; z?: number; } = ...
simulator.initialCameraPosition.x?
number = 0
simulator.initialCameraPosition.y?
number = 1.5
simulator.initialCameraPosition.z?
number = 0
simulator.instructions?
{ customInstructions?: readonly ({ description?: ... | ...; header?: ... | ...; videoSrc?: ... | ...; } | undefined)[]; element?: string; enabled?: boolean; showAutomatically?: boolean; } = ...
simulator.instructions.customInstructions?
readonly ({ description?: ... | ...; header?: ... | ...; videoSrc?: ... | ...; } | undefined)[] = ...
simulator.instructions.element?
string = 'xrblocks-simulator-instructions'
simulator.instructions.enabled?
boolean = true
simulator.instructions.showAutomatically?
boolean = false
simulator.leftHandOrigin?
{ x?: number; y?: number; z?: number; } = ...
Shoulder/chest origin of the left hand in local camera space.
simulator.leftHandOrigin.x?
number = -0.2
simulator.leftHandOrigin.y?
number = -0.2
simulator.leftHandOrigin.z?
number = 0
simulator.modeToggle?
{ enabled?: boolean; toggleKey?: Keycodes | null; toggleOrder?: { Editor?: SimulatorMode; Hands?: SimulatorMode; Navigation?: SimulatorMode; PointerLock?: SimulatorMode; User?: SimulatorMode; }; } = ...
simulator.modeToggle.enabled?
boolean = false
simulator.modeToggle.toggleKey?
Keycodes | null = ...
simulator.modeToggle.toggleOrder?
{ Editor?: SimulatorMode; Hands?: SimulatorMode; Navigation?: SimulatorMode; PointerLock?: SimulatorMode; User?: SimulatorMode; } = DEFAULT_MODE_TOGGLE_ORDER
simulator.modeToggle.toggleOrder.Editor?
SimulatorMode = SimulatorMode.USER
simulator.modeToggle.toggleOrder.Hands?
SimulatorMode = SimulatorMode.POINTER_LOCK
simulator.modeToggle.toggleOrder.Navigation?
SimulatorMode = SimulatorMode.CONTROLLER
simulator.modeToggle.toggleOrder.PointerLock?
SimulatorMode = SimulatorMode.EDITOR
simulator.modeToggle.toggleOrder.User?
SimulatorMode = SimulatorMode.POSE
simulator.navMesh?
{ enabled?: boolean; eyeHeight?: number; showDebugVisualizations?: boolean; } = ...
simulator.navMesh.enabled?
boolean = false
simulator.navMesh.eyeHeight?
number = 1.5
simulator.navMesh.showDebugVisualizations?
boolean = false
simulator.physics?
{ enabled?: boolean; } = ...
Controls the isolated physics world used by the desktop simulator.
simulator.physics.enabled?
boolean = true
simulator.reachAngle?
{ angle?: number; enabled?: boolean; } = ...
Limits the angular cone in front of the user within which controllers can move.
simulator.reachAngle.angle?
number = Math.PI
The maximum full cone angle in radians around the camera's forward direction (default is Math.PI, a front hemisphere).
simulator.reachAngle.enabled?
boolean = false
simulator.reachDistance?
{ enabled?: boolean; radius?: number; } = ...
Limits how far each hand controller can travel from the user's shoulder origin.
simulator.reachDistance.enabled?
boolean = false
simulator.reachDistance.radius?
number = 0.75
The maximum distance in meters a controller can move from its origin point.
simulator.renderToRenderTexture?
boolean = true
simulator.rightHandOrigin?
{ x?: number; y?: number; z?: number; } = ...
Shoulder/chest origin of the right hand in local camera space.
simulator.rightHandOrigin.x?
number = 0.2
simulator.rightHandOrigin.y?
number = -0.2
simulator.rightHandOrigin.z?
number = 0
simulator.simulatorSettingsPanel?
{ element?: string; enabled?: boolean; } = ...
simulator.simulatorSettingsPanel.element?
string = 'xrblocks-simulator-settings'
simulator.simulatorSettingsPanel.enabled?
boolean = true
simulator.stereo?
{ enabled?: boolean; } = ...
simulator.stereo.enabled?
boolean = false
sound?
{ speechRecognizer?: { commandConfidenceThreshold?: number; commands?: readonly (string | undefined)[]; continuous?: boolean; enabled?: boolean; interimResults?: boolean; lang?: string; playSimulatorActivationSounds?: boolean; }; speechSynthesizer?: { allowInterruptions?: boolean; enabled?: boolean; }; } = ...
sound.speechRecognizer?
{ commandConfidenceThreshold?: number; commands?: readonly (string | undefined)[]; continuous?: boolean; enabled?: boolean; interimResults?: boolean; lang?: string; playSimulatorActivationSounds?: boolean; } = ...
sound.speechRecognizer.commandConfidenceThreshold?
number = 0.7
Minimum confidence (0-1) for a command.
sound.speechRecognizer.commands?
readonly (string | undefined)[] = []
Keywords to detect as commands.
sound.speechRecognizer.continuous?
boolean = false
If true, recognition continues after a pause.
sound.speechRecognizer.enabled?
boolean = true
sound.speechRecognizer.interimResults?
boolean = false
If true, provides interim results.
sound.speechRecognizer.lang?
string = 'en-US'
Recognition language (e.g., 'en-US').
sound.speechRecognizer.playSimulatorActivationSounds?
boolean = true
If true, play activation sounds in simulator.
sound.speechSynthesizer?
{ allowInterruptions?: boolean; enabled?: boolean; } = ...
sound.speechSynthesizer.allowInterruptions?
boolean = false
If true, a new call to speak() will interrupt any ongoing speech.
sound.speechSynthesizer.enabled?
boolean = false
stencil?
boolean = false
Whether to request a stencil buffer.
strokes?
{ enable?: () => StrokeRecognitionOptions; enabled?: boolean; endDelay?: number; joint?: "wrist" | "thumb-metacarpal" | "thumb-phalanx-proximal" | "thumb-phalanx-distal" | "thumb-tip" | "index-finger-metacarpal" | "index-finger-phalanx-proximal" | "index-finger-phalanx-intermediate" | "index-finger-phalanx-distal" | "index-finger-tip" | "middle-finger-metacarpal" | "middle-finger-phalanx-proximal" | "middle-finger-phalanx-intermediate" | "middle-finger-phalanx-distal" | "middle-finger-tip" | "ring-finger-metacarpal" | "ring-finger-phalanx-proximal" | "ring-finger-phalanx-intermediate" | "ring-finger-phalanx-distal" | "ring-finger-tip" | "pinky-finger-metacarpal" | "pinky-finger-phalanx-proximal" | "pinky-finger-phalanx-intermediate" | "pinky-finger-phalanx-distal" | "pinky-finger-tip"; maxPoints?: number; providerConfig?: { onedollar?: { supportedShapes?: readonly (... | ...)[]; }; provider?: "onedollar"; }; startDelay?: number; } = ...
strokes.enable?
() => StrokeRecognitionOptions
strokes.enabled?
boolean = true
Master switch for the stroke recognition block.
strokes.endDelay?
number = 0.2
Delay in seconds to ignore points before gesture end.
strokes.joint?
"wrist" | "thumb-metacarpal" | "thumb-phalanx-proximal" | "thumb-phalanx-distal" | "thumb-tip" | "index-finger-metacarpal" | "index-finger-phalanx-proximal" | "index-finger-phalanx-intermediate" | "index-finger-phalanx-distal" | "index-finger-tip" | "middle-finger-metacarpal" | "middle-finger-phalanx-proximal" | "middle-finger-phalanx-intermediate" | "middle-finger-phalanx-distal" | "middle-finger-tip" | "ring-finger-metacarpal" | "ring-finger-phalanx-proximal" | "ring-finger-phalanx-intermediate" | "ring-finger-phalanx-distal" | "ring-finger-tip" | "pinky-finger-metacarpal" | "pinky-finger-phalanx-proximal" | "pinky-finger-phalanx-intermediate" | "pinky-finger-phalanx-distal" | "pinky-finger-tip" = 'index-finger-tip'
The hand joint to track for stroke recognition.
strokes.maxPoints?
number = 1000
Maximum number of points to capture in a single stroke.
strokes.providerConfig?
{ onedollar?: { supportedShapes?: readonly (... | ...)[]; }; provider?: "onedollar"; } = ...
Configuration for the stroke recognition provider.
strokes.providerConfig.onedollar?
{ supportedShapes?: readonly (... | ...)[]; } = ...
Options specific to the 'onedollar' provider.
strokes.providerConfig.onedollar.supportedShapes?
readonly (... | ...)[] = DEFAULT_SUPPORTED_SHAPES
strokes.providerConfig.provider?
"onedollar" = ...
Backing provider that recognizes strokes.
- 'onedollar': $1 Unistroke recognizer.
strokes.startDelay?
number = 0.2
Delay in seconds after gesture start before recording points.
transition?
{ defaultBackgroundColor?: number; enabled?: boolean; transitionTime?: number; } = ...
transition.defaultBackgroundColor?
number = 0xffffff
The default background color for VR transitions.
transition.enabled?
boolean = false
Whether the transition effect is enabled.
transition.transitionTime?
number = 0.5
The duration of the transition in seconds.
usePostprocessing?
boolean = false
Whether to use post-processing effects.
webxrOptionalFeatures?
readonly (string | undefined)[] = ...
Any additional optional features when initializing webxr.
webxrRequiredFeatures?
readonly (string | undefined)[] = []
Any additional required features when initializing webxr.
world?
{ anchors?: { debugging?: boolean; enable?: () => AnchorsOptions; enabled?: boolean; enablePersistence?: () => AnchorsOptions; maxStoredAnchors?: number; persistent?: boolean; simulatorFallback?: boolean; storageKey?: string; }; debugging?: boolean; enableAnchorPersistence?: () => WorldOptions; enableAnchors?: () => WorldOptions; enabled?: boolean; enableFaceDetection?: () => WorldOptions; enableHumanDetection?: () => WorldOptions; enableMeshDetection?: () => WorldOptions; enableObjectDetection?: () => WorldOptions; enablePlaneDetection?: () => WorldOptions; enableSegmentation?: () => WorldOptions; enableSoundDetection?: () => WorldOptions; faces?: { backendConfig?: { activeBackend?: string; mediapipe?: { minFaceDetectionConfidence?: ... | ...; minFacePresenceConfidence?: ... | ...; minTrackingConfidence?: ... | ...; modelAssetPath?: ... | ...; numFaces?: ... | ...; outputFaceBlendshapes?: ... | ... | ...; outputFacialTransformationMatrixes?: ... | ... | ...; wasmFilesUrl?: ... | ...; }; }; enable?: () => FacesOptions; enabled?: boolean; pollingIntervalMs?: number; }; humans?: { backendConfig?: { activeBackend?: string; mediapipe?: { minPoseDetectionConfidence?: ... | ...; minPosePresenceConfidence?: ... | ...; minTrackingConfidence?: ... | ...; modelAssetPath?: ... | ...; numPoses?: ... | ...; useWorker?: ... | ... | ...; wasmFilesUrl?: ... | ...; }; }; enable?: () => HumansOptions; enabled?: boolean; pollingIntervalMs?: number; useDepthProjection?: boolean; }; initiateRoomCapture?: boolean; meshes?: { enable?: () => MeshDetectionOptions; enabled?: boolean; showDebugVisualizations?: boolean; }; objects?: { backendConfig?: { activeBackend?: "gemini" | "mediapipe"; gemini?: { generationConfig?: ... | ...; responseSchema?: ... | ...; systemInstruction?: ... | ...; }; mediapipe?: { modelAssetPath?: ... | ...; scoreThreshold?: ... | ...; wasmFilesUrl?: ... | ...; }; }; debugging?: boolean; enable?: () => ObjectsOptions; enabled?: boolean; objectImageMargin?: number; pollingIntervalMs?: number; showDebugVisualizations?: boolean; simulatorOverride?: boolean; }; planes?: { debugging?: boolean; enable?: () => PlanesOptions; enabled?: boolean; showDebugVisualizations?: boolean; }; segmentation?: { backendConfig?: { activeBackend?: string; mediapipe?: { modelAssetPath?: ... | ...; outputCategoryMask?: ... | ... | ...; wasmFilesUrl?: ... | ...; }; }; enable?: () => SegmentationOptions; enabled?: boolean; pollingIntervalMs?: number; }; sounds?: { backendConfig?: { activeBackend?: string; mediapipe?: { chunkSamples?: ... | ...; modelAssetPath?: ... | ...; wasmFilesUrl?: ... | ...; }; }; enable?: () => SoundsOptions; enabled?: boolean; showDebugInfo?: boolean; }; } = ...
world.anchors?
{ debugging?: boolean; enable?: () => AnchorsOptions; enabled?: boolean; enablePersistence?: () => AnchorsOptions; maxStoredAnchors?: number; persistent?: boolean; simulatorFallback?: boolean; storageKey?: string; } = ...
world.anchors.debugging?
boolean = false
Logs anchor lifecycle transitions.
world.anchors.enable?
() => AnchorsOptions
world.anchors.enabled?
boolean = false
Whether the anchor subsystem is created at all.
world.anchors.enablePersistence?
() => AnchorsOptions
world.anchors.maxStoredAnchors?
number = 128
Upper bound on saved handles. Persistent handles accumulate across sessions and would otherwise grow without limit; the oldest are evicted first once the cap is reached.
world.anchors.persistent?
boolean = false
Whether anchor handles are saved so they can be restored in a later session. Requires platform support for persistent handles; when the platform only offers session-scoped anchors this degrades to in-session behaviour rather than failing.
world.anchors.simulatorFallback?
boolean = false
Whether to hold poses locally when the platform has no anchor support.
Off by default: on a real headset a silent stand-in would look like working anchors while nothing is actually pinned. Demos and desktop development opt in deliberately.
world.anchors.storageKey?
string = ...
Storage key used when persistence is enabled.
Defaults to a page-scoped key. Set it explicitly to share anchors between pages, or to keep a stable key if the app might move path.
world.debugging?
boolean = false
world.enableAnchorPersistence?
() => WorldOptions
world.enableAnchors?
() => WorldOptions
world.enabled?
boolean = false
world.enableFaceDetection?
() => WorldOptions
world.enableHumanDetection?
() => WorldOptions
world.enableMeshDetection?
() => WorldOptions
world.enableObjectDetection?
() => WorldOptions
world.enablePlaneDetection?
() => WorldOptions
world.enableSegmentation?
() => WorldOptions
world.enableSoundDetection?
() => WorldOptions
world.faces?
{ backendConfig?: { activeBackend?: string; mediapipe?: { minFaceDetectionConfidence?: ... | ...; minFacePresenceConfidence?: ... | ...; minTrackingConfidence?: ... | ...; modelAssetPath?: ... | ...; numFaces?: ... | ...; outputFaceBlendshapes?: ... | ... | ...; outputFacialTransformationMatrixes?: ... | ... | ...; wasmFilesUrl?: ... | ...; }; }; enable?: () => FacesOptions; enabled?: boolean; pollingIntervalMs?: number; } = ...
world.faces.backendConfig?
{ activeBackend?: string; mediapipe?: { minFaceDetectionConfidence?: ... | ...; minFacePresenceConfidence?: ... | ...; minTrackingConfidence?: ... | ...; modelAssetPath?: ... | ...; numFaces?: ... | ...; outputFaceBlendshapes?: ... | ... | ...; outputFacialTransformationMatrixes?: ... | ... | ...; wasmFilesUrl?: ... | ...; }; } = ...
Configuration options for the active face detection backend.
world.faces.backendConfig.activeBackend?
string = 'mediapipe'
world.faces.backendConfig.mediapipe?
{ minFaceDetectionConfidence?: ... | ...; minFacePresenceConfidence?: ... | ...; minTrackingConfidence?: ... | ...; modelAssetPath?: ... | ...; numFaces?: ... | ...; outputFaceBlendshapes?: ... | ... | ...; outputFacialTransformationMatrixes?: ... | ... | ...; wasmFilesUrl?: ... | ...; } = ...
world.faces.backendConfig.mediapipe.minFaceDetectionConfidence?
... | ... = 0.5
The minimum confidence score [0.0, 1.0] required for a face to be detected.
world.faces.backendConfig.mediapipe.minFacePresenceConfidence?
... | ... = 0.5
The minimum confidence score [0.0, 1.0] required to confirm a face is still present.
world.faces.backendConfig.mediapipe.minTrackingConfidence?
... | ... = 0.5
The minimum confidence score [0.0, 1.0] required for tracking landmarks between frames.
world.faces.backendConfig.mediapipe.modelAssetPath?
... | ... = 'https://storage.googleapis.com/mediapipe-models/face_landmarker/face_landmarker/float16/latest/face_landmarker.task'
world.faces.backendConfig.mediapipe.numFaces?
... | ... = 1
The maximum number of simultaneous faces to track.
world.faces.backendConfig.mediapipe.outputFaceBlendshapes?
... | ... | ... = true
Whether to compute and emit per-face blendshape weights (52 ARKit-compatible categories). Required for facial expression mirroring, lipsync feeds, and avatar animation.
world.faces.backendConfig.mediapipe.outputFacialTransformationMatrixes?
... | ... | ... = true
Whether to compute and emit the 4x4 facial transformation matrix for each face. Provides a stable rigid head pose for parenting objects to the head (glasses, masks, hats).
world.faces.backendConfig.mediapipe.wasmFilesUrl?
... | ... = 'https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm'
world.faces.enable?
() => FacesOptions
world.faces.enabled?
boolean = false
world.faces.pollingIntervalMs?
number = 0
Minimum delay in milliseconds between continuous face detection runs. A value of 0 runs again as soon as the previous detection finishes.
world.humans?
{ backendConfig?: { activeBackend?: string; mediapipe?: { minPoseDetectionConfidence?: ... | ...; minPosePresenceConfidence?: ... | ...; minTrackingConfidence?: ... | ...; modelAssetPath?: ... | ...; numPoses?: ... | ...; useWorker?: ... | ... | ...; wasmFilesUrl?: ... | ...; }; }; enable?: () => HumansOptions; enabled?: boolean; pollingIntervalMs?: number; useDepthProjection?: boolean; } = ...
world.humans.backendConfig?
{ activeBackend?: string; mediapipe?: { minPoseDetectionConfidence?: ... | ...; minPosePresenceConfidence?: ... | ...; minTrackingConfidence?: ... | ...; modelAssetPath?: ... | ...; numPoses?: ... | ...; useWorker?: ... | ... | ...; wasmFilesUrl?: ... | ...; }; } = ...
Configuration options for the active pose detection backend.
world.humans.backendConfig.activeBackend?
string = 'mediapipe'
world.humans.backendConfig.mediapipe?
{ minPoseDetectionConfidence?: ... | ...; minPosePresenceConfidence?: ... | ...; minTrackingConfidence?: ... | ...; modelAssetPath?: ... | ...; numPoses?: ... | ...; useWorker?: ... | ... | ...; wasmFilesUrl?: ... | ...; } = ...
world.humans.backendConfig.mediapipe.minPoseDetectionConfidence?
... | ... = 0.5
The minimum confidence score [0.0, 1.0] required for a pose to be detected.
world.humans.backendConfig.mediapipe.minPosePresenceConfidence?
... | ... = 0.5
The minimum confidence score [0.0, 1.0] required to confirm a pose is still present.
world.humans.backendConfig.mediapipe.minTrackingConfidence?
... | ... = 0.5
The minimum confidence score [0.0, 1.0] required for tracking landmarks between frames.
world.humans.backendConfig.mediapipe.modelAssetPath?
... | ... = 'https://storage.googleapis.com/mediapipe-models/pose_landmarker/pose_landmarker_full/float16/latest/pose_landmarker_full.task'
world.humans.backendConfig.mediapipe.numPoses?
... | ... = 1
The maximum number of simultaneous human poses/bodies to track.
world.humans.backendConfig.mediapipe.useWorker?
... | ... | ... = true
Run inference in a web worker so a detection pass does not stall the render loop. The worker is limited to the CPU delegate because MediaPipe only creates a GPU surface for a real DOM canvas, so set this to false to trade a blocked main thread for GPU inference. Falls back to the main thread automatically when workers are unavailable.
world.humans.backendConfig.mediapipe.wasmFilesUrl?
... | ... = 'https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm'
world.humans.enable?
() => HumansOptions
world.humans.enabled?
boolean = false
world.humans.pollingIntervalMs?
number = 0
Minimum delay in milliseconds between continuous pose detection runs. A value of 0 runs again as soon as the previous detection finishes.
world.humans.useDepthProjection?
boolean = true
Project each landmark onto the depth mesh to find its world position.
This is what you want when the people being detected are physically in front of you, since the ray lands on their actual body. Turn it off when the camera is showing someone who is not part of the depth scene, such as a webcam feed on the desktop simulator: every ray would then hit the surrounding geometry instead and the skeleton would be smeared across it. With projection off, landmarks are placed along the view ray at a fixed distance, which keeps the body correctly proportioned.
world.initiateRoomCapture?
boolean = false
world.meshes?
{ enable?: () => MeshDetectionOptions; enabled?: boolean; showDebugVisualizations?: boolean; } = ...
world.meshes.enable?
() => MeshDetectionOptions
world.meshes.enabled?
boolean = false
world.meshes.showDebugVisualizations?
boolean = false
world.objects?
{ backendConfig?: { activeBackend?: "gemini" | "mediapipe"; gemini?: { generationConfig?: ... | ...; responseSchema?: ... | ...; systemInstruction?: ... | ...; }; mediapipe?: { modelAssetPath?: ... | ...; scoreThreshold?: ... | ...; wasmFilesUrl?: ... | ...; }; }; debugging?: boolean; enable?: () => ObjectsOptions; enabled?: boolean; objectImageMargin?: number; pollingIntervalMs?: number; showDebugVisualizations?: boolean; simulatorOverride?: boolean; } = ...
world.objects.backendConfig?
{ activeBackend?: "gemini" | "mediapipe"; gemini?: { generationConfig?: ... | ...; responseSchema?: ... | ...; systemInstruction?: ... | ...; }; mediapipe?: { modelAssetPath?: ... | ...; scoreThreshold?: ... | ...; wasmFilesUrl?: ... | ...; }; } = ...
Configuration for the detection backends.
world.objects.backendConfig.activeBackend?
"gemini" | "mediapipe" = ...
The active backend to use for detection.
world.objects.backendConfig.gemini?
{ generationConfig?: ... | ...; responseSchema?: ... | ...; systemInstruction?: ... | ...; } = ...
world.objects.backendConfig.gemini.generationConfig?
... | ... = ...
Extra Gemini generation config merged into the per-call config (over
the SDK defaults). Use to pin sampling parameters such as
temperature: 0 for deterministic detections.
world.objects.backendConfig.gemini.responseSchema?
... | ... = ...
world.objects.backendConfig.gemini.systemInstruction?
... | ... = ...
world.objects.backendConfig.mediapipe?
{ modelAssetPath?: ... | ...; scoreThreshold?: ... | ...; wasmFilesUrl?: ... | ...; } = ...
Configuration for MediaPipe backend.
world.objects.backendConfig.mediapipe.modelAssetPath?
... | ... = 'https://storage.googleapis.com/mediapipe-models/object_detector/efficientdet_lite2/int8/latest/efficientdet_lite2.tflite'
world.objects.backendConfig.mediapipe.scoreThreshold?
... | ... = 0.5
world.objects.backendConfig.mediapipe.wasmFilesUrl?
... | ... = 'https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.34/wasm'
world.objects.debugging?
boolean = false
world.objects.enable?
() => ObjectsOptions
world.objects.enabled?
boolean = false
world.objects.objectImageMargin?
number = 0.05
Margin to add when cropping the object image, as a percentage of image size.
world.objects.pollingIntervalMs?
number = 0
Minimum delay in milliseconds between continuous object detection runs. A value of 0 runs again as soon as the previous detection finishes.
world.objects.showDebugVisualizations?
boolean = false
world.objects.simulatorOverride?
boolean = false
Use simulator ground truth instead of a camera detector on desktop.
world.planes?
{ debugging?: boolean; enable?: () => PlanesOptions; enabled?: boolean; showDebugVisualizations?: boolean; } = ...
world.planes.debugging?
boolean = false
world.planes.enable?
() => PlanesOptions
world.planes.enabled?
boolean = false
world.planes.showDebugVisualizations?
boolean = false
world.segmentation?
{ backendConfig?: { activeBackend?: string; mediapipe?: { modelAssetPath?: ... | ...; outputCategoryMask?: ... | ... | ...; wasmFilesUrl?: ... | ...; }; }; enable?: () => SegmentationOptions; enabled?: boolean; pollingIntervalMs?: number; } = ...
world.segmentation.backendConfig?
{ activeBackend?: string; mediapipe?: { modelAssetPath?: ... | ...; outputCategoryMask?: ... | ... | ...; wasmFilesUrl?: ... | ...; }; } = ...
Configuration options for the active segmentation backend.
world.segmentation.backendConfig.activeBackend?
string = 'mediapipe'
world.segmentation.backendConfig.mediapipe?
{ modelAssetPath?: ... | ...; outputCategoryMask?: ... | ... | ...; wasmFilesUrl?: ... | ...; } = ...
world.segmentation.backendConfig.mediapipe.modelAssetPath?
... | ... = ...
world.segmentation.backendConfig.mediapipe.outputCategoryMask?
... | ... | ... = true
Output the per-pixel category mask. Required to produce a SegmentationMask.
world.segmentation.backendConfig.mediapipe.wasmFilesUrl?
... | ... = 'https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm'
world.segmentation.enable?
() => SegmentationOptions
world.segmentation.enabled?
boolean = false
world.segmentation.pollingIntervalMs?
number = 66
Minimum delay in milliseconds between continuous segmentation runs. A value of 0 runs again as soon as the previous inference finishes. Defaults to 66 (~15 fps), the rate the magic_window grab loop used before segmentation moved onto its own polling loop.
world.sounds?
{ backendConfig?: { activeBackend?: string; mediapipe?: { chunkSamples?: ... | ...; modelAssetPath?: ... | ...; wasmFilesUrl?: ... | ...; }; }; enable?: () => SoundsOptions; enabled?: boolean; showDebugInfo?: boolean; } = ...
world.sounds.backendConfig?
{ activeBackend?: string; mediapipe?: { chunkSamples?: ... | ...; modelAssetPath?: ... | ...; wasmFilesUrl?: ... | ...; }; } = ...
world.sounds.backendConfig.activeBackend?
string = 'mediapipe'
world.sounds.backendConfig.mediapipe?
{ chunkSamples?: ... | ...; modelAssetPath?: ... | ...; wasmFilesUrl?: ... | ...; } = ...
world.sounds.backendConfig.mediapipe.chunkSamples?
... | ... = 16000
world.sounds.backendConfig.mediapipe.modelAssetPath?
... | ... = 'https://tfhub.dev/google/lite-model/yamnet/classification/tflite/1?lite-format=tflite'
world.sounds.backendConfig.mediapipe.wasmFilesUrl?
... | ... = 'https://cdn.jsdelivr.net/npm/@mediapipe/tasks-audio@0.10.35/wasm'
world.sounds.enable?
() => SoundsOptions
world.sounds.enabled?
boolean = false
world.sounds.showDebugInfo?
boolean = false
xrButton?
{ alwaysAutostartSimulator?: boolean; appDescription?: string; appTitle?: string; enabled?: boolean; endText?: string; invalidText?: string; showEnterSimulatorButton?: boolean; startSimulatorText?: string; startText?: string; } = ...
Configuration for the XR session button.
xrButton.alwaysAutostartSimulator?
boolean = false
xrButton.appDescription?
string = ''
xrButton.appTitle?
string = ''
xrButton.enabled?
boolean = true
xrButton.endText?
string = 'Exit XR'
xrButton.invalidText?
string = 'XR Not Supported'
xrButton.showEnterSimulatorButton?
boolean = false
xrButton.startSimulatorText?
string = 'Enter Simulator'
xrButton.startText?
string = 'Enter XR'
xrSessionMode?
XRSessionMode = 'immersive-ar'
Returns
Options
Properties
ai
ai:
AIOptions
Defined in: src/core/Options.ts:149
antialias
antialias:
boolean=true
Defined in: src/core/Options.ts:104
Whether to use antialiasing.
camera
camera:
object
Defined in: src/core/Options.ts:155
far
far:
number=500
near
near:
number=0.01
canvas?
optionalcanvas:HTMLCanvasElement
Defined in: src/core/Options.ts:122
Canvas element to use for rendering. If not defined, a new element will be added to document body.
catchScriptExceptions
catchScriptExceptions:
boolean=true
Defined in: src/core/Options.ts:172
Whether to catch all exceptions thrown by developer scripts in the main update loop and physics step, and log them using console.error instead of crashing the application. When enabled, exceptions in one script will not prevent other scripts or subsystems from updating.
context
context:
ContextOptions
Defined in: src/core/Options.ts:152
controllers
controllers:
InputOptions
Defined in: src/core/Options.ts:138
debugging
debugging:
boolean=false
Defined in: src/core/Options.ts:113
Global flag for enabling various debugging features.
depth
depth:
DepthOptions
Defined in: src/core/Options.ts:139
deviceCamera
deviceCamera:
DeviceCameraOptions
Defined in: src/core/Options.ts:141
enableSimulator
enableSimulator:
boolean=true
Defined in: src/core/Options.ts:165
gestures
gestures:
GestureRecognitionOptions
Defined in: src/core/Options.ts:143
hands
hands:
HandsOptions
Defined in: src/core/Options.ts:142
headGestures
headGestures:
HeadGestureRecognitionOptions
Defined in: src/core/Options.ts:144
interaction
interaction:
InteractionOptions
Defined in: src/core/Options.ts:147
lighting
lighting:
LightingOptions
Defined in: src/core/Options.ts:140
logarithmicDepthBuffer
logarithmicDepthBuffer:
boolean=false
Defined in: src/core/Options.ts:109
Whether to use a logarithmic depth buffer. Useful for depth-aware occlusions.
permissions
permissions:
object
Defined in: src/core/Options.ts:193
Which permissions to request before entering the XR session.
camera
camera:
boolean=false
geolocation
geolocation:
boolean=false
microphone
microphone:
boolean=false
physics
physics:
PhysicsOptions
Defined in: src/core/Options.ts:153
referenceSpaceType
referenceSpaceType:
XRReferenceSpaceType='local-floor'
Defined in: src/core/Options.ts:136
reticles
reticles:
ReticleOptions
Defined in: src/core/Options.ts:146
simulator
simulator:
SimulatorOptions
Defined in: src/core/Options.ts:150
sound
sound:
SoundOptions
Defined in: src/core/Options.ts:148
stencil
stencil:
boolean=false
Defined in: src/core/Options.ts:117
Whether to request a stencil buffer.
strokes
strokes:
StrokeRecognitionOptions
Defined in: src/core/Options.ts:145
transition
transition:
XRTransitionOptions
Defined in: src/core/Options.ts:154
usePostprocessing
usePostprocessing:
boolean=false
Defined in: src/core/Options.ts:163
Whether to use post-processing effects.
webxrOptionalFeatures
webxrOptionalFeatures:
string[]
Defined in: src/core/Options.ts:132
Any additional optional features when initializing webxr.
webxrRequiredFeatures
webxrRequiredFeatures:
string[] =[]
Defined in: src/core/Options.ts:127
Any additional required features when initializing webxr.
world
world:
WorldOptions
Defined in: src/core/Options.ts:151
xrButton
xrButton:
object
Defined in: src/core/Options.ts:177
Configuration for the XR session button.
alwaysAutostartSimulator
alwaysAutostartSimulator:
boolean=false
appDescription
appDescription:
string=''
appTitle
appTitle:
string=''
enabled
enabled:
boolean=true
endText
endText:
string='Exit XR'
invalidText
invalidText:
string='XR Not Supported'
showEnterSimulatorButton
showEnterSimulatorButton:
boolean=false
startSimulatorText
startSimulatorText:
string='Enter Simulator'
startText
startText:
string='Enter XR'
xrSessionMode
xrSessionMode:
XRSessionMode='immersive-ar'
Defined in: src/core/Options.ts:199
Accessors
formFactor
Get Signature
get formFactor():
"auto"|"xr"|"hud"|"vr"|"desktop"|"mobile"
Defined in: src/core/Options.ts:203
Returns
"auto" | "xr" | "hud" | "vr" | "desktop" | "mobile"
Set Signature
set formFactor(
formFactor):void
Defined in: src/core/Options.ts:212
Form factor is a preset that configures the experience for a specific device type. Currently it only controls whether the simulator is enabled and should always be autostarted.
Parameters
formFactor
"auto" | "xr" | "hud" | "vr" | "desktop" | "mobile"
Returns
void
Methods
enableAI()
enableAI():
Options
Defined in: src/core/Options.ts:437
Enables a standard set of AI features, including Gemini Live.
Returns
Options
The instance for chaining.
enableAutomationMode()
enableAutomationMode(
config):Options
Defined in: src/core/Options.ts:261
Enables a standard simulator-driven setup for automation and external test harnesses.
Parameters
config
Returns
Options
The instance for chaining.
enableCamera()
enableCamera(
facingMode):Options
Defined in: src/core/Options.ts:376
Enables device camera (passthrough) with a specific facing mode.
Parameters
facingMode
The desired camera facing mode, either 'environment' or 'user'.
"environment" | "user"
Returns
Options
The instance for chaining.
enableContext()
enableContext():
Options
Defined in: src/core/Options.ts:448
Enables agent-facing context detectors such as semantic trees, view visibility, and Set-of-Mark observations.
Returns
Options
The instance for chaining.
enableControllers()
enableControllers():
Options
Defined in: src/core/Options.ts:495
Enables input from hands and controllers. Note that this is enabled by default and can also be changed at runtime with xb.core.input.enableControllers() and xb.core.input.disableControllers().
Returns
Options
The instance for chaining.
enableDepth()
enableDepth():
Options
Defined in: src/core/Options.ts:307
Enables depth sensing in WebXR with default options.
Returns
Options
The instance for chaining.
enableFaceDetection()
enableFaceDetection():
Options
Defined in: src/core/Options.ts:349
Enables face landmark detection. Provides 478 per-face landmarks in world space, optional 52 ARKit-style blendshape weights, and an optional rigid 4x4 facial transformation matrix per detected face.
Returns
Options
The instance for chaining.
enableGestures()
enableGestures():
Options
Defined in: src/core/Options.ts:399
Enables the gesture recognition block and ensures hands are available.
Returns
Options
The instance for chaining.
enableHandRays()
enableHandRays():
Options
Defined in: src/core/Options.ts:428
Enables the visualization of rays for hand tracking.
Returns
Options
The instance for chaining.
enableHands()
enableHands():
Options
Defined in: src/core/Options.ts:390
Enables hand tracking.
Returns
Options
The instance for chaining.
enableHeadGestures()
enableHeadGestures():
Options
Defined in: src/core/Options.ts:409
Enables completed nod and shake recognition from the user's head pose.
Returns
Options
The instance for chaining.
enableHumanDetection()
enableHumanDetection():
Options
Defined in: src/core/Options.ts:335
Enables human pose detection.
Returns
Options
The instance for chaining.
enableObjectDetection()
enableObjectDetection():
Options
Defined in: src/core/Options.ts:325
Enables object detection.
Returns
Options
The instance for chaining.
enablePlaneDetection()
enablePlaneDetection():
Options
Defined in: src/core/Options.ts:316
Enables plane detection.
Returns
Options
The instance for chaining.
enableReticles()
enableReticles():
Options
Defined in: src/core/Options.ts:298
Enables reticles for visualizing targets of hand rays in WebXR.
Returns
Options
The instance for chaining.
enableSceneContext()
enableSceneContext():
Options
Defined in: src/core/Options.ts:457
Enables agent-facing scene context.
Returns
Options
The instance for chaining.
enableSegmentation()
enableSegmentation():
Options
Defined in: src/core/Options.ts:363
Enables semantic segmentation. Produces per-pixel person / background category masks from the device camera (MediaPipe, on-device). Unlike face and human detection it does not require depth.
Returns
Options
The instance for chaining.
enableSetOfMarkContext()
enableSetOfMarkContext():
Options
Defined in: src/core/Options.ts:475
Enables agent-facing Set-of-Mark context.
Returns
Options
The instance for chaining.
enableStrokes()
enableStrokes():
Options
Defined in: src/core/Options.ts:418
Enables the stroke recognition block and ensures gestures are available.
Returns
Options
The instance for chaining.
enableVisibleObjectsContext()
enableVisibleObjectsContext():
Options
Defined in: src/core/Options.ts:466
Enables agent-facing visible objects context.
Returns
Options
The instance for chaining.
enableVR()
enableVR():
Options
Defined in: src/core/Options.ts:251
Sets the session mode to VR and disables the simulator passthrough scene.
Returns
Options
enableXRTransitions()
enableXRTransitions():
Options
Defined in: src/core/Options.ts:484
Enables the XR transition component for toggling VR.
Returns
Options
The instance for chaining.
parseUrlParams()
protectedparseUrlParams():void
Defined in: src/core/Options.ts:234
Returns
void
setAppDescription()
setAppDescription(
description):Options
Defined in: src/core/Options.ts:515
Sets the description of the app to be displayed above the XR button.
Parameters
description
string
The description of the app.
Returns
Options
The instance for chaining.
setAppTitle()
setAppTitle(
title):Options
Defined in: src/core/Options.ts:505
Sets the title of the app to be displayed above the XR button.
Parameters
title
string
The title of the app.
Returns
Options
The instance for chaining.