hjLabs AI Playground

Starting the on-device runtime…

Capture a scene with your camera and fuse it into 3D

Point your camera at something, walk it slowly sideways, and this page captures a short set of frames spaced by real movement rather than by a timer. Depth Anything V3 then looks at the whole set in a single pass and returns both a depth map and a camera pose for every frame, which is what makes it possible to place them all in one coordinate system instead of ending up with four unrelated clouds. The frames are unprojected, fused into a single point cloud and drawn with WebGL so you can orbit the result and export it as a .PLY. Every step runs in this tab on your own GPU — the video is never recorded and never uploaded.

What you get is a multi-view point cloud, and it is worth being precise about that. It is not a Gaussian splat: nothing here is trained, and there is no view-dependent appearance. It is not photogrammetry either — there is no feature matching, no bundle adjustment and no structure-from-motion anywhere in the pipeline; the camera poses are predicted by the same neural network that predicts the depth. And it is not a measurement. Depth and pose come back in a consistent but arbitrary scale, so the shape is right and the units are not metres.

Because every point still comes from a pixel some frame actually saw, anything none of the frames saw is simply absent. Moving the camera does genuinely fill in surfaces that a single photo cannot reach — that is the whole reason for capturing more than one frame — but a few steps sideways is not an orbit, so the back of the subject stays empty. Surfaces reconstructed from different frames also do not land exactly on top of one another: measured against a synthetic scene with known camera motion, registration drifted by roughly two per cent of the scene size across a four-frame window, on top of about five per cent depth error.

The capture is paced by how far the picture has actually moved, because a burst taken standing still gives the model no parallax and quietly produces a thickened single-view cloud that looks like a result. Note the honest limit of that test: it measures image displacement, and turning on the spot slides the picture just as much as stepping sideways while producing no parallax at all. Step sideways rather than pivoting, and keep the subject in frame throughout.

live 3d capturewebcam to 3dvideo to point cloudcamera to 3d browsermulti view depth estimationdepth anything v3 browser3d scanner browser no appphone camera 3d point cloudfree 3d capture no uploadwebgpu 3d reconstruction

Frequently asked questions

Is this a 3D scanner?

It is a multi-view point cloud builder, which is one honest part of what a 3D scanner does. There is no mesh, no measurement in millimetres and no coverage of surfaces your camera never pointed at. If you need a watertight, dimensionally accurate model, this is not that.

Does this generate a Gaussian splat from video?

No. Training a Gaussian splat is a per-scene optimisation that takes minutes to hours of CUDA and needs camera poses from structure-from-motion. No browser can do it, and this page does not claim to — it fuses depth maps into points. The splat page here is a viewer only.

How many frames does it capture, and why so few?

Four by default, eight where the device allows it. The limit is the WebGPU storage-buffer binding size: four frames at 308 pixels needs a 128 MB buffer, which is the minimum every conformant device has, while eight needs 1 GB, which about 90 per cent of devices reach.

Why does it ask me to move instead of just taking four photos?

Because four photos from the same spot contain the information of one photo. Depth from multiple views needs parallax, which only comes from the camera physically changing position, so the shutter waits until the picture has genuinely moved.

Are the distances in metres?

No. The model returns depth and camera translation in the same arbitrary scale, which is what makes fusion possible, but that scale is not tied to the real world. The proportions are meaningful; the units are not.

Is my data uploaded to a server?

No. The model weights are downloaded from Hugging Face to your browser once, and every inference after that runs on your own GPU through WebGPU. Your text, images and audio are never sent anywhere — hjLabs.in has no inference server and no way to see your input.

Does this work on a phone?

Small models do. Recent mobile Chrome and Safari expose WebGPU, but memory is the binding limit — stay under roughly 200 MB of weights on Android, and expect iOS to reclaim the tab sooner. The catalog shows every download size up front so you can pick something that fits.