Privacy-first Β· Lightning-fast Β· Completely offline
Features β’ Quick Start β’ How It Works β’ Development
Crispy is a powerful desktop application that enhances your audio in real-time with AI-powered noise suppression, automatic transcription, and intelligent meeting recordingβall without sending your data to the cloud.
Built with Tauri v2 (Rust backend + React/TypeScript frontend), Crispy processes everything locally on your machine, ensuring your conversations remain private while delivering professional-quality audio.
- RNN Noise (nnnoiseless): real-time neural denoiser, 48 kHz, built-in model
- None / Test noise: passthrough or debug mode
- Adaptive volume control to maintain consistent levels
- Zero-latency monitoring for immediate feedback
- Routes clean audio to any application (Zoom, Discord, Teams, etc.)
- Automatic transcription of all your recordings
- Chat with AI about your transcriptions using OpenAI/Poe.com
- Model metadata trackingβalways know which model was used
- Chat history saved locally per recording
- Dual-source capture: Microphone + application audio (e.g., browser, Zoom)
- Stereo output: Mixed dual-mono for perfect playback
- Auto-resampling: Handles different sample rates (44.1kHz β 48kHz)
- One-click recording from system tray
- 100% offline processing - no internet required for noise suppression
- Local storage - recordings, transcriptions, and settings stay on your machine
- Optional cloud AI - only for chat features, with your explicit API keys
- System tray popup for quick controls
- Dark mode ready with a clean, modern interface
- Settings persistence across dev/release builds
- macOS 13.0+ (Ventura or later) for ScreenCaptureKit support
- Node.js 18+ and npm
- Rust (latest stable)
- Xcode Command Line Tools:
xcode-select --install
-
Clone the repository:
git clone https://github.com/yourusername/crispy.git cd crispy -
Install dependencies:
make install
-
Install BlackHole 2ch (recommended):
BlackHole is a virtual audio driver for routing processed audio to other apps.
# Download from: https://existential.audio/blackhole/ -
Run in development:
make dev
-
Build for production:
make build
The app bundle will be in
target/aarch64-apple-darwin/release/bundle/Note: If you get
invalid value '1' for '--ci'error, unset the CI variable:unset CI && make build
- Grant microphone permissions when prompted
- Grant screen recording permissions (required for app audio capture)
- Select your microphone in Settings β General
- Select BlackHole 2ch as output device (or any virtual audio device)
- Choose a noise suppression model in the footer (General screen): None, Test noise, or RNN Noise (48 kHz mic recommended)
- Optionally configure LLM in Settings β LLM Chat (for transcription chat)
βββββββββββββββ ββββββββββββββββ βββββββββββββββ ββββββββββββββββ
β Microphone β -> β Noise Model β -> β Monitor β -> β BlackHole β -> Apps
β (Physical) β β RNNoise/None β β + Record β β (Virtual) β (Zoom, etc.)
βββββββββββββββ ββββββββββββββββ βββββββββββββββ ββββββββββββββββ
β
v
βββββββββββββββ
β WAV File β
β + App Audioβ
βββββββββββββββ
Frontend
- React 18 + TypeScript
- Tailwind CSS v4 (modern design system)
- Tauri API for native integration
- Real-time event streaming
Backend (Rust)
- Audio: CPAL (cross-platform audio), Hound (WAV I/O), Rubato (resampling)
- Noise Suppression: nnnoiseless (RNNoise port, in
./rnnnoise), frame-based 48 kHz - Transcription: transcribe-rs + ONNX Runtime (Whisper, Parakeet, Moonshine)
- App Audio Capture: ScreenCaptureKit (macOS 12.3+)
- LLM Integration: async-openai SDK for chat streaming
- Persistence: JSON-based settings + metadata
macOS Integration
- System tray with webview popup
- Window positioning via
tauri-plugin-positioner - Native permissions (Microphone, Screen Recording)
See detailed installation instructions: INSTALL.md
Quick start:
- Download
Crispy.appand move to/Applications/ - Right-click on the icon β Open (not double-click!)
- Confirm opening in the dialog
This bypasses macOS Gatekeeper for unsigned apps. After the first launch, you can open normally.
- Start monitoring: Your mic is processed in real-time and routed to the output device
- Start recording: Click record in settings or use the system tray
- Stop recording: Audio is saved to
~/Documents/Crispy/Recordings/ - View transcription: Auto-generated for each recording (if model selected)
- Chat with AI: Ask questions about your transcription using LLM
To record both your mic and application audio (e.g., Zoom calls):
- Go to Settings β Recording β App Audio Capture
- Select the application (Chrome, Zoom, etc.)
- Start recordingβboth sources will be mixed in stereo
- Download a model: Settings β Transcription β Download models
- Activate a model: Select it from the dropdown
- Record: Transcription happens automatically after recording stops
- View results: Click any recording to see the transcription window
Configure in Settings β LLM Chat:
- Endpoint:
https://api.openai.com/v1(orhttps://api.poe.com/v1) - API Key: Your OpenAI/Poe API key
- Model:
gpt-4,claude-3-5-sonnet, etc.
Once configured, chat with AI about your transcriptions to summarize, translate, or extract insights.
crispy/
βββ src/ # React/TypeScript frontend
β βββ components/ # UI components
β βββ hooks/ # React hooks (settings, models)
β βββ main.tsx # Entry point
βββ src-tauri/ # Rust backend
β βββ src/
β β βββ main.rs # Tauri app setup, audio pipeline, NS/TS models
β β βββ recording.rs # Recording logic, ScreenCaptureKit
β β βββ commands/ # Tauri commands (models, ns_models, transcription, β¦)
β β βββ managers/ # Transcription + model managers
β βββ build.rs # Build script (Swift linking)
β βββ Cargo.toml # Rust dependencies
βββ Makefile # Build targets and commands
make help # Show all available commands
make dev # Run in development mode
make build # Build release binary
make clean # Clean build artifacts
make install # Install dependenciesEnable Rust logs:
RUST_LOG=debug make devCheck audio devices:
// In Rust backend
println!("Available devices: {:?}", devices);Contributions are welcome! Please feel free to submit issues or pull requests.
MIT License - see LICENSE for details