The concept
Red Light District 67 imagines a member-run darkroom beneath a retired tram depot. Its voice is exact but affectionate: tray temperatures, film stocks, dilution ratios, late-night booking times, and the etiquette of the light lock make it feel operated rather than branded. The composition alternates blacked-out rooms with an uncompromising safelight-red rules card. Paper white appears only where a photographic sheet or technical note earns it.
Prints that develop
The centrepiece lives in main.js. Each DevelopingPrint loads one commissioned still into an offscreen canvas, crops it with cover geometry, and applies monochrome contrast. Pointer movement feeds interpolated coordinates into bloom(); soft radial gradients accumulate on a second mask canvas. render() composites the photograph through that growing mask over warm paper, so the latent image arrives in irregular pools instead of a generic wipe.
The “Fix this ghost” control freezes the mask at any density. A live density rail makes progress legible, and Space or Enter agitates a focused print. The tongs are a genuine pointer-drag target: dropping them over the marked stop bath adds a sepia chemical shift and triggers the squeegee line. The three source stills—carousel, midnight cat, and harbourmaster—were created with GPT Image 2 via Higgsfield.
Apparatus, drawn in code
The safelight, enlarger, trays, tongs, drying line, stamps, and exposure cone are CSS constructions. In the enlarger station, updateExposure() combines aperture and seconds into density, changes five shaded test-strip slices, and rewrites the printer’s diagnosis. The member wall frames local source material as physical prints with paper edges, pins, cord, captions, and uneven hanging angles.
Palette & type
#0D0A0A
#C22E2E
#68625E
#E9E3D7
Instrument Serif supplies the lush, vulnerable display voice; its italic is reserved for moments of alchemy. Space Mono carries labels, exposure data, instructions, and every operational detail. Both are self-hosted. Tight display tracking and generous mono tracking create the tension between image and instrument.
Atmosphere & motion
A fixed SVG turbulence layer supplies emulsion grain. The staggered arrive sequence opens the room; liquid rings drift in the trays, and the squeegee makes one pass after a successful drop. Canvas work is capped at 1.5× device pixel ratio, batches reveal points per frame, stops scheduling when the document is hidden, and becomes still under prefers-reduced-motion. The print-wall switch is real: setInspection() changes the light state, image grading, status copy, and accessible pressed state.
Image workflow
The carousel, midnight crossing, and harbourmaster began as GPT Image 2 stills created via Higgsfield. The production workflow takes those still masters into Kling 3.0 for loop-ready ambient motion passes; all deliverables are stored locally rather than requested from a CDN. This room uses the local print1.jpg—print3.jpg masters as canvas sources, a hero latent image, the enlarger test strip, and the finished white-light wall. Every other visual—the trays, enlarger, chemistry glare, print paper, grain, and switch—is generated in HTML, CSS, SVG, or canvas code.
Reproduce this
Prompt an AI frontend agent to build a fictional institution around one physical process. Specify near-black, one fierce safelight red, and paper white reserved for prints; pair Instrument Serif with Space Mono. Ask for canvas image masks accumulated from pointer-made radial blooms, a freezeable partial state, draggable tongs, a stop-bath shift, and a squeegee pass. Add an enlarger whose aperture and time alter a five-step strip, rich cooperative lore, local assets, reduced-motion handling, hidden-tab pausing, and screenshot QA at phone, tablet, and desktop widths.