hjLabs AI Playground

Starting the on-device runtime…

View a 3D Gaussian splat in your browser

Drop a Gaussian-splat file onto this page — .PLY, .SPLAT, .SPZ or .KSPLAT — and it renders on your own graphics card through WebGL2, with orbit, pan and zoom, a live splat count and a frame-rate readout. Nothing is uploaded: the file is read by your browser, decoded in a worker on your machine and drawn locally, so you can open a scene you have not published anywhere. The renderer is Spark, World Labs' MIT-licensed splat renderer for three.js, which is why the same page reads four different splat container formats instead of just one.

A 3D Gaussian splat is not a mesh and not a point cloud. A scene is stored as a few hundred thousand to a few million anisotropic 3D Gaussians, each with a position, a 3x3 covariance (written as a scale and a rotation), an opacity and a colour that can change with viewing angle through spherical harmonics. To draw a frame the renderer projects every Gaussian to screen space, sorts them back-to-front and alpha-blends them. That is why splats look photographic where a mesh looks modelled — they reproduce the soft, view-dependent appearance of real materials instead of approximating it with a texture.

This page VIEWS splats; it does not train them. Fitting a splat to a scene needs dozens of photographs with known camera poses, and recovering those poses means structure-from-motion — COLMAP or equivalent — which has no browser port at all. The one browser-based splat trainer that exists, Brush, runs only on desktop Chrome and still requires COLMAP poses as input, so the step a browser cannot do is exactly the step it demands. Splat training is a job for a desktop GPU or a hosted service; viewing the result is a job a browser does very well, and that is the honest split this page draws.

Where to get a splat to open: capture apps such as Polycam, Luma, Scaniverse and KIRI all export .PLY or .SPLAT; PlayCanvas' SuperSplat editor imports and re-exports every common format; and the original INRIA 3D Gaussian Splatting research scenes are published as .PLY. If you have none of those, the sample scenes below are generated procedurally in your browser, so the page is never empty.

gaussian splatting viewerview .splat file online3d gaussian splatting browserply splat vieweropen splat file onlinespz viewerksplat viewer3dgs viewer webwebgl gaussian splat rendererfree gaussian splat viewer no upload

Frequently asked questions

Which file formats can I open?

Gaussian-splat .PLY (including the compressed PlayCanvas variant), .SPLAT from antimatter15, .SPZ from Niantic and .KSPLAT from GaussianSplats3D. A plain point-cloud .PLY is not a splat and is rejected with an explanation rather than rendered as nothing.

Can I train a Gaussian splat here from photos or video?

No, and no browser tool can today. Training needs camera poses from structure-from-motion, and COLMAP has never been ported to WebAssembly. This page is a viewer; for something a browser can genuinely build from one photo, see the image-to-3D point cloud page.

How many splats can my device render?

Budget about 500,000 splats as the number every device manages, because the WebGPU storage-buffer binding limit is 128 MB on 100% of devices and only 17% reach 2 GB. Desktops with a discrete GPU routinely handle several million; phones do not.

Why is a large splat blocked on my phone?

iOS kills a tab that passes roughly 100 MB of memory, and it does so without throwing a JavaScript exception that a page could catch and recover from. Refusing a file that would certainly cross that line is the only honest option, so large scenes are gated on mobile rather than crashed.

Is the file uploaded anywhere?

No. The file is read with the File API, decoded in a Web Worker on your machine and rendered by your GPU. hjLabs.in has no upload endpoint and no storage for it — closing the tab is the whole deletion process.