⚠️ This device can’t record
Recording needs the AR camera tracking (WebXR
immersive-ar) that this browser doesn’t provide —
iOS browsers (Safari, Chrome, Firefox on iPhone/iPad) do not
support it at all. To record, open this app in
Chrome on an Android phone with AR (ARCore)
support.
You can still replay existing recordings on this device using the recordings folder below.
Purpose: Record synchronized AR + GPS data — camera frames, AR poses, GPS readings and depth. The resulting ZIPs can be used for: Gaussian splatting(they use COLMAP folder structure); evaluating GPS tracking accuracy (test if it works for your use case and locations); re-running sessions in desktop replay; and documenting a site with geo-anchored photos, point clouds and reference markers. Walk around while the app captures everything. Check the settings for more details.
Reference Points: Landmarks you mark during recording for ground-truth validation. Tap "📍 Mark Point" when standing at a known location.
Choose where to save this recording. Importing a previous recordings folder is optional — it's only needed to import reference points from previous recordings when the browser cache is no longer available.
❌ No folder selected
Scenario: A named physical area you'll revisit for multiple recordings (e.g., "Paris Eiffeltower"). Scenarios group related sessions and share reference points. Leave the default to just start recording.
Session: A single recording within a scenario, named automatically by timestamp.
Select a scenario to see sessions
Choose a save location for this recording
The floating images shown in AR are captured photogrammetry frames (not a camera zoom). This only changes how sharply they’re drawn, to save memory — the saved image quality is set by “Resolution” above.
During recording, only the newest tiles stay in the scene (oldest are removed) so long walks keep a steady framerate. Replay always shows every captured frame.
Edge length of each voxel for the depth occupancy grid (debug cubes + COLMAP export). Smaller = finer detail but much heavier. Applies the next time you enter AR or load a replay.
How many times a voxel must be observed before it counts as occupied — the same floor gates the debug cubes, the occluder mesh and the COLMAP export. Higher hides single-frame depth noise (e.g. phantom voxels below the floor) but may drop briefly-seen surfaces. 1 = unfiltered. Applies the next time you enter AR or load a replay.
Hide virtual objects behind the real surface the camera sees right now (sharp, no memory). Experimental: occlusion quality is still being tuned on device. Off by default. Tick together with the persistent mesh below to combine live + remembered occlusion.
Mesh the occupancy grid into an invisible depth-only surface so real geometry hides virtual objects placed behind it — including surfaces you already walked past. On by default (meshed off-thread, so it no longer stalls rendering). Applies the next time you enter AR or load a replay.
How the persistent occluder mesh is built. “Surface nets” is the default — the smoothest (hugs the floor, but an open sheet over thin features, so it can leak occlusion at concave wall–floor seams); “Cubes” is blocky but watertight; “Corner-fit” nudges the cube corners toward the measured surface while keeping their cube shape (gap-free/watertight). Pick an “Occluder debug style” below to see the shape. Only affects the persistent mesh occluder above; applies the next time you enter AR or load a replay.
Renders the persistent occluder mesh visibly so its shape and structure can be judged: “Depth-shaded” separates overlapping near/far layers (distance fade + silhouette rim), “Wireframe” shows the actual triangulation of the mesh style above. It still occludes in every style. Only visible when the persistent mesh occluder above is on. Off by default; applies the next time you enter AR or load a replay.
Only surfaces within this distance occlude virtual content — keeps long walks fast. Everything stays remembered: walking back rebuilds far geometry instantly. Applies the next time you enter AR or load a replay.
Off by default. When on, every decoded QR is recorded RAW (pose + size are derived on replay) and a debug axis+cube is drawn on the code. Faster interval / higher resolution improve tracking + small QR range but cost more per frame. Applies the next time you enter AR.
These only change what's drawn live, not the recording. Replay always shows captured frames.
Stats need the DOM overlay: with "DOM Overlay" disabled under AR crash isolation they can't be shown in AR.
Feed the absolute-orientation compass into the live GPS alignment. Stage 0 is ON by default (fixes initial rotation); Stage C + the trust gate are experimental (off). Applies on the next session / reload. These flags are recorded into the session (replay re-enables them), so turn Stage 0 OFF for compass calibration sets.
Record AR relocalization jumps (>1 m between frames) as loop-closure events. Each closure also corrects the live trajectory, changing the live alignment. Applies on the next session. Needed to collect loop-closure field data.
⚠️ Higher frequencies may impact performance on some devices.
Diagnostic controls for isolating pre-recording AR startup crashes.
XR Session Features
Pre-Recording Frame Loop
Workarounds
Clear the cached reference points so they are re-imported from
your *.zip recordings the next time a scenario is
opened. Any ref-point observations not yet exported to a zip will
be lost.