Skip to content
← Back to the gallery
Claude Opus 5.5VideoPrompt

Fresnel Engine: a GLSL lighthouse lens in a storm

Claude Opus 5.5, run in Devin Cloud Agent, turned one long prompt into a 32-second looping film of a giant Fresnel lens in a storm-hit lighthouse, with custom GLSL honey glass, a volume beam, rain and caustics.

Open live demo

Prompt

Quoted verbatimSelf-contained
Create a polished, visually impressive, self-contained single-file HTML/WebGL experience called:

fresnel-engine.html

Do not just describe the idea. Actually generate the complete working HTML file and save it to the current directory.

Build a 32-second looping cinematic short, not a sandbox diorama. The product is the camera performance. Interaction is a bonus after the film has played once.

World:
A first-order Fresnel lens in a lighthouse lantern room at the height of a North Atlantic gale. The optic is four meters across: concentric brass-framed honey-glass prism rings rotating on a mercury bath. One kerosene sun at the core. Storm glass on every pane, salt rime on the iron, a keeper's coat on a peg, an oil can on the gallery floor. Outside: black sea, one visible wave hitting the cage. The beam is a real volume of light, not a prop. Everything is procedural code. No external models, textures, images, fonts as files, or audio.

Directed film (one clock, named beats, seamless loop):

0.0–4.0s DROP
Extreme close-up. Rain on the outer storm pane. One drop turns, and the lamp is warped through it. Almost no context. Slow push.

4.0–11.0s ROOM
Pull back and rise. We are inside the lantern room. The optic fills the cage. Prism rings tick past the camera, heavy, slow, close enough to read the brass fittings. Mercury in the bath makes a slow meniscus. Water runs down the panes.

11.0–18.0s THREAD
Camera threads a prism ring. Pass through the honey glass of one panel (refraction and a little dispersion, not a transparency hack), ride the ring's curvature for a beat, exit toward the kerosene core. The next panel warps the room around it.

18.0–25.0s BEAM
Exit into the beam itself. Travel down the shaft over black water. One wave hits the gallery and throws spray through the light. Caustics crawl across the iron floor in time with the rotation.

25.0–30.0s SWEEP
The optic completes one revolution. The beam sweeps the horizon and holds. One lightning frame silhouettes the whole lens against the cage. Do not fade to white. Hold the machine as a dark glass engine inside the fire of its own beam.

30.0–32.0s CODA
Ease into a slow continuation that matches frame 0, so the loop is invisible. No smash cut.

The 32-second loop is exactly one revolution of the optic. At t=0 and t=32 the same prism is in the same place. That is a mechanical constraint, not a suggestion.

After the first full play, enable drag-to-orbit, scroll-wheel zoom, and a "Replay film" control. A Pause button always works. Optional: keys 1–6 jump to beat starts. Optional: #t= seconds deep-link.

Scene craft:
- Strong foreground / midground / background. A prism panel occupies foreground in ROOM. The cage, the sea, and fog hold the depth.
- At least two human-scale references (keeper's coat, oil can, gallery railing, a drowned matchbox) so the optic reads as enormous.
- The lens is built from many concentric prism rings (InstancedMesh or equivalent). A sphere, icosahedron, or textured globe standing in for a Fresnel lens is a fail.
- Honey glass is thick glass. You should see a distorted lantern room through at least one panel.
- Brass has weight: dark in shadow, only the rims catching the beam.
- Rain on glass is a shader, not a handful of sprite drops. Spray and salt rime are instanced.
- Caustics on the iron floor are driven by the rotating optic, not a looping GIF-like texture.
- Limited palette, locked: iron #2a2c2e, brass #b0894f, honey glass #c9a36a, kerosene #ffb347, storm #0b1016, foam #c5d0d4, salt rime #e8e4dc, beam #ffe6b0. No cyan, no magenta, no neon, no rainbow, no purple-on-black "AI look".
- Typography: one small title "FRESNEL ENGINE" and beat name, filmic, not a dashboard.

Technical requirements:
- Three.js from a stable CDN. All HTML, CSS, and JS in this one file.
- Drive every animation from a single elapsed-time clock with named beat windows. No independent Math.random loops, no Date.now in shaders, no unseeded noise. Seeded RNG only, seed constant 0xF1A5.
- Camera film uses smooth interpolation with ease-in-out on the big moves, a heavier ease on the optic (it has mass), and a long-tail settle into SWEEP. Linear orbit as the primary camera is a fail.
- Custom GLSL (ShaderMaterial or full-screen pass), not stock materials pretending:
  1. Honey-glass prism (refraction + slight dispersion)
  2. Volume beam (density along a shaft; a transparent cone mesh is a fail)
  3. Rain on the storm pane
  4. Moving caustics on the iron floor, driven by the optic's angle
- InstancedMesh for prism segments, rain, salt, and any repeated iron/brass cells. Do not spawn thousands of free Mesh objects.
- Post-processing is allowed but cannot replace lighting. If you use bloom, it is a light touch on the kerosene core and the beam only. UnrealBloom over the whole scene is a fail.
- Fog, wet reflections, and the storm do the atmosphere. No cheap transparent cones as "god rays" unless they are actually driven by a shader.
- Responsive, full browser window, handle resize, target 60fps on a 2023 laptop. If you have to choose, cut particle count before cutting the camera film.
- Small unobtrusive UI: title, current beat, pause, replay. No FPS counter, no dat.gui, no debug helpers left on.
- No TODO comments, pseudocode, placeholders, missing functions, or "this would be better with X".
- On load, the film starts itself. A still frame behind a start button is a fail.

Quality bar:
This should look like a short film still, not a three.js example. If a screenshot at 26 seconds does not read as "a cathedral-sized glass engine turning in a storm," you are not done. Iterate on composition, materials, and camera before adding more objects.

Details

Type
Video
Iterations
Not stated
Posted
Sep 25, 2026

Sources

  • Website@Chris_Wozniczekhttps://lab.chris-wozniczek.dev/prompt?id=fresnel-engineSep 25, 2026

Tags