Omit features you do not use. Reload the project and extension after changing this startup-fixed object.
Offer QR blocks
prepare offer QR for peer [PEER]
Creates a named WebRTC offer and prepares one or more QR courier parts.
show offer QR part [INDEX] on this sprite
Displays a one-based part as a temporary, lossless SVG sprite skin.
end offer QR display
Restores original skins and discards sensitive temporary session data.
The extension exposes blocks across eight independently enabled feature groups. See the generated block reference for every opcode, argument, type, and default.
Enablement and safety
The startup-fixed qrCourierPairing flag is OFF by default. The extension requires the version 2 TurboWarp WebRTC runtime capability and must run unsandboxed.
Pairing QR codes can expose local addressing and ICE credentials. Display them only inside a trusted venue and remove courier photographs after pairing.
WebGPU MoveNet MultiPose
The independent webgpuMoveNetMultiPose flag is OFF by default. When enabled, the extension leases frames from TurboWarp Camera Source, explicitly requires the TensorFlow.js webgpu backend, and returns up to six tracked COCO-17 poses as PoseFrame2D version 1 JSON.
No CPU, WASM, or WebGL inference fallback is provided. The first model load generally requires network access; prepare the browser cache before an offline venue run.
Application contract codec
The independent protocolV1Codec flag is OFF by default. When enabled, blocks validate and round-trip SessionPolicy, CameraCalibration, PoseFrame2D (v1 and v2), PoseFrame3D, and Performance DSL JSON. This extension owns those contracts and publishes their generated JSON Schemas; applications depend on the extension, never the reverse.
Unknown schemas, versions, fields, malformed COCO-17 tuples, and pairing credential keys fail closed. Diagnostic reporters expose the JSON Pointer path and message.
Pose timestamps are opaque values supplied by a separate synchronized local time service. This extension carries them unchanged and implements no clock probes, offset estimation, ping, or pong logic.
Camera calibration
The independent cameraCalibrationV1 flag is OFF by default. A high-level state machine leases the named Camera Source stream, fixes its real resolution, accepts diverse chessboard samples, and exports an exact CameraCalibration v1 profile.
The bundled, exact-pinned OpenCV.js 4.12 WebAssembly backend is the sole solver. It estimates intrinsic, distortion, and world-from-camera values and rejects insufficient samples, resolution changes, weak views, excessive reprojection RMS, unknown profile versions, and pairing credentials.
PoseFrame3D avatar retargeting
The independent avatarRetargetV1 flag is OFF by default. The adapter requires TurboWarp-A-Frame 0.5.0 scene capability v2, refuses any other version, and uses only its public template, transform, event, count, delete, and VRM operations.
Corresponding external PoseFrame3D and PoseFrame2D v1 values can drive up to six VRM avatars. The adapter matches person IDs, expands COCO-17 to BlazePose-33, and uses exact-pinned Kalidokit 1.1.5 as its only rotation solver before turning the VRM humanoid bones on the performer's own side. A block sets VRM expressions on the avatar bound to a person, so the application can show Performance DSL effects on it.
The deterministic expansion uses reduced-visibility duplicates for unavailable hand, foot, and face landmarks and is less precise than native BlazePose input. Kalidokit is deprecated upstream, so retargeting requires validation with real recordings. This extension provides no custom solver fallback and does not align frames, query history, triangulate, or solve 3D data.
Multi-camera 3D pose fusion
The independent poseFusion3D flag is OFF by default. When enabled, blocks buffer PoseFrame2D JSON per camera in timestamp-ordered ring buffers, resample every camera at one past instant behind a configured delay, and triangulate the synchronized 2D sets into PoseFrame3D version 1 JSON.
Out-of-order frames inside the jitter window are reordered, while duplicates, late arrivals, and frames that no loaded calibration profile describes are counted as dropped. Occluded keypoints are filled from the visible side of their bracket, disagreeing views are resolved by the largest consensus set, and a keypoint without two confident views holds its last triangulated position with score zero.
Glow stick markers
The independent glowStickMarkers flag is OFF by default. When enabled, the camera app samples the keypoints you name for a uniquely colored glow stick on the same video frame as the pose and reports PoseFrame2D version 2.
The fusion app maps those colors to performers with the Performance DSL palette. An identified person keeps the performer's identifier across occlusion and re-entry, views of different performers never merge, and a color seen on the mirrored keypoint tells the fusion that the camera read a back view as a front view, so that view's left and right labels are swapped before triangulation.
Development
The public API is the TurboWarp extension and its generated manifest. Source-level controllers are internal and are not npm exports. See the repository README and architecture documentation for build, test, release, and compatibility details.
All 103 blocks are documented below, including compatibility blocks and blocks available through optional features. Select a block to read its behavior, arguments, default values, and menu choices. Each block has a permanent link.
prepare offer QR for peer [PEER]
Creates a WebRTC offer and prepares one or more QR courier parts.
Block type: COMMAND. Opcode: prepareOfferQr. Permanent link
Argument
Type
Default value
Menu choices
PEER
STRING
camera-1
show offer QR part [INDEX] on this sprite
Shows the selected one-based offer QR part using a temporary sprite skin.
Block type: COMMAND. Opcode: showOfferQrPart. Permanent link
Returns the latest protocol-v1 COCO-17 pose frame as JSON, or an empty string before inference.
Block type: REPORTER. Opcode: latestPoseFrame2D. Permanent link
This block has no arguments.
start pose estimation on camera [CAMERA_ID] peer [PEER_ID] calibration [CALIBRATION_ID]
Starts a separate MoveNet MultiPose pipeline for one named Camera Source camera, beside any others. Each camera has its own detector so tracking IDs never cross views; all of them run on the same WebGPU device.
Block type: COMMAND. Opcode: startPoseCamera. Permanent link
Argument
Type
Default value
Menu choices
CAMERA_ID
STRING
cam-1
PEER_ID
STRING
local
CALIBRATION_ID
STRING
uncalibrated
infer pose on camera [CAMERA_ID] at its frame time
Infers the frame the camera is showing and stamps it with that frame's capture time from requestVideoFrameCallback (captureTime, or presentationTime where the browser has none), in microseconds since the Unix epoch on the page clock. A frame already inferred is skipped.
Block type: COMMAND. Opcode: inferPoseCameraAtFrameTime. Permanent link
Argument
Type
Default value
Menu choices
CAMERA_ID
STRING
cam-1
stop pose estimation on camera [CAMERA_ID]
Stops one camera's pipeline and releases its detector and camera lease.
Block type: COMMAND. Opcode: stopPoseCamera. Permanent link
Argument
Type
Default value
Menu choices
CAMERA_ID
STRING
cam-1
stop pose estimation on all cameras
Stops every per-camera pipeline.
Block type: COMMAND. Opcode: stopAllPoseCameras. Permanent link
This block has no arguments.
latest PoseFrame2D JSON of camera [CAMERA_ID]
Returns the camera's latest COCO-17 pose frame as JSON, or an empty string before its first inference.
Block type: REPORTER. Opcode: poseCameraFrame2D. Permanent link
Argument
Type
Default value
Menu choices
CAMERA_ID
STRING
cam-1
pose status JSON of camera [CAMERA_ID]
Returns the camera pipeline's state, error, inference and skipped-frame counts, last inference duration in milliseconds, frame time source (capture or presentation), latest capture timestamp and person count as JSON, or an empty string when it is not started.
Block type: REPORTER. Opcode: poseCameraStatusJson. Permanent link
Argument
Type
Default value
Menu choices
CAMERA_ID
STRING
cam-1
protocol JSON [JSON] valid?
Validates and dispatches one of the five pinned multiview-pose v1 contracts without retaining it.
Block type: BOOLEAN. Opcode: protocolJsonValid. Permanent link
Argument
Type
Default value
Menu choices
JSON
STRING
{}
decode protocol JSON [JSON]
Parses, validates, and retains a supported v1 protocol value for later reporters.
Block type: COMMAND. Opcode: decodeProtocolJson. Permanent link
Argument
Type
Default value
Menu choices
JSON
STRING
{}
encode protocol JSON [JSON]
Validates a supported v1 value and returns its compact JSON encoding.
Block type: REPORTER. Opcode: encodeProtocolJson. Permanent link
Argument
Type
Default value
Menu choices
JSON
STRING
{}
decoded protocol JSON
Returns the last successfully decoded or encoded protocol value.
Block type: REPORTER. Opcode: decodedProtocolJson. Permanent link
This block has no arguments.
protocol schema
Returns the schema identifier dispatched by the latest validation attempt.
Block type: REPORTER. Opcode: protocolSchema. Permanent link
This block has no arguments.
protocol version
Returns the numeric version dispatched by the latest validation attempt, or zero when unavailable.
Block type: REPORTER. Opcode: protocolVersion. Permanent link
This block has no arguments.
protocol error path
Returns the JSON Pointer path for the latest parse or validation error.
Block type: REPORTER. Opcode: protocolErrorPath. Permanent link
This block has no arguments.
protocol error message
Returns the detailed message for the latest parse or validation error.
Block type: REPORTER. Opcode: protocolErrorMessage. Permanent link
This block has no arguments.
start camera calibration camera [CAMERA_ID] profile [CALIBRATION_ID] board [COLUMNS] by [ROWS] square [SQUARE_METERS] m max error [MAX_ERROR_PX] px
Leases a named Camera Source video and fixes its real resolution for a chessboard calibration session.
Block type: COMMAND. Opcode: startCameraCalibration. Permanent link
Returns the VRM expression names of the avatar bound to a person as a JSON array, or an empty array while it loads.
Block type: REPORTER. Opcode: avatarExpressionNames. Permanent link
Argument
Type
Default value
Menu choices
PERSON_ID
STRING
performer-1
reset avatar retarget state
Removes retarget-created instances and clears assets, bindings, effects, and diagnostics after a scene reset.
Block type: COMMAND. Opcode: resetAvatarRetarget. Permanent link
This block has no arguments.
avatar binding count
Returns the current person-to-avatar binding count, at most six.
Block type: REPORTER. Opcode: avatarBindingCount. Permanent link
This block has no arguments.
avatars updated by last frame
Returns how many bound avatars accepted the last PoseFrame3D.
Block type: REPORTER. Opcode: avatarUpdatedCount. Permanent link
This block has no arguments.
avatar retarget state
Returns disabled, idle, configured, bound, ready, partial, or error.
Block type: REPORTER. Opcode: avatarRetargetState. Permanent link
This block has no arguments.
avatar retarget error
Returns per-person errors from the latest frame while other avatars continue updating.
Block type: REPORTER. Opcode: avatarRetargetError. Permanent link
This block has no arguments.
show frame sync pattern
Covers the screen with the time coded pattern that cameras decode through the projector.
Block type: COMMAND. Opcode: showFrameSyncPattern. Permanent link
This block has no arguments.
hide frame sync pattern
Removes the frame sync pattern overlay.
Block type: COMMAND. Opcode: hideFrameSyncPattern. Permanent link
This block has no arguments.
frame sync pattern shown?
Reports whether the frame sync pattern overlay is on screen.
Block type: BOOLEAN. Opcode: frameSyncPatternShown. Permanent link
This block has no arguments.
frame sync pattern wrap us
Returns the period after which the encoded display time repeats, in microseconds.
Block type: REPORTER. Opcode: frameSyncPatternWrapUs. Permanent link
This block has no arguments.
start frame sync decoder for camera [CAMERA_ID] calibrating for [SECONDS] seconds
Leases the camera, locates the projected pattern, learns its light and dark levels, and reports failure when readings do not decode often enough. The window must be at least 6.2 seconds so that every pattern cell changes at least once.
Block type: COMMAND. Opcode: startFrameSyncDecoder. Permanent link
calibrate frame sync decoder for [SECONDS] seconds
Runs calibration again on the running decoder, for example after the camera or the projector moved. The window must be at least 6.2 seconds so that every pattern cell changes at least once.
Block type: COMMAND. Opcode: calibrateFrameSyncDecoder. Permanent link
Block type: COMMAND. Opcode: stopFrameSyncDecoder. Permanent link
This block has no arguments.
frame sync decoder state
Returns idle, acquiring-camera, calibrating, ready, or error.
Block type: REPORTER. Opcode: frameSyncDecoderState. Permanent link
This block has no arguments.
frame sync decoder error
Returns the last decoder error code, or an empty string when there is none.
Block type: REPORTER. Opcode: frameSyncDecoderError. Permanent link
This block has no arguments.
frame sync decode rate
Returns the share of recent camera frames the decoder could read, between 0 and 1.
Block type: REPORTER. Opcode: frameSyncDecodeRate. Permanent link
This block has no arguments.
frame sync observation available?
Reports whether a decoded frame is waiting to be taken.
Block type: BOOLEAN. Opcode: frameSyncObservationAvailable. Permanent link
This block has no arguments.
take next frame sync observation
Removes the oldest decoded frame from the queue and exposes it to the observation reporters.
Block type: COMMAND. Opcode: takeFrameSyncObservation. Permanent link
This block has no arguments.
frame sync frame timestamp us
Returns when this computer finished recording the taken frame, read from the external synchronized time service.
Block type: REPORTER. Opcode: frameSyncFrameTimestampUs. Permanent link
This block has no arguments.
frame sync frame age us
Returns how old the taken frame already was when the browser delivered it, or 0 when the browser does not report a capture time.
Block type: REPORTER. Opcode: frameSyncFrameAgeUs. Permanent link
This block has no arguments.
frame sync pattern timestamp us
Returns the display time decoded out of the taken frame, within the current pattern wrap window.
Block type: REPORTER. Opcode: frameSyncPatternTimestampUs. Permanent link
This block has no arguments.
acknowledge that the frame sync pattern flashes
Records that the operator was warned the full screen pattern flashes. Time Space Sync will not show it otherwise. The older blocks asked for nothing here because the path they drove asked for nothing; a project that delegates accepts this extra step.
Block type: COMMAND. Opcode: acknowledgeFrameSyncFlashing. Permanent link
This block has no arguments.
set frame sync display refresh to [REFRESH_US] us
Tells the decoder how long each code stays on screen. Only needed when the pattern is shown from another computer; when it is shown from this one the display has measured it. It sets the whole width of the constraint an observation carries, so assuming 60 Hz for a projector running at 50 biases every result with nothing saying so.
Block type: COMMAND. Opcode: setFrameSyncDisplayRefresh. Permanent link