Skip to content

Denoise

Prov1.2.0

Remove background noise from audio

Denoise is a Pro app

It needs a free KimtOS account and a Pro subscription. Everything still runs on your device — Pro unlocks the app, it does not send your data anywhere. Install it without Pro and the app opens to an upgrade wall. See what Pro includes

Overview ​

Denoise removes background noise from a recording and hands you back a clean version, side by side with the original. Upload or record some audio, click Remove noise, and a moment later you have a crisp WAV with the hiss, hum, and chatter stripped out. It is part of the kimtos new-tab app suite.

The cleanup is done by DeepFilterNet3, a speech-enhancement model that runs entirely in your browser. Your audio is never uploaded — it is decoded, processed, and re-encoded right on the device.

Highlights ​

  • Two ways in — drag-and-drop or click to upload an audio file, or record from your microphone, your system audio, or both, with a live timer.
  • One-click denoise — press Remove noise and watch a progress bar as the model works through the clip.
  • A/B player — the result screen shows a Cleaned player and an Original player so you can compare them back to back.
  • Local history — every run is saved to a sidebar (original and cleaned audio), so you can reopen, replay, or re-download past clips. The most recent 30 are kept.
  • Download — save any cleaned clip as a 16-bit WAV.
  • Multi-select cleanup — drag across clips (or tap Select) to delete several at once, with one-tap undo.
  • Hand-off to Voice to Text — if the Voice to Text app is installed, you can send a cleaned clip (or the raw input) straight over for transcription.

Privacy model ​

Denoise is fully on-device. There is no backend, no account, and no upload:

  • The DeepFilterNet3 model runs locally in your browser via WebAssembly (onnxruntime-web). The model file (~16 MB) downloads once from KimtOS's own model host (kimtos.com/models), is cached in the browser's Cache Storage, and works offline after that.
  • Your audio is decoded and denoised in memory and never leaves the machine.
  • Each run — the original clip, the cleaned WAV, and a little metadata — is stored as blobs and records in your browser's IndexedDB, and is included in the suite's local Export / Import backup.

Because nothing is sent to a server, there are no analytics and no third-party calls beyond that one-time model download.

Getting Started ​

Open Denoise from the dock. It starts on the input screen, ready for a clip. The sidebar on the left holds your past results — empty until your first run.

1. Add some audio ​

You can either upload or record:

  • Upload — drag an audio file onto the drop zone, or click to pick one. Common formats work (mp3, wav, m4a, ogg, flac, opus, and more).
  • Record — click the mic button and speak; a live timer shows the length. Stop when you're done. Two independent switches sit next to the button, Mic and System: record either, or both at once. System audio alone never asks for your microphone, so you can capture a call playing in another window even if your mic is blocked or missing. During a recording the switches mute and unmute each source instead, so you can drop one without ending the take. The same two switches live in Settings ▸ Apps.

The chosen clip appears in a small player card so you can check it before processing.

If the audio source goes away while you are recording — you end the screen share, or another app takes the microphone — the recording stops there and tells you why, keeping everything captured up to that point.

2. Remove the noise ​

Click Remove noise. On the first ever run the model downloads once (~16 MB) — the progress bar notes this, and it's cached for offline use afterwards. Then you'll see:

  1. Decoding audio — the clip is converted to mono 48 kHz.
  2. Removing noise — DeepFilterNet3 processes the audio frame by frame, in your browser.
  3. Finishing — the clean audio is encoded to a WAV.

When it's done, the result opens automatically and is saved to history.

3. Compare with the A/B player ​

The result screen shows two players:

  • Cleaned — the denoised audio.
  • Original — the clip you started with.

Play them back to back to judge the difference.

4. Download ​

Click Download cleaned WAV to save the result to your computer. You can also download any past clip from its sidebar menu (Download cleaned).

5. The history sidebar ​

Every run is kept in the left sidebar (newest first, up to 30 clips):

  • Open — click a clip to reopen its A/B player and download button.
  • Right-click a clip for a menu: Open, Download cleaned, and (if available) Extract transcript with Voice to Text.
  • Delete several — tap Select, tick the clips, then Delete (N) — or just drag across them. A toast lets you undo for a few seconds.

Hand-off to Voice to Text ​

If the Voice to Text app is installed, Denoise can pass audio to it:

  • From the result screen or a clip's menu — Extract transcript with Voice to Text sends the cleaned clip over for transcription. The button follows the job and shows Transcribing…, then Done ✓.
  • From the input screen — Extract transcript with Voice to Text forwards the current clip as-is (without denoising first), in case the recording is already clean enough.

Denoise also receives hand-offs: a clip sent from another app (e.g. Voice to Text) arrives pre-loaded on the input screen, ready for you to denoise.

Architecture ​

Denoise follows the suite convention: a small UI descriptor plus a self-contained model engine, with all clips stored on-device. The heavy lifting — running the model — happens entirely in the browser via WebAssembly. The app code lives in extension/src/apps/denoise/.

Modules ​

FileRole
apps/denoise/index.tsThe app descriptor and UI — input screen, progress, the A/B result player, the history sidebar, downloads, and Voice to Text hand-off.
lib/engines/denoise.tsThe model engine — fetches/caches the ONNX model, decodes audio, runs DeepFilterNet3 on onnxruntime-web (WASM), and encodes the cleaned WAV.
components/audioInput.tsReusable upload / record input with a live timer and clip preview.
components/audioPlayer.tsThe compact audio player used for the Cleaned and Original tracks.
components/historySidebar.tsThe titled history list — open, right-click menu, multi-select, and delete with undo.
components/progressBar.tsThe download / processing progress bar.
lib/dataStore.tsOn-device storage — records and binary blobs in IndexedDB.
lib/appHandoff.tsThe in-memory baton for passing a clip to another app (e.g. Voice to Text).

Pipeline ​

The UI never runs the model itself: it calls denoiseAudio(blob) in engines/denoise.ts, which owns the whole audio path. The result is saved through the shared data store and shown in the sidebar.

How the engine works ​

engines/denoise.ts carries the model I/O contract end to end:

  • Model fetch & cache — the ONNX file is requested from Cache Storage first; on a miss it downloads once (with byte progress) from KimtOS's model host (cdn.kimtos.com/models, via MODELS_URL in lib/cdn.ts) and is cached under kimtos-models, so later runs are instant and offline.
  • Session — onnxruntime-web is loaded and run single-threaded with the WASM execution provider. In production the .wasm is self-hosted (the extension's CSP blocks CDNs).
  • Decode — any browser-supported audio is decoded to mono 48 kHz Float32 via an AudioContext (which resamples and down-mixes for us).
  • Inference — the model is an end-to-end graph (PCM in → clean PCM out, with all the STFT / ERB / deep-filter DSP baked in). It runs frame by frame in 10 ms hops (480 samples), carrying a recurrent state vector between frames. Progress is reported periodically.
  • Encode — the cleaned samples are written to a minimal 16-bit PCM WAV blob.

DeepFilterNet3 (MIT / Apache-2.0) is exported to a single ONNX graph via torchDF.

Storage ​

History lives under the history:denoise collection. Each run saves:

  • the original clip and the cleaned WAV as separate blobs, and
  • a record with { name, at, origKey, cleanKey, from, srcId }.

from and srcId track a clip's provenance — so a clip that came from Voice to Text isn't offered straight back, and re-runs of the same source can be detected. History is capped at the most recent 30 clips; older runs (and their blobs) are pruned automatically. Deleting a clip removes its record and both blobs, and the app's Clear data wipes the whole collection and its blobs.

Changelog ​

1.2.0 — 2026-08-17

  • Mic and System audio are two independent switches now, not one either/or choice: record either, or both at once.
  • System audio on its own never asks for your microphone, so you can clean up a call playing in another window even when your mic is blocked or missing.
  • A microphone the browser or your operating system is blocking now says so, and names the setting to change, instead of the recording quietly failing.
  • Either source can be muted and unmuted during a recording without ending it.

1.1.0 — 2026-07-27

  • Give the extension a session model, and run the apps in one tab

1.0.1 — 2026-07-22

  • Recording now stops with a clear message when the microphone or screen share ends, instead of quietly saving a file with no sound
  • Switching panes or closing the window releases the microphone