A browser-based LUFS audio level meter for monitoring microphone input in real time.
- ITU-R BS.1770-4 K-weighting — accurate LUFS measurement using the standard two-stage IIR filter (pre-filter shelving boost + RLB high-pass), with bilinear transform coefficients adapted for any sample rate
- 3-second integrated loudness — rolling window measurement updated every 500ms
- 30-second history graph — scrolling canvas showing loudness over time with a target reference line
- Color-coded feedback — green (on target), orange (too quiet), red (too loud), with matching background tint
- Device picker — full-page overlay to switch audio inputs mid-session
?input=URL parameter — pre-select a device by label or device ID for bookmarkable setups
The app is a single index.html and can be served statically. It auto-deploys to GitHub Pages on push to main.
HTTPS is required for
getUserMedia. GitHub Pages provides this automatically.
If you need to run it locally on a network (e.g. for vMix or another machine on the same LAN):
# Generate a self-signed certificate (one time)
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes -subj "/CN=localhost"
# Start the server
node server.jsThen open https://localhost:3000 (or the network address printed in the console) and accept the self-signed cert warning.
Append ?input=<device name or ID> to the URL:
https://your-host/?input=Blue+Yeti
https://your-host/?input=Focusrite
The match is case-insensitive and substring-based. The URL updates automatically when you switch devices through the picker, so you can bookmark the selection.
The meter targets -24 LUFS, shown as a white reference line on the bar meter and a dashed line on the history graph. This is a common broadcast/streaming loudness target.