Skip to content
Request access

From a walkthrough video to a walkable model

Five steps, and at one of them nothing is computed yet: before a GPU starts, the material is checked to see whether it holds up. Plus where the metres come from, and what does not work today.

The five steps

What you do is in steps one and two; from three onwards the machine works, and you are asked when you need to be.

  1. Film

    Walk the room slowly and film. Use the ultra-wide lens, 0.5×, where your device has one: the same flat closed its loop at 0.5× with 1.47 px of error; at 1× it could not be solved.

    4K at 60 frames per second, exposure and focus locked, a pause in every doorway, close the loop. Large halls go in sections.

    Read the capture guide
    Diagram: a phone above a floor grid, in front of it a wide view frustum marked 0.5× and behind it, faintly, a narrow one marked 1×; the filmed walk runs across the grid as a dotted curve.
  2. Upload

    You upload in the browser. The video goes to object storage in parts, past our server, and resumes if the connection drops.

    MP4, MOV, MKV and WebM, up to 20 minutes and 4,096 px on the longest edge. A finished splat works too: PLY, SPZ, SOG, SPLAT or KSPLAT.

    Diagram: a video as a long bar divided into chunks; arrows lead from the chunks past a thinly drawn server straight into a storage cylinder, and one chunk carries a retry mark.
  3. Check

    Before a GPU starts, a pre-check on our server measures sharpness, exposure, duplicates and standstill, and looks for texture-poor passages and stretches that were only panned.

    Then there is a light, and again after the camera path — calibrated on real runs: 1.47 px and 2.69 px of loop error were green, 90.9 px red. Unmeasured is never green. On amber or red the job waits for you, with the reason; you can still start it.

    Diagram: on the left a filmstrip of six frames, one of them smeared; on the right the solved camera path as a chain of small camera frustums closing a loop; between them a traffic signal with only the amber lamp lit.
  4. Compute

    Only now does a GPU server start: camera path, frame selection, splat training, collision mesh. You see where it stands and can cancel.

    We promise no duration. One measured acceptance run — 20,000 steps, 1.4 million splats — took 2,837 seconds of pure compute, about an hour with export.

    Diagram: the same scene three times side by side, denser from left to right — first a few grey dots, then more and coloured ones, finally a dense point cloud; arrows between the three frames.
  5. Deliver

    At the end a package is ready, exactly per the delivery contract; a capture without a scale measurement does not go out. Download it, share the scene by link, or fetch it through the API with a signed webhook.

    Read the API page
    Diagram: four file cards labelled splat.ply, collision.glb, meta.json and package.zip, below them a splat with a wireframe collision mesh laid over its right half, and next to it a dimension line reading 1 m.

This is what the check looks like

  • Screenshot of the app: the upload page (the application is in German) with the drop area for the video, the five steps of a run beside it and the list of accepted formats.
    Upload — and you see what may go in before it does.
  • Screenshot of the app: the grid of frames selected from the video, above it the timeline with the sharpness and motion curves, beside it the list of findings.
    Check the frames — sharpness, motion and findings per stretch of time.
  • Screenshot of the app: on the left the solved camera path as a line through the room, on the right the checklist with loop error, coverage, lens and scale.
    Check the camera path — training only runs after this.

The interface is the real one, taken on a capture we set up for the purpose with drawn frames. No customer scene; the values are not a promise about yours.

What you get back

Not a link to a platform but files that fit into your own software. Each carries its scale inside it: one unit is one metre, and the floor is down.

  • splat.plyThe walkable splatFor common Gaussian splatting viewers, SuperSplat, and through plugins Unreal and Unity.
  • collision.glbThe collision meshIn the same frame as the splat — so you walk in the model instead of through its walls.
  • meta.jsonScale and provenanceLevelled to the floor, the device, the quality tier and the metrics of the run.1 unit = 1 m
  • package.zipAll of it in one fileOne download when you do not need the parts separately.

Exactly what the delivery contract guarantees, no more; a package that breaks it is not delivered. A connected system fetches the same files through the API.

Read the delivery contract

Where the metres come from

The scale comes out of the walk itself: a depth model estimates distances in metres, and the scale is fused from many such anchors. A calibration pattern, or a distance you enter in the viewer, beats the estimate.

The scene is levelled to the floor when two independent witnesses agree within ten degrees: where the camera had “up”, and the plane you walked in. Up to twenty-five degrees the camera wins; beyond that the scene stays as it is.

Diagram in three panels: on the left a single frame of a room with a near-to-far gradient, in the middle a tripod of axes whose vertical points up and whose other two lie flat on a detected floor plane, on the right the same scene with a 1 m dimension line on that floor; arrows from left to right.
The three fields that carry the scale
FieldValueWhat it means
metersPerUnit1One unit is one metre.
upAxis"Y"The floor is down, as far as the estimate was good enough to say so.
identityTransformtrueNothing is left to convert — splat and mesh carry the same bake.

How accurate the scale is in a given case we do not know yet, so there is no number here: two depth models came out far apart on the same scene, and only a tape measure will say which is right. That measurement is running.

What does not work today

So you know it beforehand rather than afterwards. Where a measurement stands behind it we name it; where none does, we say that too.

360° spherical video

Not yet. Spherical video and camera raw files (.insv, .360) are refused at upload, with what to do instead: export a flat video with the “Linear” field of view from Insta360 Studio. The spherical route is begun; we announce it once a measurement shows it holds up.

A 1× lens instead of 0.5×

1× is computed on a denser route of its own and does not reach 0.5×: one 1× capture solved at 18.7 px, amber rather than green. 2× and 5× are refused.

White walls, glass and mirrors

A white wall is sharp yet has nothing to recognise: keep an edge, a door frame or the floor in the shot. Glass and mirrors stay unreliable, because a reflection travels with the camera.

Merging sections into one model

Not built. Each section is one delivery in metres, levelled to the floor; you place them together in Unreal, Unity or CAD.

Where your data sits, and for how long

The binding version is the privacy policy.

  1. Upload and results

    Through short-lived signed links straight into object storage at Hetzner Online GmbH in Nuremberg, Germany. All results live there too.

  2. Pre-check and database

    On our own server at Hetzner in Nuremberg. Whatever is checked before computing does not leave Germany.

  3. Computing on the GPU

    On GPU servers from RunPod, Inc. in the Netherlands. RunPod is based in the USA; access from there cannot be ruled out and is covered by the European Commission’s standard contractual clauses.

What you upload is yours; for companies we are a processor under Art. 28 GDPR. We sell no data and train nothing on your material for others.

The retention periods

Source video and images
Ninety days without access, and at most until you delete the capture.
Working data of the run
Ninety days without access; every re-export resets the clock.
Results
Until you delete the capture.
Working copies on the GPU servers
Until the run ends, leftovers at most fourteen days.
Backups
Seven days.

Deleting is immediate: in the app, through the API, and the account on request. When a retention period runs out, the webhook reports it.

Read the privacy policy

Frequently asked questions

What happens when the light is amber or red?

The job halts and waits for you instead of computing. You see the reason and a link to the part of the capture guide it concerns. Then you decide: compute anyway, film again, or let the capture go.

Which programs can I open the result in?

The splat opens in common Gaussian splatting viewers and in SuperSplat; for Unreal Engine and Unity there are plugins that load PLY splats. The collision mesh is a GLB file and goes anywhere GLB goes. In a browser you need nothing at all: a share link opens the scene directly.

Who can see my captures?

You, and whoever holds a share link from you. A share link is not indexable, and we do not show a customer scene publicly without asking first — the drawings on this page are drawings for exactly that reason.

Do I have to install anything?

No. You film with the camera app your device already has, and you upload and view in a browser.

Can this run without the interface, out of my own system?

Yes. Your system creates the capture, uploads the video straight to storage, tracks the states and receives a signed webhook when the delivery is ready — with your own reference. What the contract guarantees is on the API page.

Got a space you want to show as something people can walk?

Request access