Visual experiment / recorded September 16, 2026

Lighthouse Storm: Two Local, Two Cloud.

One underspecified Three.js brief — a lighthouse, a storm button, a ship — through two local 2-Spark models and two cloud models. Same scripted interaction recorded on all four. Ranked by eye: Astra, GLM, Fable, DeepSeek.

LOCAL · DeepSeek V4.1 Flash EXL3 · top-leftCLOUD · Astra (GPT-5.4) · top-rightLOCAL · GLM-5.3 Flash EXL3 · bottom-leftCLOUD · Fable 5 · bottom-right

Panel order matches the labels above. These are headless-browser recordings of the generated code driven by a scripted, identical input timeline — not recordings of model inference. Fixed-step virtual clock at 30 fps, so cadence is honest even where the scene would have run slower live.

1 · Astra (GPT-5.4) · cloud

42.3 KB · three r180 · editorial UI with chapters, island buildings, whitecaps, ship guided in-frame. Not close.

2 · GLM-5.3 Flash EXL3 · local

79,097 output tokens · 59 min · 48.2 KB · three r180 · Gerstner waves, foam, keeper's hut. Best local by a mile.

4 · DeepSeek V4.1 Flash EXL3 · local

152,479 output tokens (111,215 reasoning) · 79 min · 47.4 KB · three r170 · water shader present but renders flat.

Read before comparing

The setup, the caveats, the limits.

Prompt, verbatim: "Build an interactive Three.js scene of a lighthouse on a rocky island at dusk, as a single HTML file (CDN imports OK). Orbit/zoom camera, touch friendly. A button rolls in a storm: sky darkens, waves grow, rain starts, the lighthouse beam sweeps. Press again and a ship appears, gets guided in by the beam and docks. Reset clears the weather."

Local arms ran under Hermes at ultra reasoning, uncapped, from fresh sessions. Cloud arms were run by hand in their native apps; no token or timing receipts exist for them, so nothing here is a speed comparison.

Recording: identical scripted timeline on all four (storm → ship → reset), camera rotated to the sunlit face before the clock starts. Local clips are 45 s and freeze on their last frame to fill the 60 s grid. Ship visibility in a panel depends on that camera angle — check the live page before concluding a scene has no ship.

DeepSeek caveat: this lab normally serves DeepSeek V4.1 Flash at TP4. This was a TP2 pack. The flat water might be the quant, might be the model — untested either way. The file is published as-is.

GLM incident, disclosed: its rank-1 Spark hard-wedged mid-prefill on the first attempt and needed a power cycle. The pair was relaunched from fresh containers, requalified, and the prompt resent from a new session. Only the successful run is timed above.

Local-only stacked cut (DeepSeek over GLM, 45 s): download ↓