fix(settings): measured CPU and download figures for the noise-suppression models
CI / Build & Quality Checks (push) Skipped
CI / Secret scan (gitleaks) (push) Skipped
CI / Playwright smoke (e2e) (push) Skipped
CI / Build & Quality Checks (pull_request) Successful in 1m40s
CI / Trigger Desktop Build (pull_request) Skipped
CI / Docker image build & smoke test (pull_request) Skipped
CI / Secret scan (gitleaks) (pull_request) Successful in 6s
CI / Playwright smoke (e2e) (pull_request) Successful in 19m45s

The CPU column was guessed (DeepFilterNet "25-50%", DTLN "10-20%") with no
unit, so it read like Task Manager's whole-CPU figure and looked wildly off.
Measured with each model running exactly as Lotus Call runs it (real-time
speech, browser process CPU time from /proc minus a no-model baseline,
Ryzen 7 PRO 4750GE): DeepFilterNet ~30%, DTLN ~9%, RNNoise ~3%, Speex ~2%
of one core. Label it "one core" and explain the Task Manager relation.
DTLN's download was listed as ~4 MB but fetches ~20 MB (17 MB worklet with
the runtime inlined, plus 4 MB of models); DFN's ~18 MB is right (17.6 MB).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5
This commit is contained in:
Lotus CI
2026-10-29 21:35:20 -04:00
co-authored by Claude Opus 5.5
parent 43445db5cc
commit 1ebc42863e
2 changed files with 10 additions and 7 deletions
@@ -2037,7 +2037,7 @@ export function Calls() {
<Text size="L400">Model</Text>
<SettingTile
title="ML model"
description="Choose the machine learning model used for noise removal. Heavier models clean more aggressively at a higher CPU cost."
description="Choose the machine learning model used for noise removal. Heavier models clean more aggressively at a higher CPU cost. CPU figures are the share of one processor core during a call on a mid-range desktop; Task Manager shows that divided by your number of cores, and slower computers use more."
after={
<SettingsSelect<DenoiseModelId>
value={callDenoiseModel}
@@ -2064,7 +2064,7 @@ export function Calls() {
<Box direction="Row" gap="400" wrap="Wrap">
{(
[
{ label: 'CPU', value: selectedDenoiseModel.cpuUsage },
{ label: 'CPU (one core)', value: selectedDenoiseModel.cpuUsage },
{ label: 'Voice quality', value: selectedDenoiseModel.voiceQuality },
{ label: 'Transients', value: selectedDenoiseModel.transients },
{ label: 'Download', value: selectedDenoiseModel.binarySize },
+8 -5
View File
@@ -7,6 +7,9 @@
import { DenoiseModelId } from '../state/settings';
// CPU = share of ONE core while in a call, measured with each model running
// exactly as Lotus Call runs it (Ryzen 7 PRO 4750GE, Chromium); download = bytes
// actually fetched on first use. Re-measure when a model or its settings change.
export type DenoiseModel = {
id: DenoiseModelId;
name: string;
@@ -24,7 +27,7 @@ export const DENOISE_MODELS: DenoiseModel[] = [
name: 'DeepFilterNet 3 (beta)',
description:
'Studio-grade deep-learning model (48 kHz fullband, ONNX). Best quality; highest CPU and a larger one-time download.',
cpuUsage: '25-50%',
cpuUsage: '~30%',
binarySize: '~18 MB',
transients: 'Excellent',
voiceQuality: 'Very High',
@@ -34,8 +37,8 @@ export const DENOISE_MODELS: DenoiseModel[] = [
name: 'DTLN (beta)',
description:
'Dual-signal deep-learning model (16 kHz). Strong on transient noise; moderate CPU.',
cpuUsage: '10-20%',
binarySize: '~4 MB',
cpuUsage: '~9%',
binarySize: '~20 MB',
transients: 'Excellent',
voiceQuality: 'High',
},
@@ -44,7 +47,7 @@ export const DENOISE_MODELS: DenoiseModel[] = [
name: 'RNNoise',
description:
'Lightweight hybrid model (48 kHz). Very low CPU; good for steady noise like fans, but can sound processed at full strength.',
cpuUsage: '< 5%',
cpuUsage: '~3%',
binarySize: '< 1 MB',
transients: 'Good',
voiceQuality: 'Moderate',
@@ -54,7 +57,7 @@ export const DENOISE_MODELS: DenoiseModel[] = [
name: 'Speex (Legacy)',
description:
'Classic DSP noise suppressor. Minimal CPU, gentlest on voice; weakest suppression.',
cpuUsage: '< 2%',
cpuUsage: '~2%',
binarySize: '< 1 MB',
transients: 'Poor',
voiceQuality: 'Moderate',