What's new in Sonogram — 11 April 2026 update

A photorealistic turntable, a snowy Alps landscape, an About page, ~130 commits — and a deep rewrite for frame-rate independence.

  • Sonogram
  • Three.js
  • WebGL
  • changelog

It’s been a busy week on Sonogram. Since April 2nd I’ve shipped almost 130 commits covering new visuals, a brand new About page, a raft of stability fixes, and some serious under-the-hood work on performance and frame-rate independence. Here’s a tour of the highlights.

New things to look at

A photorealistic turntable visualThe biggest visual addition: a PBR-rendered turntable built on Three.js. It started life as a standalone Vite project (turntable-visual/) and is now integrated directly into the main app — complete with depth-of-field, proper resource cleanup, and real GPU memory management.
A reimagined Landscape sceneThe landscape visual was looking a bit gloomy, so we brightened the terrain, raised the sun, tamed the fluid effects, and ultimately transformed it into a snowy Alps-at-dawn scene. The sun glow and sky atmosphere now stay in sync with the sun color parameter.
Nebula gets a music-reactive sunburstA new lighting effect that pulses with the music, layered on top of the existing volumetric clouds.
Spectrogram feels aliveWe added a particle system, orbital camera drift, and a dynamic background — the visual now breathes with the track instead of sitting still.
An About pageSonogram finally has a proper About page describing the project and crediting contributors, including Domenico Brizi for the volumetric cloud work.
Mobile hamburger menuTop navigation now collapses cleanly on mobile, with the expand/collapse behavior finally working the way you’d expect.

Things we removed

Part of polishing the app meant trimming visuals that weren’t pulling their weight. These have all been retired:

Fire MandalaLight BulbVinyl (superseded by Turntable)

Under the hood

This is where a lot of the work went, and it’s the kind of thing you feel more than see.

Frame-rate independent smoothing, everywhere

We hunted down every hardcoded smoothing alpha — frequency averages, per-bin ampTex writes, beat smoothing, decay helpers — and rewrote them so the look stays the same whether you’re at 60fps or 144fps. The alphaFreq formula is now self-documenting with explicit target alpha and fps.

Audio processing is a single pass

We collapsed multiple loops into one, deduplicated RMS calculations, and hoisted loop-invariants out of the raymarching and spectrogram animation loops.

Memory and resource cleanup

Mic streams now stop on cleanup, GPU resources are disposed properly, and init races are guarded so you can’t double-initialize a visualizer mid-load. DOF focus calculation was also fixed.

THREE.Clock → THREE.Timer

The landscape and turntable visualizers have been migrated off the deprecated API.

Load-time optimizations

Asset cache-busting now works correctly, esm.sh is preconnected, and the Vinyl visualization’s quadratic audio gain scaling has been fixed.

Refactor: one visualization, one file

Render and shader code for each visualization has been extracted into its own file, which should make future contributions considerably less painful.

Comments