CoolFace
Apppublic

ddevin2002/tiny-self-forcing-doom

sourceHugging Facemitupdated 22d agoView on Hugging Face
0likes
App README

Playable neural DOOM

No game engine is running. Every frame is generated by a 58M-parameter pixel-space diffusion transformer, conditioned on the key you press and on the last twelve frames of its own output. Eight frames per press, four denoising steps each.

The model comes from tiny-self-forcing, a project that reproduces end to end, at roughly 1/1000 scale on a single rented GPU, the path from a bidirectional video diffusion model to a real-time interactive world model:

  1. 1.train a bidirectional 58M DiT on 1.33M ViZDoom frames with flow matching;
  2. 2.causalise it to a chunk-causal mask so it can be rolled forward with a KV cache;
  3. 3.distil 48 denoising steps down to 4 — 557 ms → 69 ms per 4-frame chunk on an RTX 4090, 8.1× faster;
  4. 4.take the distillation context from the student's own rollout rather than from real frames, which is what stops it going progressively blurrier.

Step 4 is the ablation the repo exists to measure. Paired on held-out episodes, the teacher-forced student is significantly blurrier than the engine by frame 448 (−0.0093, 95% CI [−0.0189, −0.0007]); the self-forcing student — the one you are playing — is not (−0.0000, CI [−0.0095, +0.0092]).

A limitation shown on purpose

The context window is 16 frames, about 1.8 seconds. Turn away from a room and back and the room is re-imagined: the model has no longer memory. That is a boundary of this design rather than a bug, and it is what long-memory work such as LingBot-World 2.0 addresses.

The first twelve frames of a session are real ViZDoom renders. From frame 13 on, everything you see is generated.

Speed and quota

Runs on Hugging Face's shared free GPU pool (ZeroGPU). Measured on the deployed Space: 171 ms of model time for 8 frames — 46.8 fps — inside a ~0.9 s round trip, which is about real time for the 0.9 s of game footage each press produces.

ZeroGPU quota is per visitor and per day. Anonymous visitors get 2 minutes at the lowest queue priority; signing in to any Hugging Face account gets you much further. The first press waits about 2 s for a cold GPU allocation, then roughly 0.9 s each.