# Browser Creative

> Real-time graphics, sound and input in the browser: Three.js WebGL context leaks, Web Audio scheduling drift, Web MIDI permissions and face-api.js privacy.

- [Three.js Too Many Active WebGL Contexts After dispose()](https://abchaudary.me/blog/three-js-too-many-active-webgl-contexts): Chrome allows at most 16 active WebGL contexts per renderer process. Three.js renderer.dispose() doesn't release the WebGL context, so a scene remounted on every route visit hits the cap on visit 17.
- [Web Audio Scheduling Drift: Right in Code, Late in the Room](https://abchaudary.me/blog/web-audio-scheduling-drift): A Web Audio metronome on setTimeout drifts because the JavaScript timer and the audio clock are two clocks. A lookahead scheduler on currentTime fixes it, measured before and after.
- [face-api.js Privacy: Verify It in the Network Tab](https://abchaudary.me/blog/face-api-js-privacy-verify-network-tab): A privacy claim worth trusting is one you can check. The Network tab on a live face-api.js app shows the model weights load once, then zero requests while the camera runs.
- [Web MIDI Permission, statechange and the Stuck Note](https://abchaudary.me/blog/web-midi-permission-statechange): A Web MIDI app has three states to track: permission, device and connection. When an input disconnects, release every note it started, or the note sticks after the device returns.
