The project's README from github.com/blendi-remade/interdimensional-game. As one markdown file: README.md.
A playable film. Every shot is generated as you watch, and the video model is the dice: whatever happens on screen is what happened, whatever you intended. You asked to leap the chasm; the frame shows you dangling from the ledge by one hand? That's what happened. Take the damage.
Powered by fal + MiniMax H3 Max, a video model faster than realtime, which makes a game rendered by a video model possible: the next shots film while the current one is still playing, so picking one plays with no gap.
Two engines live in this repo:
From a run of THE LOST TAPE, the found-footage horror world. Shot 19: the rocking chair starts moving on its own while the next choices film over the still-rolling clip.

Shot 26, 5 vitality left. It stopped keeping its distance.

Five worlds on one continuous Director stream. Each is a different fear grammar, and each carries two hidden decks the Director GM draws from at random, so nobody can predict the beat:
| World | The rule |
|---|---|
| THE LOST TAPE: LIVE | Night woods, a rotting farmhouse, a tall pale shape that is always somewhere it should not be. |
| BLACKOUT | An apartment tower losing power. The shadow exists only where there is no light, and every light is failing. |
| MIRRORS | A grand empty house of glass. The wrongness lives only in reflections, until it does not. |
| MILE MARKER | A night drive that will not end. The same figure on the shoulder, a mile later, closer to the road. |
| FOGBOUND | A fog-drowned coastal town that emptied mid-dinner and is slowly remembering its people. |
How a live run works:
prompt message, which the stream applies at its next chunk
boundary. Vitality drains slowly by design; the tape is meant to be
survivable.npm install
cp .env.example .env.local # put your fal API key in it
npm run dev
Get a key at fal.ai/dashboard/keys. Open
http://localhost:3000 and pick a world. The live
worlds use the alpha line of @fal-ai/client for fal.realtime.open.
opening ──► play ──► ADJUDICATOR rules mid-playback (zero wall-clock)
│ │
│ ▼
│ options surface OVER the rolling clip
│ 3 branches pre-film in parallel (i2v from the last frame)
│ each ready branch is pre-adjudicated too
▼
pick mid-clip: rolls the instant the shot ends ──► loop
no pick: freeze-frame + timer ──► the world's own shot
image_url), so the film never breaks;
prompts only ever describe change. A rare hard cut (at most one
option per beat, only when no exit is visible) films text-to-video so the
story can actually leave a scene.experiments/). Prompts with a quoted line
get the scripted sound clause, everything else stays wordless.FAL_KEY stays server-side (@fal-ai/server-proxy), and clips
stream through a same-origin media proxy so canvas frame grabs never hit
CORS.A shot-engine run films ~3 branch clips per choice plus one shot that plays, at 480P / 10s each, plus a few small LLM calls per beat. A live horror run is a Director session, billed per second of stream with a 60-second minimum, so budget a couple of dollars per two-minute tape. Keep an eye on your fal usage; dying is the cheapest way to stop.