Lucid Dreams

See the scenesMake your own

Live 3D in your browser. Drag to turn her.

Live 3D

Rebuilt in 3D from one clip.

Gaussians

Hundreds of thousands of Gaussians.

Small colored blobs, each fit on a GPU to match every view of her.

4DAnyone

48 generated cameras.

4DAnyone turns one phone video into 48 synced views.

Reality check

Blue is what the AI filled in.

The real camera saw 49% of her.

Life size

Real size, on your floor.

In a Quest 3S, hands only.

Meta Quest 3S

The headset it all runs on.

Inside

Snapdragon XR2 Gen 2, 8 GB RAM, 1832 × 1920 per eye behind Fresnel lenses.

Hands only

No controllers. 25 tracked joints per hand, and your real room through its cameras.

Two eyes, two renders

Each eye gets its own render, 72 times a second. This is who they see.

Recorded in the headset.

Tennis

A rally with Federer on full-size grass. His strokes come from real tennis footage.

Scenes

They play the move at full size. Turn on Lesson to go step by step.

How it works

  1. 1Pick a video
  2. 2Say what you want
  3. 3Best frames
  4. 43D body and face
  5. 5His voice
  6. 6In your room

Recents

0:400:050:400:160:400:400:400:050:40

Lucid Dreams

Make your own

IMG_0108.MOVVideo · 0:16

What do you want to do with them?

Make

0 / 14 frames

  • 190,815 Gaussians
  • 1.88 m tall, real size
  • 55 joints (SMPL-X rig)

New Recording · 0:50

Cloned voice: Vishal

Any video from your camera roll. Here, Vishal turning around once.

Technology

The math

Each person is about 290k 3D Gaussians, fit to 48 views and rendered twice per frame at 72 Hz.

  1. One Gaussian
  2. A frame
  3. Rendering
  4. Training
  5. Ball physics

01

One Gaussian

Everything is made of 3D Gaussians: soft ellipsoids with a position, rotation, three scales, an opacity and a color. We optimize a quaternion and log-scales, so Σ always stays valid.

Drag the two axes. Same algebra in 2D.

R0.853-0.5230.5230.853S0.6200.0000.0000.240
Σ0.2950.1460.1460.147
θ
31.5°
λ₁, λ₂
0.384, 0.058
det Σ
0.022
anisotropy
2.58 : 1
quad shaded
4.76 u² (4k²σ₁σ₂)
ellipse inside it
3.74 u² (79%)

1σ 2σ √8σ, where it stops the quad the GPU shades

Loading one frame

02

289,466 per frame

One real frame, rendered live. Each Gaussian has a position, rotation, scale, opacity and color. About 15 bytes each compressed, 4 MB a frame.

Their actual shapes

Each one drawn solid at 1σ. Long thin Gaussians look fine from the training views but smear from new ones, so we penalize axis ratios over 6:1.

Just the centers

Dense on the face and hands, sparse on flat cloth. Training adds and moves them where the error is high, capped at 300k per frame.

03

48 generated cameras

4DAnyone (Aug 2026) turns one video into 48 synced views: 3 rings of 16 at −10°, 15° and 35°, 2.8 m out. The cameras are known, so there's no structure-from-motion step.

Body tracking

GVHMR fits a body model (SMPL-X) to the clip. We keep its 22 joints per frame, and lessons score your head and hands against them.

Real vs generated

A Gaussian counts as seen if the real camera saw it: in frame, on the person, within 4 cm of the rendered depth. Everything else was generated and shows blue. For her, 48.9% was seen.

04

Rendering a pixel

Spark flattens each Gaussian into an ellipse on screen, sorts them near to far and blends them. Along a pixel's ray, the nearest one takes its share α of the light. The ones behind split what's left, T. The pixel is the mix of those shares.

c color, α opacity at this pixel, T light left
On screen

Drag the pixel.

Along its ray, near to far

The band is the light left, T. Each Gaussian takes α of it.

05

Training

Render 4 of the 48 views, compare, step with Adam, repeat. 7,000 steps for the first frame, then 1,500 for each next one, starting from the last (about a minute per frame on a B200). The real video frame counts as one more camera, only where it agrees with the views.

color error, structure (SSIM), the person's outline, and small penalties on opacity, size and stretch
The real frame from the clipOur 3D render from the same camera
Real frameOur 3D render

Real frame vs our render, same camera, same instant.

ReplayViews PSNRViews SSIMSeen by the cameraGaussians a frame
Studio dance31.9 dB0.98249%289,466
Tai chi29.6 dB0.97354%296,193
Golf swing26.3 dB0.96347%292,757
Guitar22.0 dB0.96059%293,508
LeBron's jump shot26.0 dB0.97143%290,931
Jump shot26.7 dB0.96748%289,979

PSNR and SSIM: our render vs the 4DAnyone views it trained on (every 8th camera, median over frames). Seen: share of Gaussians the real camera saw.

06

Ball physics

Tennis runs at 240 Hz: gravity, drag and Magnus lift from spin, plus a grass bounce where friction trades speed for spin. Federer's AI uses the same model to read the ball.

gravity, drag, Magnus lift

Same speed and angle, three spins. Each label is where that ball lands, in metres past the net.

Frame budget

Spark draws every Gaussian as a flat quad, even the faint ones, so the GPU's work is how many quads land on each pixel. The map is one real frame seen from 1.8 m: the brighter a spot, the more quads are stacked on it. On the headset we keep the 160,000 that add the most and render at 70%. When frames run late, a governor cuts the quads shorter and skips the faint ones.

pixels shaded: each quad is 2kσ₁ by 2kσ₂ on screen, scaled by focal length f over distance z

Counted from one frame of each clip, face on. Foveation not counted.

Loading the map

82 millionpixels shaded per eye, every frame

That's 48× the eye's own 1.7 million. The busiest spots get about 4,900 quads stacked on them.

The 160,000 that add the most, at 70% resolution.

Make your own

Upload a video or photos and say what you want to do with them.

Drop a video, or photos of one person

or click to choose. For photos, add a couple of face close-ups.

  • One personHead to toe in the frame, filling most of it.
  • Camera stillOn a tripod or propped up. No pans or zooms.
  • 4K portraitAt least 1080p, 9:16, five seconds or more. 60 fps if you can.
  • Bright, even lightA plain background and a fast shutter, so nothing blurs.

Built with 4DAnyone (Aug 2026), LHM++, UIKA, GVHMR, Gemini, gsplat and Spark. Quest 3S model by OG_MATTER on Sketchfab (CC BY 4.0). Source on GitHub.