← Ariel Klevecz

Burgers

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.

Variations
10
Frames each
1,000
Model
SD 1.5
Technique
DDIM inversion
02

How they were made

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.

  1. Encode into latent space

    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.

  2. Condition on nothing

    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.

  3. Invert the DDIM update rule

    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.

  4. Decode and keep every step

    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.

  5. Play it in reverse

    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.

The part worth being precise about

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.

The seam

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.

03

Stack

InversionPyTorch · diffusers · Stable Diffusion 1.5 · DDIMScheduler
ConditioningNone — empty prompt, 999 steps
Frame opsNumPy · Pillow
Output1,000 PNGs per run, encoded to 1408×768 mp4
HardwareApple Silicon (MPS), portable to CUDA. Hours per burger.