DisplayXR — inline-3D web samples

Glasses-free 3D elements inside ordinary web pages, for the DisplayXR Browser. The analog of immersive-web/webxr-samples.
Get the DisplayXR Browser and open a sample below on DisplayXR hardware to see it in glasses-free 3D — in any other browser the pages render as normal 2D, so they're safe to view anywhere.

hello cube

The minimal sample — one rotating three.js cube in a bordered canvas, re-projected off-axis so you look around it. Start here to see the smallest complete inline-3D page.

Northline storefront — live app

A full shop, except the products are actually there: four departments, a product page whose hero you look around rather than spin a turntable of photos, search, a cart — and a studio that turns one photograph into a 3D item you can keep. Sign in with Google to scan your own. Open it in the DisplayXR Browser on hardware for glasses-free 3D; anywhere else it degrades to 2D.

gaussian splat

A photoreal 3D Gaussian splat as a glasses-free tile — loaded with one addSplat() call, auto-framed on the zero-disparity plane, drag to spin, with a 2D price plate composited crisply over the woven 3D.

glTF model

A glTF mesh as a glasses-free tile via addModel() — and, beside it, a mesh and a Gaussian splat sharing one scene and sorting against each other, so a catalogue can mix captured and authored content instead of committing to one.

Shopify product

A real product from a Shopify demo storefront, loaded straight from cdn.shopify.com by URL — no conversion, no re-export, no copy in this repo. Shopify serves 3D product media uncompressed, CORS-open and at real-world metre scale, so a merchant’s existing catalogue already works. Paste another URL to try your own.

camera rig

Hand the runtime your camera instead of a virtual display: pose, vertical FOV and a convergence distance, sent every frame with setViewRig(). Drag to orbit — your framing, the runtime’s stereo. Sliders for convergence and FOV with a live comfort readout, and C to cut between a camera rig and the display rig that frames the same cube, which is the clearest way to see what each one is for.

display modes

Ask the panel what it is — metres, pixels, the view scale it recommends — and what rendering modes the runtime can put it in, then ask it to change one. A 2D/3D lens toggle that fades the page’s own stereo out with it (the lens alone leaves the woven atlas showing flat, which is blurry), a per-mode request button with the non-2-view modes greyed out, and a live log of the two session events.

mixed 3D windows

Still 3D photos, a live 3D video, and a real-time three.js scene — every kind of glasses-free-3D content, each woven with one SDK call, all on one session. The runtime batches every visible window into a single weave per frame, so it scales to a wall.

demo gallery

A grid of the DisplayXR demo logos, each woven inline as a glasses-free-3D tile — a compact showcase of the multi-element weave.

3D picture wall

A lazy-loading scrolling wall of 3D pictures — each tile's weave layer is created as it nears the viewport and closed as it scrolls away, so a long wall only pays for what's on screen.

sticky header

The same scrolling wall under a sticky, translucent page header — the chrome-occlusion path. Tiles pass under the bar as flat 2D with no page wiring at all: auto-chrome finds the sticky bar and excludes it from every tile's weave.

composition showcase

Every hard way flat 2D and woven 3D can land on top of each other, as 14 numbered cases on one page — translucent chrome, frosted glass, opaque plates, a page modal, a nested scroller, a sticky tile, tile-on-tile, partial visibility at all four viewport edges, and a mixed scene + video + photo load. It is both the demo of what draw-order occlusion buys an author and the standing hardware regression surface: cases that glitch today are built anyway and marked red on-page, and every section carries a stable data-case marker so a test session can be scripted against it.

DisplayXR Gallery — live app

A full 3D-photo/video social app (a glasses-free-3D Instagram) built on the inline-3D SDK and hosted on Vercel — browse, upload, and view a feed of woven 3D posts. Open it in the DisplayXR Browser on hardware for glasses-free 3D; anywhere else it degrades to 2D.

The SDK — js/inline3d.js

A dependency-free helper over the inline-3d WebXR surface: wall.addImage() / addVideo() / addScene() turn any canvas into a weaved 3D window and manage the side-by-side buffer, feature detection, and (for many windows) a lazy create/close lifecycle. Optional three.js glue in js/inline3d-three.js. Start here: Authoring inline-3D pages.

Build your own

Clone displayxr-web and turn any canvas into a woven 3D window with one SDK call:

import { createInline3D } from './js/inline3d.js';
const wall = await createInline3D();
if (wall.supported) wall.addImage(canvas, 'photo-sbs.png');

Full API in the SDK reference, authoring details in Authoring inline-3D pages.