[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-93192":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":15,"stars30d":16,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":17,"rankGlobal":10,"rankLanguage":10,"license":18,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":21,"hasPages":19,"topics":22,"createdAt":10,"pushedAt":10,"updatedAt":23,"readmeContent":24,"aiSummary":25,"trendingCount":15,"starSnapshotCount":15,"syncStatus":13,"lastSyncTime":26,"discoverSource":27},93192,"HushMic","Fovty\u002FHushMic","Fovty","Real-time microphone noise suppression for Linux as a system-wide virtual mic (DPDFNet + PipeWire).","",null,"Rust",72,2,1,0,16,43.03,"Other",false,"main",true,[],"2026-07-22 04:02:08","\u003Ch1 align=\"center\">\n  \u003Cimg src=\"docs\u002Fimg\u002Fhushmic-logo.png\" alt=\"HushMic\" width=\"120\">\u003Cbr>\n  HushMic\n\u003C\u002Fh1>\n\n\u003Cp align=\"center\">\n  \u003Cb>Real-time microphone noise suppression for Linux, as a system-wide virtual mic.\u003C\u002Fb>\u003Cbr>\n  Open source, runs on the CPU, your audio never leaves the machine.\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FFovty\u002Fhushmic\u002Freleases\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002FFovty\u002Fhushmic?sort=semver\" alt=\"Release\">\u003C\u002Fa>\n  \u003Ca href=\"#license\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT%20OR%20Apache--2.0-blue\" alt=\"License\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FFovty\u002Fhushmic\u002Factions\u002Fworkflows\u002Frelease.yml\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002FFovty\u002Fhushmic\u002Factions\u002Fworkflows\u002Frelease.yml\u002Fbadge.svg\" alt=\"Build\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fko-fi.com\u002Ffovty\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FKo--fi-support-ff5e5b?logo=ko-fi&logoColor=white\" alt=\"Support on Ko-fi\">\u003C\u002Fa>\n\u003C\u002Fp>\n\nHushMic creates a virtual microphone that strips out keyboard clatter, fans, and background chatter in real time. Select **\"HushMic\"** as your input in any app — Discord, TeamSpeak, browsers, OBS, games — and that's it. No EasyEffects graphs to wire up, no terminal, no `setcap`.\n\n## Demo\n\nEach clip plays the **noisy input**, then the same audio **cleaned by HushMic** — a neutral public-domain voice over real background noise.\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd align=\"center\">\u003Cb>Keyboard\u003C\u002Fb>\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Cb>Fan \u002F AC hum\u003C\u002Fb>\u003C\u002Ftd>\n\u003Ctd align=\"center\">\u003Cb>Café chatter\u003C\u002Fb>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cvideo src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F9cc7abe4-26fc-440f-88da-b86ef33df142\" controls width=\"280\">\u003C\u002Fvideo>\u003C\u002Ftd>\n\u003Ctd>\u003Cvideo src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fd4b396a7-d980-4e0d-bac2-2a119debd768\" controls width=\"280\">\u003C\u002Fvideo>\u003C\u002Ftd>\n\u003Ctd>\u003Cvideo src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Ff4cd4504-d49a-4a46-95c2-01e56cd2d268\" controls width=\"280\">\u003C\u002Fvideo>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\nBackground noise drops ~25–30 dB in the speech pauses while the voice is preserved; demo-audio credits are in [Credits](#credits).\n\n## Why\n\nI wanted Krisp-level noise suppression on Linux for TeamSpeak, and there wasn't a maintained, packaged option that _just worked_ as a virtual mic. The model quality exists in the open-source world — it just wasn't wrapped into something you install and toggle on.\n\nSo I benchmarked the realistic contenders on my own recordings, picked the one that scored best (it actually edged out Krisp), and built the missing pieces around it: a real-time plugin and a tray app that manages everything.\n\n### How it compares\n\nThe three demo clips above, run through each model and scored with **DNSMOS P.835** (a reference-free 1–5 MOS estimator). Indicative, not a formal benchmark — but the source audio is public ([Credits](#credits)), so it's easy to reproduce, and it's why HushMic uses DPDFNet:\n\n| Model                             | Overall (OVRL) | Background (BAK) | Speech (SIG) |\n| --------------------------------- | :------------: | :--------------: | :----------: |\n| **DPDFNet** — _HushMic's model_   |    **3.20**    |     **4.15**     |   **3.43**   |\n| DeepFilterNet 3                   |      2.97      |       3.98       |     3.26     |\n| Krisp _(v9.9.3)_                  |      2.57      |       3.96       |     2.81     |\n| khip _(older Krisp model port)_   |      2.43      |       3.78       |     2.71     |\n| GTCRN                             |      2.42      |       3.71       |     2.76     |\n| RNNoise _(EasyEffects's default)_ |      2.01      |       3.93       |     2.60     |\n| _Raw (unprocessed input)_         |    _1.49_      |     _1.48_       |    _2.01_    |\n\n_(Averaged over the three clips; higher is better, 1–5.)_ DPDFNet comes out on top on every axis — overall, background-noise removal, and voice preservation — clearly ahead of the field, and it's the only model that holds up across all three clips where the others fall off on the noisier café mix. ([DPDFNet](https:\u002F\u002Fgithub.com\u002Fceva-ip\u002FDPDFNet) is a DeepFilterNet-lineage model from Ceva; [arXiv:2512.16420](https:\u002F\u002Farxiv.org\u002Fabs\u002F2512.16420).)\n\n## Features\n\n- One virtual microphone, usable by any PipeWire- or PulseAudio-compatible app.\n- A tray menu for everything: on\u002Foff, which mic to clean, model (quality vs. light), suppression strength, set-as-default, start-on-login.\n- **Test my mic**: a live A\u002FB window — your raw microphone and the cleaned output side by side as scrolling spectrograms with level meters, plus a 10-second sample you can record and replay as _Play raw_ \u002F _Play filtered_, with honest before\u002Fafter numbers. No call needed to hear (and see) the difference. On setups without a display for it, an audio-only record-and-playback test runs instead.\n- Failures show up as desktop notifications — a broken install or a virtual mic that will not come back says so on screen, not just in a terminal you never see.\n- The audio runs in a dedicated PipeWire process, so no elevated privileges (`setcap`) are needed.\n- Re-creates itself automatically after a PipeWire restart or a suspend\u002Fresume, and puts your previous default mic back when you quit (the virtual mic is tied to the app: quitting removes it cleanly).\n- ~0.3× real-time on a desktop CPU; no GPU, no network.\n\n## Requirements\n\n- Linux with **PipeWire** (+ `pipewire-pulse` for PulseAudio apps) and WirePlumber.\n- A system tray (StatusNotifierItem): native on KDE Plasma and most desktops. On **GNOME**, install the _AppIndicator and KStatusNotifierItem Support_ extension.\n- x86-64.\n\n## Install\n\n**Any distro** (install script, system-wide):\n\n```bash\ncurl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002FFovty\u002Fhushmic\u002Fmain\u002Fscripts\u002Finstall.sh | sudo sh\n```\n\n**Debian \u002F Ubuntu** (`.deb`):\n\n```bash\ncurl -fsSLO https:\u002F\u002Fgithub.com\u002FFovty\u002Fhushmic\u002Freleases\u002Flatest\u002Fdownload\u002Fhushmic_0.2.0-1_amd64.deb\nsudo apt install .\u002Fhushmic_0.2.0-1_amd64.deb\n```\n\n> On stock **Ubuntu 22.04** apt refuses with a `pipewire-media-session`\u002F`wireplumber`\n> conflict (22.04 still ships the deprecated session manager). Install with\n> `sudo apt install .\u002Fhushmic_0.2.0-1_amd64.deb wireplumber pipewire-media-session-`\n> (the trailing `-` swaps it out), then log out and back in.\n\n**AppImage** (any distro, no install):\n\n```bash\ncurl -fsSLO https:\u002F\u002Fgithub.com\u002FFovty\u002Fhushmic\u002Freleases\u002Flatest\u002Fdownload\u002Fhushmic-x86_64.AppImage\nchmod +x hushmic-x86_64.AppImage\n.\u002Fhushmic-x86_64.AppImage --tray\n```\n\n## Usage\n\nLaunch HushMic from your desktop's application menu, or from a terminal:\n\n```bash\nhushmic --tray\n```\n\nA tray icon appears and noise suppression is already on. Pick your **Microphone** and choose **\"HushMic\"** as the input in your app — or flip **Set as default microphone** and everything that respects the system default uses it automatically. The same menu has the on\u002Foff toggle (**Enable noise suppression**), the model picker (`dpdfnet8` = quality, `dpdfnet2` = lighter), suppression strength, a start-on-login toggle, and **About HushMic** (version, license, links; `hushmic --version` works in a terminal too). **Test my mic** opens a live A\u002FB window: raw microphone and cleaned output side by side — spectrograms and level meters running live — plus a 10-second sample you can record and replay as _Play raw_ \u002F _Play filtered_ with measured before\u002Fafter numbers. The tray icon doubles as a status light: cyan while active, struck-through gray when suppression is off, a warning badge on errors.\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fimg\u002Fhushmic-ab-window.png\" alt=\"Live A\u002FB mic test — raw microphone vs. HushMic output\" width=\"720\">\n\u003C\u002Fp>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>More screenshots\u003C\u002Fb> — microphone picker, model picker, suppression strength\u003C\u002Fsummary>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fimg\u002Fhushmic-menu-microphone.png\" alt=\"Microphone picker\" width=\"360\">\n  \u003Cimg src=\"docs\u002Fimg\u002Fhushmic-menu-model.png\" alt=\"Model picker\" width=\"360\">\n  \u003Cimg src=\"docs\u002Fimg\u002Fhushmic-menu-suppression.png\" alt=\"Suppression strength\" width=\"310\">\n\u003C\u002Fp>\n\n\u003C\u002Fdetails>\n\n## Configuration\n\nState lives in `~\u002F.config\u002Fhushmic\u002Fconfig.toml` (most of it is in the tray menu):\n\n```toml\nenabled     = true\nmic         = \"alsa_input.usb-RODE...\"   # source node name; omit for system default\nmodel       = \"dpdfnet8_48khz_hr\"        # or \"dpdfnet2_48khz_hr\" (lighter)\nattn_limit  = 100.0                        # suppression cap in dB, 0-100 (higher = stronger)\nset_default = false                        # make hushmic the system default input\nautostart   = false                        # launch on login\n```\n\n## FAQ\n\n**Does my audio go anywhere?** No. Everything runs locally on the CPU; nothing is uploaded.\n\n**How much latency does it add?** About 20 ms of processing (two 10 ms hops: the causal STFT overlap-add plus one hop of output buffering), plus PipeWire's normal buffering. Fine for calls, conferences, and gaming.\n\n**How much CPU?** Roughly a third of one core in real time (RTF ~0.3) for the quality model; switch to `dpdfnet2` in the tray if you want it lighter.\n\n**The tray icon doesn't show up (GNOME).** GNOME doesn't implement the tray spec natively — install the _AppIndicator and KStatusNotifierItem Support_ extension. KDE and most other desktops work out of the box.\n\n**Is it actually doing anything?** Click **Test my mic** in the tray: a window shows your raw microphone and the cleaned output live, side by side; record a 10-second sample and replay either take back-to-back. (Headless or no GL? An audio-only version records both and plays them back instead.)\n\n**Does it survive sleep \u002F a PipeWire restart?** Yes — a watchdog re-creates the virtual mic automatically. If it ever can't (or an install is broken), you get a desktop notification instead of silence.\n\n**TeamSpeak \u002F Discord don't see it?** Make sure `pipewire-pulse` is running; HushMic exposes the mic through it so PulseAudio\u002FALSA-compat apps can pick it.\n\n**Recording still sounds noisy \u002F unprocessed?** A few apps that use the **Qt Multimedia** backend (some KDE recorders, etc.) capture the hardware device directly and ignore the selected virtual mic. Switch the app to its **PulseAudio\u002FPipeWire** backend, or enable _Set as default microphone_ in the tray so default-following apps pick HushMic.\n\n## Alternatives\n\nIf HushMic isn't your thing, these are the other good Linux options:\n\n- **[NoiseTorch-ng](https:\u002F\u002Fgithub.com\u002Fnoisetorch\u002FNoiseTorch)** — popular, RNNoise-based virtual mic. Simpler model; needs `setcap`.\n- **[EasyEffects](https:\u002F\u002Fgithub.com\u002Fwwmm\u002Feasyeffects)** — a full PipeWire effects suite (includes RNNoise denoise). More to configure.\n- **[noise-suppression-for-voice](https:\u002F\u002Fgithub.com\u002Fwerman\u002Fnoise-suppression-for-voice)** — RNNoise LADSPA\u002FVST plugin; manual wiring.\n- **[DeepFilterNet](https:\u002F\u002Fgithub.com\u002FRikorose\u002FDeepFilterNet)** — the model lineage HushMic builds on; ships its own LADSPA plugin you can wire up by hand.\n\n## Build from source\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FFovty\u002Fhushmic\ncd hushmic\n.\u002Fscripts\u002Fsetup-assets.sh        # fetch the DPDFNet models + ONNX Runtime\ncargo build --release\n```\n\nProduces `target\u002Frelease\u002Fhushmic` (tray app) and `target\u002Frelease\u002Flibdpdfnet_ladspa.so` (the LADSPA plugin). See `scripts\u002Finstall.sh` for the install layout and `crates\u002Fdpdfnet-ladspa\u002Fexamples\u002Frun-filter-chain.md` for loading the plugin by hand.\n\n## How it works\n\nTwo parts:\n\n1. **`dpdfnet-ladspa`** — a LADSPA plugin (Rust) that runs DPDFNet's ONNX model in real time, hop-by-hop, at 48 kHz mono, via [`ort`](https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort) (ONNX Runtime).\n2. **`hushmic`** — a tray app that's a _thin controller_: it generates a PipeWire `module-filter-chain` config and runs it as a managed child, exposing the plugin as a virtual capture source. PipeWire owns the real-time scheduling, which is why no `setcap` is needed; the mic's lifetime is tied to the app, and quitting tears it down cleanly (restoring your previous default input).\n\n## Support\n\nHushMic is free, open source, and makes zero network calls — no ads, no telemetry, no accounts. If it saved you a Krisp subscription, a coffee on **[Ko-fi](https:\u002F\u002Fko-fi.com\u002Ffovty)** is genuinely appreciated and helps keep it maintained. Starring the repo helps too.\n\n## License\n\nDual-licensed under either **MIT** ([LICENSE-MIT](LICENSE-MIT)) or **Apache-2.0** ([LICENSE-APACHE](LICENSE-APACHE)), at your option.\n\n## Credits\n\n- **[DPDFNet](https:\u002F\u002Fgithub.com\u002Fceva-ip\u002FDPDFNet)** (Ceva, Apache-2.0; [arXiv:2512.16420](https:\u002F\u002Farxiv.org\u002Fabs\u002F2512.16420)) — the speech-enhancement model.\n- **[DeepFilterNet](https:\u002F\u002Fgithub.com\u002FRikorose\u002FDeepFilterNet)** — the LADSPA real-time-inference architecture this plugin mirrors.\n- Built with [PipeWire](https:\u002F\u002Fpipewire.org), [ort](https:\u002F\u002Fgithub.com\u002Fpykeio\u002Fort), [rustfft](https:\u002F\u002Fgithub.com\u002Fejmahler\u002FRustFFT), and [ksni](https:\u002F\u002Fgithub.com\u002Fiovxw\u002Fksni).\n\n**Demo audio:** voice — _\"After Love\"_ by Sara Teasdale, read by a LibriVox volunteer (_Short Poetry Collection 266_ via [LibriVox](https:\u002F\u002Farchive.org\u002Fdetails\u002Fspc266_2508_librivox), public domain); keyboard — [_Typing on Keychron V1 Ultra_](\u003Chttps:\u002F\u002Fcommons.wikimedia.org\u002Fwiki\u002FFile:Typing_on_Keychron_V1_Ultra_(Red_Linear_Switch).wav>) by C40115 (CC BY 4.0); fan\u002FAC hum — [_Air conditioner hum_](\u003Chttps:\u002F\u002Fcommons.wikimedia.org\u002Fwiki\u002FFile:Air_conditioner_hum_(Gravity_Sound).wav>) by [Gravity Sound](https:\u002F\u002Fwww.gravitysound.studio\u002F) (CC BY 4.0); café — [_Restaurant ambience_](https:\u002F\u002Fcommons.wikimedia.org\u002Fwiki\u002FFile:Restaurant_ambience.ogg) (public domain). Full provenance: [docs\u002Fdemo\u002FASSETS.md](docs\u002Fdemo\u002FASSETS.md).\n","HushMic 是一个面向 Linux 系统的实时麦克风降噪工具，通过 PipeWire 创建系统级虚拟麦克风设备，集成 DPDFNet 模型实现 CPU 端纯本地、低延迟的噪声抑制。核心功能包括对键盘敲击、风扇噪音、环境人声等非语音干扰的实时衰减（约 25–30 dB），同时保持语音清晰度；无需配置音频图或命令行操作，开箱即用。适用于远程会议（如 Discord、Teams）、直播（OBS）、语音通话及游戏语音等对输入音频质量有要求的桌面场景。","2026-07-12 02:30:09","CREATED_QUERY"]