🌊 SplatWorld
202,599 CelebA faces compressed into a 7 MB wave-interference field. Dive through it below.
model backend: onnxruntime
morph — nudge the identity along three directions:
Full Shepard zoom (falls through many faces, the scale reset hidden in the fire):
SplatWorld — 202,599 faces in a 7 MB wave field
This decoder doesn't store pixels. It maps a 128-D point z to 256 Gabor wave packets — each one a little oriented wave with a position, a size, an orientation, a frequency, and a complex amplitude (a cosine weight and a sine weight). The picture is the sum of all 256 packets interfering. A face is a phase-locked standing wave.
Fire vs face. Near the origin (|z| < 15) the packets phase-lock: peaks and
troughs cancel everywhere except along an eyebrow or a cheekbone. Far out
(|z| > 35) there's no training data, so the decoder stops orchestrating — the
packets decorrelate into drifting "fire". Zoom rides the radius: dive from fire
into a face and back, forever (a Shepard tone for the eye).
The space between faces. Moving a feature from A to B is transport. In a fixed additive basis the only way is to fade one atom out while fading another in — mid-way both exist and their phases fight, and that fight is the fire. This is 1990s technology: eigenfaces interpolated faces linearly in 1991 and produced exactly these ghosts. The loophole: a complex atom can translate by rotating its phase (a Fourier shift) instead of crossfading — phase-transport leaves no ghost, and that's the direction this whole line of work points at.
Honest notes. 96×96 is a VRAM limit, not a taste; hair and fine detail struggle and samples skew toward a mean face. The "standing wave" language is a faithful description of a Gabor renderer, not a claim of new physics. Trained on CelebA (non-commercial research use — check the dataset's terms).
Do not hype. Do not lie. Just show.