One HTML file, Three.js r160, no models, no images, no fonts. Every brick is code.
Builder. Boxes, cylinders, lathes and tubes are transformed and merged into a handful of vertex-coloured meshes. Rain streaks and grime under every window ledge are baked into vertex colour.
Neon. Characters are drawn into a canvas atlas as glowing strokes over a blurred bloom layer; borders, bats and stars are real TubeGeometry with HDR colours above 1. Every sign has a flicker profile and a switch-off time.
Pipeline. Opaque scene → 4× MSAA half-float target with a depth texture → copy (colour + linear depth) → wet street and harbour shaders with screen-space reflections, refraction and Beer–Lambert absorption → rain and steam particles → multi-mip bloom, halation, ACES, grade, grain, chromatic aberration and tilt-shift.
Water. A 256² wave-equation ripple simulation runs at a fixed 60 Hz, masked to puddles and the harbour. Rain, your cursor, clicks and the junk's wake all drop into it.
Step-print. The frame is sampled at ~10 fps into a feedback buffer, so moving lights smear and stutter while static neon stays sharp.
Time. 23:00 to 05:30. Shutters come down, signs die one by one after 3 A.M., The flip clocks, timecode and almanac keep live Pacific time, and the almanac loses a page at midnight PT.
Keys: M mood · R rain · S step-print · T tune · Esc reset. All businesses are fictional.
This diorama needs WebGL 2. Try a recent desktop browser.