Vis is a real-time audio visualizer built with Three.js. It analyzes audio (from a file, mic, or system input) using the Web Audio API and feeds the results into GLSL fragment shaders as uniforms, so visuals react to the structure of the sound rather than just its volume.
A custom SceneEngine class manages the Three.js renderer, camera, and render loop, and handles scene switching with proper WebGL resource disposal — geometries, textures, materials — so switching between dozens of scenes doesn't leak memory. The audio system runs 7+ analyzers off the Web Audio API's AnalyserNode: a 31-band equalizer, pitch detection, beat and onset detection, and spectral centroid/harmonic analysis. It exposes 40+ uniforms to shaders (uBass, uMids, uHighs, uBeat, uBeatStrength, uSpectralStability, and others).
Each scene is a plain config object — a GLSL shader, its uniforms, geometry, and optional camera settings — dynamically imported by a theme-switcher UI. Built with Vite and a GLSL import plugin; no UI framework, the control panel is hand-written DOM/JS.
Live at vis.muditgulati.com.