
A Desert in an Hourglass
NewBackground3DSeamless loopPortrait8 seconds
A tiny lit city lives inside the flame of a single match: hundreds of windows, rooftops and street lights glow above the charred head. A dark cinematic macro. Loops.
Combine several clips and hand them over together from your sequence.
It plays exactly as rendered and has nothing to adjust. The preview runs the same code your AI receives.
A macro shot of a burning match in the dark. Inside the amber flame stands a miniature city of ray-marched buildings with hundreds of individually lit windows, rooftop spires and street lights, while translucent flame sheets flow around it and embers rise from the charred wooden head. The camera eases closer over the 12 seconds and the film returns to its start, so it loops. It is restrained and cinematic rather than a physical flame simulation. The film has no settings.
src/last-match.js is the ingredient your AI reuses. demo.js is only the example scene around it, and uses the demo harness only for the demo.
src/last-match.jscreateLastMatch() => { scene, camera, setSize(width, height), update(time), dispose() }three@0.185.1 (source) — Renderer and a full-screen shader material.apw-runtime@1.0.0 (demo) — Demo harness.Coordinates: Composed for a 4:5 portrait frame and measured by the frame height: in a wider frame the picture stays centred at full height and its background fills the sides; in a narrower one, such as 9:16, the sides are cropped.
Lighting: The flame is the light: amber glow on the buildings and the charred match head, a violet edge at the base of the flame.
Timing: The flame sheets flow, embers rise and the camera eases closer to the miniature city; the last frame matches the first.
npm install
npm run render -- last-match/1.0.0 --out my-video.mp4Needs Node 18+, ffmpeg and Chrome/Chromium. Add --params my-settings.json (from Copy settings) for your own settings.sha256:ed87a5a41ddce4cf…
NewBackground3DSeamless loopPortrait8 seconds

NewBackground3DSeamless loopPortrait8 seconds

NewBackground3DSeamless loopPortrait8 seconds

NewBackground3DSeamless loopPortrait8 seconds

NewBackground3DSeamless loopPortrait12 seconds

NewBackground3DSeamless loopPortrait8 seconds

NewBackground3DSeamless loopPortrait12 seconds

NewBackground3DPortrait12 seconds