If you have ever watched a movie on a laptop with headphones, you know the problem: one minute the dialogue is barely a whisper, the next an explosion nearly blows your ears off. So you spend the whole movie riding the volume knob.
Most browser video players still do not offer a simple way to fix this. VLC has had a compressor for years. Some high-end TVs have a "night mode." But your browser's <video> element usually just hands you the raw mix — wide dynamic range and all.
KoalaSync 2.2.0 adds a built-in audio compressor for browser video. It helps reduce the gap between quiet dialogue and loud action scenes. And it runs completely locally in your browser. No audio data ever leaves your computer.
What the Audio Compressor Does
A compressor reduces the difference between the quietest and loudest parts of a video. That means:
- dialogue becomes easier to hear
- explosions and loud music become less harsh
- volume changes feel less extreme
- watching at night becomes more comfortable
- headphones and laptop speakers become more usable
KoalaSync uses the Web Audio API — the same low-level audio graph that browser-based DAWs and synthesizers use. The compressor runs on your machine only. It does not upload, analyze, store, or transmit your audio.
The Presets
We settled on four presets after testing across movies, YouTube videos, and TV shows, plus a fully customizable mode:
| Preset | Threshold | Ratio | Attack | Release | Knee |
|---|---|---|---|---|---|
| Recommended | -24 dB | 8:1 | 10 ms | 300 ms | 15 dB |
| Dynamic Range | -18 dB | 4:1 | 20 ms | 200 ms | 10 dB |
| Vocal Enhancement | -12 dB | 3:1 | 15 ms | 150 ms | 5 dB |
| Smooth | -30 dB | 1.5:1 | 30 ms | 250 ms | 20 dB |
Recommended is the default. At -24 dB threshold with an 8:1 ratio, it catches loud peaks without flattening the sound. Dialogue becomes easier to follow, while action scenes still keep their impact.
If you want to fine-tune things yourself, Custom mode exposes all five parameters as sliders: threshold, ratio, attack, release, and knee.
How to Use It
The audio compressor is part of KoalaSync’s room interface. You can use it in a watch party, but you can also create a private room just for yourself.
- Open the KoalaSync popup
- Click "+ New Room" to create a private room
- Select your video tab
- Go to the Settings tab
- Click "Open" next to Audio Processing
- Toggle Audio Processing on
- Toggle Compressor on
- Choose a preset or customize the settings
That is it. The compressor runs locally in your browser. The room does not need anyone else in it.
Works Great for Solo Watching Too
KoalaSync is mainly known as a watch party extension, but the audio compressor is useful even when you are watching alone:
- YouTube videos with inconsistent volume
- movies with quiet dialogue and loud action scenes
- Jellyfin, Emby, or Plex playback in the browser
- late-night watching with headphones
- laptop speakers with limited volume range
- videos where you constantly need to adjust the volume
Where It Works
KoalaSync’s audio compressor is designed to work with browser-based video playback across standard HTML5 video players and many major streaming platforms, including YouTube, Vimeo, Netflix, Disney+, Prime Video, Plex, Emby, and Jellyfin.
In most cases, if a site plays video in your browser, KoalaSync can process the audio locally on your machine. That includes streaming platforms, self-hosted media servers, embedded videos, and many other websites with browser video playback.
Some edge cases can still exist. Certain websites may use unusual player setups, strict DRM implementations, embedded playback restrictions, or browser-specific limitations that prevent audio processing. When that happens, KoalaSync simply stays out of the way and leaves the audio unchanged.
Privacy and Licensing
Same as always:
- no account requirement
- no analytics or telemetry
- no audio upload or external processing
- no behavior profiling
- open source under MIT license
Everything runs locally. You can inspect the code, fork it, contribute, or self-host your own relay server.
The Interesting Bits (for Developers)
The DynamicsCompressorNode itself is straightforward Web Audio API — a few lines of code. The real work was making it feel smooth, reliable, and safe to toggle during playback.
Dry/wet crossfade. We do not just hard-switch the compressor on and off. That would create an audible pop or click. Instead, we route through a dry/wet signal path and fade between the original and compressed audio over 40 milliseconds using linearRampToValueAtTime. When the compressor turns on, the dry signal fades out while the compressed signal fades in. When it turns off, the process reverses smoothly.
Per-element audio chains. Each <video> element gets its own audio graph, cached in a WeakMap. When the element leaves the DOM, such as when you navigate to a different page, the browser can garbage-collect the associated chain automatically. This helps avoid stale nodes and unnecessary memory usage.
// Compressor setup as used in the Recommended preset
const ctx = new AudioContext();
const src = ctx.createMediaElementSource(videoElement);
const compressor = ctx.createDynamicsCompressor();
compressor.threshold.value = -24; // dB
compressor.ratio.value = 8; // :1
compressor.knee.value = 15; // dB
compressor.attack.value = 0.010; // seconds
compressor.release.value = 0.300; // seconds
// Dry/wet routing with crossfade
src.connect(dryGain);
dryGain.connect(ctx.destination); // dry path
src.connect(compressor);
compressor.connect(compGain);
compGain.connect(ctx.destination); // wet path
// Fade between them
dryGain.gain.linearRampToValueAtTime(0, ctx.currentTime + 0.04);
compGain.gain.linearRampToValueAtTime(1, ctx.currentTime + 0.04);
Lip sync is not a concern. The processing stays inside the browser's native audio pipeline and stays tied to the media element's playback timing.
Try KoalaSync 2.2.0
Available now with built-in browser audio compression, improved solo watching, and the same privacy-first watch party experience.