
Aurora Borealis
Background3DSeamless loop12 seconds
Fireflies blinking over a moonlit meadow of swaying grass, drifting into step once in the loop. Loops perfectly.
Your current settings go with it. Combine several clips and hand them over together from your sequence.
Presets
How far the fireflies synchronise in the middle of the loop.
The preview runs the same code your AI receives. These settings travel with the hand-off.
A summer night in a meadow: tall grass swaying in a slow wind under a bright moon, misty hills behind, and fireflies drifting through the air. Each firefly flashes on its own rhythm; once in the loop they fall into step until the whole meadow blinks together, then drift apart again. Near fireflies are big soft discs, far ones pinpoints, the grass in front hides them and the grass near a flash catches its light. Choose the glow (yellow-green, amber, aqua or green and amber), how many fireflies, how often they flash, how far they synchronise, the wind, the height of the grass, the moonlight, the mist and the brightness of the fireflies.
src/firefly-meadow.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/firefly-meadow.jscreateFireflyMeadow({ palette?, fireflies?, flashes?, sync?, wind?, grass?, moon?, mist?, glow?, seed?, aspect? }) => { scene, camera, setSize(width, height), update(time, loopSeconds), dispose() }createBloomPass(renderer, { width, height, glow?, exposure?, grain? }) => { render(scene, camera, output?), dispose() }PALETTES: { classic, amber, aqua, mixed }three@0.185.1 (source) — Renderer, instanced grass and fireflies, and the bloom targets.apw-runtime@1.0.0 (demo) — Demo harness.Coordinates: Perspective, 46° field of view; the camera stands 1 unit above the grass 4.2 from the origin; grass fills x ±2 to ±12, z +2.3 to -16; fireflies roam z +3 to -11 and up to 2.6 high.
Lighting: Self-lit fireflies; the grass is lit by a moon and, with an inverse-square falloff, by twelve of the fireflies.
Timing: update(time, loopSeconds) sets the loop time; every position and brightness is a closed-form function of it, so frames render in any order.
npm install
npm run render -- firefly-meadow/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:b2ca4851b5a4b4c8…
Background3DSeamless loop12 seconds

Background3DSeamless loop12 seconds

Background3DSeamless loop12 seconds

Background3DSeamless loop10 seconds

Background3DSeamless loop12 seconds

Background3DSeamless loopPortrait8 seconds

Background3DSeamless loopPortrait8 seconds

Background3DSeamless loopPortrait8 seconds