Ten variations on a single photograph. Each one was walked backwards through a diffusion model until nothing was left but noise — a thousand frames on the way down — then played in reverse, so you watch a burger assemble itself out of static.
Ten burgers that haven't arrived yet. Each tile is the last frame of its own inversion — the noise a burger was taken apart into — and each one is the same photograph with exactly one thing changed. The name is the only hint you get before it comes back. Press one and give it about forty seconds.
A diffusion model learns to reverse a noising process: training adds Gaussian noise to images across a schedule of timesteps, and the network learns to predict what was added. Sampling runs that backwards — start from pure noise, repeatedly predict-and-subtract, and an image emerges. These videos run it in the other direction, on a picture that already exists.
The still is normalised to [-1, 1] and pushed through Stable Diffusion 1.5's VAE encoder, giving a latent eight times smaller per side. All the arithmetic happens down there, not in pixels.
An empty prompt is tokenised and encoded once, then reused at every step. There is no text guidance anywhere in the run — what you end up watching is the model's own unguided read of the picture, not a prompt steering it somewhere.
DDIM is a sampler whose update rule is deterministic — no random draws during sampling — and that is the hinge the whole thing turns on: a sampler with no randomness in it can be run in reverse. The scheduler's timesteps get flipped into ascending order. At each step the UNet predicts the noise in the current latent, the code solves for the implied clean latent, then re-noises it forward to the next, noisier level. Repeat 999 times and you land on the noise latent that a normal DDIM sampler would have denoised back into this exact image.
After each inversion step the latent goes back through the VAE decoder and straight to disk as a PNG. Frames are written immediately rather than accumulated, which is the only reason a thousand full-resolution frames fit on consumer hardware. Frame zero is the untouched original rather than a VAE round-trip, so the sequence resolves to a pixel-perfect image.
The frames are stored clean → noisy. The videos play them backwards, so a sequence authored as a decay is experienced as an emergence. A thousand frames at 24fps: forty-one seconds of a burger arriving.
This is not noise sprinkled over a picture. Each frame is the model's own latent trajectory, decoded — the specific noise this image corresponds to under the distribution the model learned. That is why the grain has structure, why it dissolves unevenly, and why the burger comes apart along its own seams rather than fading out.
Early versions had a flaw at the very end: the last few frames before the clean image looked subtly off. Round-tripping through the VAE leaves its own artifacts, and those don't match an untouched original — so the sequence finished on a hard texture pop. The fix measures the actual noise level of each frame near the clean end, synthesises a matching version from the real photograph, and crossfades between them on a smoothstep curve. Perceptually correct rather than only mathematically correct.
| Inversion | PyTorch · diffusers · Stable Diffusion 1.5 · DDIMScheduler |
|---|---|
| Conditioning | None — empty prompt, 999 steps |
| Frame ops | NumPy · Pillow |
| Output | 1,000 PNGs per run, encoded to 1408×768 mp4 |
| Hardware | Apple Silicon (MPS), portable to CUDA. Hours per burger. |