Skip to content

A Desert in an Hourglass

Falling grains build a miniature dune country inside a brass hourglass: a sun and three camels walk the ridge, then a warm wind unthreads the caravan back into sand. Loops.

Background, V1 Effects3DSeamless loop, verified161 lines of codev1.0.0

In Machines & clockwork, Nature & weather, Craft & heritage, Made for phones

Next: A Door Into Four SeasonsSurprise me

A Desert in an Hourglass preview
Starting live preview…
00:00:00:00 / 00:00:00:01

Live, running the real source at reduced resolution.

Combine several clips and hand them over together from your sequence.

A finished film

It plays exactly as rendered and has nothing to adjust. The preview runs the same code your AI receives.

Info

What it is

A brass-framed hourglass on a black-and-gold sand table. As the grains fall they pile into dunes in the lower bulb and a sun rises above them; three camels walk the ridge in a caravan. Then a warm wind lifts the grains, the caravan unthreads back into sand, and the sand returns to the upper bulb, so the 8 seconds loop. Individual grains, dune hatching and the camel silhouettes are all drawn in the shader. The film has no settings.

Reuse it in your own idea

  • Time-passing b-roll: the hourglass runs once per loop, which suits a "time is running out" beat.
  • Seamless loop: the sand returns to the top, so it repeats for any length.
  • Travel promo: the caravan on the dune ridge holds from about 3 s to 6 s.

Which part is reusable

src/sand-hourglass.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.

Good to know

  • The film is finished: it has no settings. To change colours or timing, edit the shader.
  • It is composed for a 4:5 portrait frame.
  • Its length is fixed at 8 seconds; repeat the loop to fill a longer clip.

Technical details

Technical details
Implementation
Three.js 0.185.1 (WebGL) · ES module src/sand-hourglass.js
Exports
  • createSandHourglass() => { scene, camera, setSize(width, height), update(time), dispose() }
Dependencies (exact)
  • three@0.185.1 (source) — Renderer and a full-screen shader material.
  • apw-runtime@1.0.0 (demo) — Demo harness.
How it fits a scene

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: A warm glow from the sun inside the glass, on a black sand-table ground.

Timing: Grains fall and pile into dunes, a sun rises and three camels walk the ridge, then a wind unthreads the caravan back into sand.

Output
1080×1350, 30 fps, 8 s · procedural (computed from the frame number) · seamless loop — Every part of the film is a function of the time modulo its length, and every motion completes whole cycles, so the last frame meets the first.
Tested
Rendered 240 frames on 2026-10-10 in Chrome 154.0.8037.97 headless on Linux 7.0.0-38-generic (x64), Node 22.14.0 (WebGL 2 via SwiftShader (software)). Same frame twice from fresh pages: identical. Loop: Frame 0 vs end state (progress 1): mean |Δ| 0.0000, max |Δ| 0 of 255.
Performance
One full-screen fragment shader. About 13 ms a frame at 1080 by 1350 on an integrated Intel GPU (Iris Xe), and about 3 s a frame with software WebGL. Plays at 30 frames a second at full size on an integrated GPU.
Export a video yourself
Download the source, then in the folder: npm install npm run render -- sand-hourglass/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.
Version
1.0.0 · sha256:cc1db86cfa5976e1…
Files
License
MIT. Copyright (c) 2026 AI Pixel Wizard. Released under the MIT License. See LICENSE in this folder. License details
Provenance
From the owner's collection Twenty Impossible Worlds: the original GLSL ES 3.00 shader of the film “A Desert in an Hourglass”, created with ChatGPT / Codex and used as published, wrapped for AI Pixel Wizard as a three.js full-screen shader in October 2026. The collection's synthesised soundtrack is not part of this ingredient.
BinMore like this

Neon Koi

Background3DSeamless loopPortrait8 seconds