This is not a video. Touch it.
Vortex is the VoxaVerse web viewer, running in this page right now. The scenes below are native 4D reconstructions* — drag to orbit, scrub the timeline, and when you have a scene of your own, open it here without uploading it anywhere.
Open your own scene
Exported a VoxaVerse Scene from Prism? Drop it anywhere on this page, or pick it below, and it opens right here.
.nx4d .ply .spz .sog .glb .splat .ksplat .usdzNothing is uploaded. The file is read by this tab and decoded by the viewer’s own workers on your machine. There is no upload endpoint, no server round-trip and no copy kept — close the tab and it is gone. Your scene never touches our network, because there is nowhere for it to go.
* Hero scene: ViVo “athlete” (Azzarelli et al., 2025, University of Bristol), CC BY 4.0 — reconstructed as 4D Gaussians by VoxaVerse. See the benchmarks page for measured render times and delivery sizes.
It opens your file. It never takes it.
Export a VoxaVerse Scene from Prism, drop it on this page, and it plays here. The reason that is safe is the reason it is fast: the file is read by this tab, not sent to one.
There is no server-side receiver for scene files anywhere on voxaverse.ai, so there is nothing for a file to be sent to. The site is a static export; the viewer is a set of ES modules that run in your tab.
Your pick becomes a browser-local object URL — a handle to bytes this tab already holds. Fetching it never leaves the process, so the viewer streams from your own disk exactly as it would from the network, progress bar and all.
The viewer reads only the container’s header first — a few kilobytes, with bounds checked before anything is allocated — and tells you what the file really is. A file it cannot open gets a sentence you can act on, not “invalid file”.
Nothing is cached to a server, and the local handle is released as soon as the scene finishes decoding. Close the tab and every trace of it goes with it.
What's native, what's supported, what isn't there yet
Every badge under the viewer is a live capability check from Vortex itself, run in your browser — never hardcoded on this page. A VoxaVerse Scene is the only one of these that keeps time.
| Format | View | Export | Notes |
|---|---|---|---|
| VoxaVerse Scene (.nx4d) | Native, full 4D | PLY or GLB at any scrubbed moment | The whole moving scene in one file |
| VoxaVerse Stream (.nxs4) | Native, streams while it plays | PLY or GLB at any scrubbed moment | Coarse-first: it paints before the file finishes arriving |
| .ply | Supported | PLY passthrough | The reference Gaussian-splatting binary layout, plus the compressed variant |
| .spz | Supported | Re-exports to PLY or GLB | Niantic’s container |
| .sog | Supported | Re-exports to PLY or GLB | Compact web splats, bundled or unbundled |
| .gltf / .glb | Supported | GLB with KHR_gaussian_splatting | Khronos Gaussian-splatting extension |
| .splat / .ksplat | Supported | Re-exports to PLY or GLB | Static, and honest about it — a single frame, no view-dependent colour |
| .usdz / .usda | Supported | Re-exports to PLY or GLB | ASCII root layers; a binary USD crate is refused with the command that converts it |
Time lives in the shader. Quality answers to your device.
Two decisions do most of the work, and both are visible from the outside.
A moving scene is evaluated at a single time value handed to the shader, so playback is not a sequence of files being swapped — it is one continuous model sampled at whatever instant you scrub to. Audio, where a scene carries it, is slaved to that same clock rather than running beside it.
When a device cannot hold the frame rate, the viewer lowers render resolution and climbs back when it can. It does not quietly throw away splats: what you are looking at stays the whole model, drawn at a scale your GPU can sustain.
WebGL2 is the verified default everywhere. WebGPU compute culling and sorting are opt-in and used only where the device genuinely reports an adapter — the badges under the viewer show which one your browser actually has.
Scroll the viewer off screen and it pauses; scroll back and it resumes where it was. A volumetric scene should not tax a GPU nobody is watching.
How the 2D → immersive handoff works
The viewer renders inline in a 2D canvas on load — orbit, pan, zoom. The universal baseline that works everywhere WebGPU or WebGL2 runs.
Vortex checks WebXR session support for immersive-vr and immersive-ar independently. Buttons appear only for modes your device genuinely supports — never assumed.
The XR session starts inside your click on Enter VR/AR — required by the WebXR spec. A real session begins, rendered and sorted at interactive frame rates.
Ending the session restores the 2D view exactly where you left off — no reload, no lost state.
Honest on every device
Feature-detected at runtime, documented here in advance — you'll never hit a black screen or a faked button.
| Environment | What actually happens |
|---|---|
| Chrome/Edge desktop + Android | 2D everywhere; immersive VR and AR where the device supports them |
| Meta Quest Browser | 2D + immersive VR; passthrough AR depends on device/OS build |
| Apple Vision Pro (Safari) | Immersive VR only — visionOS Safari’s WebXR AR module is not yet functional, so no AR button is shown |
| iPhone / iPad Safari | No handheld WebXR in 2026. The 2D viewer always works; an AR Quick Look link appears only when a scene ships a real USDZ sibling — never faked |
| Firefox / non-WebXR browsers | 2D viewer only; XR buttons hidden entirely |
Want this pipeline behind your own captures?
Prism — the Mac studio that Solved everything you just orbited — is coming soon, and its exports open right here.