Skip to Content

πŸ₯½ Spatial Scan

Digitize your reality. Walk through a room with your phone and turn it into a private, structured, explorable 4D map β€” geometry, detected objects, and the camera’s path through time β€” stored securely on your local node.

Overview

Spatial Scan is a browser-based AR room scanner and desktop world editor. On the phone it uses 8th WallΒ  SLAM (with a native WebXR fallback) to track the space and accumulate a live colourised point cloud; an on-device vision-language model labels the objects it sees. On the desktop it composes one or more scans into a single geo-anchored world you can inspect, label, reconstruct into Gaussian splats, and share.

Everything runs on your Hub (or a connected edge device) β€” scans never leave your local network. Results integrate with Companion Memory, making your physical spaces searchable, navigable, and usable as context for your Companion Agents, and can be explored over time in the Spatial Time Machine.

Spatial Scan is a web app β€” no install on the phone. Open the HTTPS link on any modern iOS/Android device to scan, or open the desktop editor to compose and edit. It is the product face of the open engineering repo companionintelligence/CI-Web-XR-Scan.

What a β€œ4D map” is

A scan is not a flat mesh. Each world lives in a metric, geo-anchored frame (East / Up / North, in meters) and holds one or more scans, each separated into typed layers β€” point cloud, floor, detections, labels, camera path, camera frustums, RGB frames, depth, and Gaussian splat. The fourth dimension is time: every frame is timestamped and posed, and edits are an append-only history, so a single world can hold multiple scans of the same place captured at different moments and replay the camera’s trajectory through it.

Key Features

  • Web AR scanning β€” 8th Wall SLAM tracks the room and builds a live point cloud; a native WebXR fallback runs on headsets and WebXR-capable browsers
  • On-device object detection β€” an engine-agnostic vision-language layer labels objects as you scan; the default runs a local Ollama model (moondream), with a bundled ONNX model and a WebGPU in-browser path as alternates β€” detection can run entirely on-device with zero data exfiltration
  • Live 3D object pins β€” detections are placed at their real world positions as labelled 3D pins that track the scene
  • Walkthrough-video capture β€” no AR? Upload a phone video and Spatial Scan extracts posed keyframes into a scan
  • Gaussian Splatting β€” train photorealistic 3D Gaussian splats from a scan’s keyframes (Brush, GPU-accelerated) and detect objects in the splat
  • Dense reconstruction β€” densify streamed keyframes into a fused point cloud and camera poses (LingBot-Map)
  • Desktop world editor β€” place many scans in one ENU world with layer toggles, semantic tagging, a metric measure tool, a geomap, transform gizmos, and progressive level-of-detail loading
  • Companion Memory integration β€” scans are tagged with location, date, and semantic labels for recall
  • Change over time β€” keep multiple scans of the same space and compare them
  • Share by role β€” hand someone an owner / editor / viewer / scanner link
  • Export β€” download models as .glb, .ply, or .splat
  • Privacy β€” scans never leave your local network; the WebGPU detector never uploads a frame at all
  • PWA + offline β€” installable on iOS/Android with an offline upload queue

The scanning experience

On your phone β€” capture a room

Open the link, tap through a three-step primer, grant camera + motion, and start sweeping the room. A live coverage meter tells you when you have enough.

Spatial Scan start screen on mobile

Live scanning HUD with tracking, coverage meter, and action rail

Tap the capture button to identify objects β€” each detection appears as a card with a thumbnail, label, and confidence, and as a 3D pin in the scene. When you’re done, export or just let autosave sync it.

Review and Export panel with detected objects

On the desktop β€” structure the 4D map

Open the world editor to see your scans placed in the shared ENU frame with detection labels, a compass, a scale bar, and a live coordinate readout. Toggle layers, tag objects, measure real distances, and re-arrange scans.

Desktop world editor overview

Queue reconstruction and detection jobs, then share the finished world with a role-scoped link.

World tab with stats, share links, and the processing queue

Train a photorealistic Gaussian splat from the scan and detect objects within it, right from the Splat Toolbox.

Splat Toolbox β€” train, detect, and download splats

How it works

Capture (phone)

8th Wall SLAM (or WebXR) provides camera pose, intrinsics, and world feature points at frame rate. The app accumulates a voxel-deduplicated point cloud and, on each capture, encodes a JPEG for detection.

Detect (engine-agnostic)

The frame is sent to the detection layer. The engine is chosen by configuration: a local Ollama model (default, moondream), a bundled ONNX model, a deterministic mock engine for CI, or an in-browser WebGPU path. Detected bounding boxes are raycast against the point cloud to resolve real 3D positions.

Structure (desktop)

Scans upload to your Hub and appear in the world editor, placed into the metric ENU frame β€” auto-positioned by GPS when available, otherwise arranged for manual alignment. Geometry, semantics, and provenance stay as separate, addressable layers.

Reconstruct (jobs)

Asynchronous jobs enrich a scan: Gaussian-splat training (Brush), dense reconstruction (LingBot-Map), open-vocabulary detection over the splat, semantic passes, and world export β€” each attaching artifacts back to the scan.

Share

Generate an owner / editor / viewer / scanner link; recipients open the world at their granted role.

Reconstruction Methods

MethodWhat it producesHardwareStatus
Live SLAM point cloudColourised point cloud + object pinsPhone (no GPU)Shipped
VLM object detectionLabelled 3D detectionsOn-device (Ollama / ONNX / WebGPU)Shipped
Gaussian Splatting (Brush)Photorealistic .splat / .plyGPU (8GB+ VRAM)Shipped
Dense reconstruction (LingBot-Map)Fused point cloud + camera posesGPUShipped
Video-ingest (photogrammetry-style)Posed keyframe scan from a walkthrough videoCPUShipped
Depth + LiDAR fusion / NeRFHigher-accuracy meshesLiDAR / GPURoadmap

Setup

Install from Hub

Search for Spatial Scan in the Hub app store and install. A GPU on the Hub is required for Gaussian Splatting and dense reconstruction; object detection and basic scanning run without one.

Open the scanner on your phone

Open the Spatial Scan link on your phone over HTTPS (camera and motion APIs require a secure origin). Grant camera and motion access when prompted.

Capture footage

For best results:

  • Move slowly and steadily; let the coverage meter reach β€œGood” before finishing
  • Keep even lighting (avoid direct sunlight and harsh shadows)
  • Sweep surfaces from multiple heights and angles
  • No AR device? Upload a 45–90 second walkthrough video instead

Reconstruct and share

Open the desktop editor, queue a Gaussian-splat or dense-reconstruction job for your scan, then share the finished world with a role-scoped link.

Usage

Viewing a completed scan

Open the world editor and orbit / pan / zoom the scene. Switch render modes (solid, points, wireframe, semantic), toggle layers, and click an object to inspect its label, confidence, dimensions, and room/floor.

Measuring

Click Measure, then click two points β€” because the world is metric ENU, the readout is in real meters.

Tagging and editing

Select a scan or object in the Edit tab to move / rotate / scale it, assign a semantic tag, or add notes. Every edit is saved as an append-only patch.

Browsing in the timeline

Scans appear in the Companion Memory timeline under the Spatial source, tagged with location and date, and can be explored over time in the Spatial Time Machine.

Exporting

Export a scan or world as .glb (web / general 3D), .ply (point-cloud tools), or .splat (Gaussian-splat viewers).

Troubleshooting

Tracking never starts / β€œMove camera to initialise tracking…” forever Camera or motion permission was denied. Re-enable it in your browser/OS settings (iOS: Settings β†’ Safari β†’ Motion & Orientation Access, and camera access for the site) and reload over the HTTPS link.

β€œHTTPS required” on the start screen Camera and AR APIs only work on a secure origin. Open the Spatial Scan HTTPS link (not a plain-HTTP address).

Splat training or dense reconstruction fails immediately These jobs need streamed keyframes and a GPU worker. Start keyframe streaming (the ☁️ button) while scanning, and confirm the Hub has a GPU and the reconstruction workers configured.

Reconstructed model has holes Insufficient coverage. Capture additional angles of the problem areas and re-scan; the world composes multiple scans of the same space.

Scan not appearing in Companion Memory Ensure the Companion Memory connector is enabled in Settings β†’ Integrations and check the connector log for API errors.

For developers

Spatial Scan is built on the open engineering repo companionintelligence/CI-Web-XR-Scan.

Last updated on