No-Calibration Opt-In

By default, a tracking game cannot receive pose frames until the host's get-ready/calibration ceremony has installed a coordinate transform — the pose-stream start is the calibration flow. coordinate.calibration: "none" is a per-game, additive, default-off opt-out: the host seeds a default coordinate transform at session entry and streams tracking.frame immediately, with no get-ready screen and no calibration ceremony.

// bodylink.game.json
        {
          "capabilities": ["iframe.bundle.v1", "sdk.proxy.v1", "tracking.frame"],
          "coordinate": {
            "mode": "full",          // default — camera-fov-v1, landmarks in [0,1]
            "framing": "full-body",  // default
            "calibration": "none"    // the opt-in: no ceremony, frames flow at entry
          }
        }
        

Absent — or any value other than "none" — the field changes nothing: today's calibrate-on-request behavior is fully preserved. No existing game is affected.


What replaces the get-ready ceremony

Nothing user-visible. At session entry the host synthesizes a default transform for your declared coordinate.mode / coordinate.framingFull-FOV camera-center + Full-Body unless you declare otherwise — and seeds it through the same internal path an embedder-supplied transform uses. That seed is what opens the frame gate, so pose frames flow from the first moment of run.

The seed is host-synthesized from the host's own framing constants — your game supplies no geometry. Under the default mode: "full" your landmarks are camera-FOV screen fractions in [0, 1], exactly what an uncalibrated full-frame game expects. A mode: "roi" opt-in seeds a full-frame region of interest as the starting ROI transform.

Two things do not change:

  • Camera consent and the active-tracking indicator stay host-owned. The ceremony was never a consent surface; opting out of it removes no consent step. The host still signals that camera tracking is active.
  • The opt-in only sets the default. Your game keeps the full runtime surface: call game.ensureRuntimeReady() (or game.requestGetReady()) to run the real ceremony / precise ROI calibration on demand at any moment, or game.tracking.setCoordinateMode('roi' | 'full', { framing }) to rebind the space. Both supersede the manifest declaration.

When it fits

  • Instant-on games. Titles where any setup screen kills the loop — party games, ambient/mirror experiences, "walk up and play" installations.
  • Games with their own onboarding. If your title flow already teaches the player where to stand, a second host ceremony is redundant. Combine with launcher.launchLifecycle.getReady: "deferred-to-game" and calibrate at the moment of your choosing — or never.
  • Coarse-coordinate games. Anything that reads landmarks as screen fractions (camera-fov-v1) and does not need a body-centered space at entry.
  • Seated / upper-body play. Pair with framing: "upper-body" so readiness never waits on hip/leg visibility.

Trade-offs

  • No player-fitted ROI until you calibrate. The seeded transform is the camera default, not a measurement of the player. If your gameplay needs a precisely body-fitted roi-centered-v2 space, run game.ensureRuntimeReady() at the point where precision starts to matter (round start, difficulty ramp) — the opt-in does not lock you out.
  • You own the "is the player visible?" moment. Without the ceremony the host never confirms a body is in frame before gameplay. Watch game.onTrackingReady(...) / landmark visibility and design your first seconds to tolerate an empty frame.
  • Rollback is trivial. Drop the field from your manifest and the next submitted version reverts to the standard ceremony path — no other change required.

See Camera Preview & Coordinates for the coordinate.mode / coordinate.framing vocabulary this opt-in reuses.