Loading reconstruction…
"""
Registered Images
=================
A world-anchored scene extended across sessions. Each session's full
``SceneCapture`` (keyframes with pose, depth, exposure, and a best-effort GPS
fix) lands as a dated backup, and its refreshed ``ARWorldMap`` carries forward
into the shared slot so any later session relocalizes into the same coordinate
frame and keeps extending the scene. As each session's frames land, a subscriber
bakes them into a depth-baked Gaussian splat and a self-contained viewer page.
"""
import capturegraph as cg
from server import authoring as cgserver
class SceneSession(cg.Struct):
user_id: cg.UserID
location: cg.Location
capture: cg.SceneCapture
class RegisteredImages(cg.Struct):
world_map: cg.ARWorldMap
sessions: cg.Map[cg.Date, SceneSession]
_metadata: cg.Metadata
@cgserver.target
@cg.procedure(RegisteredImages)
def registered_images(root):
session = root.sessions[cg.CaptureTime()]
# Falls back to a brand-new scene only when the slot is ACTUALLY empty —
# a map still downloading keeps the capture waiting instead of forking it.
initial_world_map = root.world_map.load_or(cg.ARKitCreateScene())
capture = cg.ARKitCaptureScene(
initial_world_map=initial_world_map,
label="Capture the scene",
max_speed_mps=1.0,
max_rotation_dps=20.0,
)
session.user_id &= cg.GetUserID()
session.location &= cg.CaptureLocation()
session.capture &= capture
root.world_map &= capture.world_map