Karpender is a Fedora/Linux desktop app for voice privacy. It reads a physical microphone through PipeWire, applies voice anonymization DSP, and exposes the result as a virtual microphone for apps such as Telegram, Discord, OBS, browsers, and Zoom.
physical mic -> Karpender DSP -> Karpender Privacy Voice Mic -> chat/recording app
- GTK4/libadwaita desktop UI.
- PipeWire input source selection.
- Virtual microphone output.
- Voice anonymization with pitch/timbre/prosody changes.
- Noise Cleanup as a soft expander, not a hard gate.
- Privacy Amount for stronger or lighter voice disguise.
- Flatten Intonation mode for reducing recognizable prosody.
- Monitor to Speakers mode for hearing the processed voice locally.
Use headphones when testing monitor mode to avoid feedback.
Runtime:
- Fedora or another PipeWire-based Linux desktop.
- PipeWire and WirePlumber running.
- GTK4 and libadwaita runtime libraries.
pw-dumpavailable inPATHfor input device discovery.
Development packages on Fedora:
sudo dnf install rust cargo gtk4-devel libadwaita-devel pipewire-devel clang pkgconf-pkg-config jqcargo runIn Karpender:
- Select the real microphone in
Input Device. - Adjust
Privacy Amount,Noise Cleanup, andFlatten Intonation. - Press
Start Processing. - In Telegram/Discord/browser, select
Karpender Privacy Voice Micas the microphone.
The AppImage setup lives in:
scripts/build-appimage.shpackaging/appimage/AppRundata/com.github.xierongchuan.karpender.desktopdata/com.github.xierongchuan.karpender.metainfo.xmldata/icons/com.github.xierongchuan.karpender.svg
Recommended tooling in PATH:
linuxdeploylinuxdeploy-plugin-gtk
Fallback:
appimagetool
Build:
scripts/build-appimage.shThis command only builds local artifacts in target/appimage and dist. It does not install Karpender into the system.
If neither linuxdeploy nor appimagetool is found in PATH, the script downloads a local portable appimagetool into target/appimage-tools and uses it from there.
Output:
dist/Karpender-<version>-<arch>.AppImage
If no AppImage builder can be found or downloaded, the script still prepares the AppDir at:
target/appimage/Karpender.AppDir
Then put appimagetool in PATH or at target/appimage-tools/appimagetool-<arch>.AppImage and rerun the script.
The Flatpak setup lives in:
scripts/build-flatpak.shscripts/generate-flatpak-cargo-sources.pypackaging/flatpak/com.github.xierongchuan.karpender.jsonpackaging/flatpak/cargo-sources.json
Required tooling:
flatpakflatpak-builder- Flathub configured for the user Flatpak installation.
scripts/build-flatpak.shadds the user remote automatically if it is missing.
Build a local bundle:
scripts/build-flatpak.shThe script regenerates packaging/flatpak/cargo-sources.json from Cargo.lock, builds against org.gnome.Platform//50 and the Rust/LLVM SDK extensions, writes a local OSTree repository under target/flatpak, and exports:
dist/Karpender-<version>.flatpak
Install the exported bundle locally:
flatpak install --user dist/Karpender-<version>.flatpak
flatpak run com.github.xierongchuan.karpenderThe manifest grants Wayland/X11 fallback, GPU, PulseAudio, and PipeWire socket access so Karpender can show the GTK UI, read microphone nodes, create the virtual microphone, and monitor processed audio.
cargo fmt --check
cargo check
cargo testList PipeWire nodes:
pw-dump --no-colorsCompact node view:
pw-dump --no-colors | jq -r '.[] | select(.type=="PipeWire:Interface:Node") | [.id, .info.props["media.class"], .info.props["node.name"], .info.props["node.description"], .info.state] | @tsv'Expected flow while running:
- real microphone node is selected by Karpender;
Karpender Privacy Voice Micappears as anAudio/Source;- Telegram/Discord/browser links to the virtual source.
Karpender aims to make voice recognition harder while keeping speech understandable. It is not a guarantee of anonymity against forensic voice analysis.