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.framing —
Full-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()(orgame.requestGetReady()) to run the real ceremony / precise ROI calibration on demand at any moment, orgame.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-v2space, rungame.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.