Skip to content

Repository files navigation

Rekk

A tiny macOS audio recorder that captures your microphone and the system audio at the same time, cancels the speaker → mic echo with WebRTC AEC, and transcribes the result locally with whisper.cpp. No cloud, no Python, no subscription.

Rekk

Rekk · setup & diagnostics

What it does

  • Mic + system audio in one WAV. ScreenCaptureKit taps the system output natively; no virtual audio driver, no BlackHole / Loopback dance.
  • Acoustic Echo Cancellation (WebRTC AudioProcessing). Record meetings on speakers without the doubled-voice effect.
  • Local transcription via whisper.cpp with Metal acceleration. Models stay on disk under ~/Library/Application Support/io.dbr.rekk/models/. Nothing leaves the machine.
  • Streaming segments: transcript lines appear as Whisper decodes them, not at the end.
  • Compact LCD-handheld UI that pins to a corner of your screen while you work.
  • Pause / resume, per-source mute (mic / system), language selector (ES / EN / Auto), re-transcribe in another language at any time, files browser with reveal in Finder.

Requirements

  • macOS 11+ (Apple Silicon recommended; Metal backend kicks in there).
  • About 600 MB free for the default small Whisper model (other sizes available from inside the app).
  • Microphone permission and Screen & System Audio Recording permission (the app walks you through them under setup).

Install

Download Rekk_<version>_aarch64.dmg from the Releases page, open it, drag Rekk.app to /Applications.

The binary is not notarized — first launch will need a right-click → Open → Open to dismiss Gatekeeper, or xattr -dr com.apple.quarantine /Applications/Rekk.app.

Build from source

# one-time toolchain (Homebrew)
brew install cmake meson ninja

# clone + run
git clone https://github.com/danibram/rekk
cd rekk
npm install
npm run tauri build     # → src-tauri/target/release/bundle/macos/Rekk.app
                        # → src-tauri/target/release/bundle/dmg/Rekk_*.dmg

The first build compiles whisper.cpp (with Metal) and webrtc-audio-processing from source — expect 2–4 minutes once, cached afterward.

For development hot-reload:

npm run tauri dev

Architecture

┌────────────────────────────────────────────────────────────┐
│                          React UI                          │
│  topbar · LCD strip · controls · drawer (files/tx/setup)   │
└────────────────────────┬───────────────────────────────────┘
                         │  Tauri IPC (invoke + event)
                         ▼
┌────────────────────────────────────────────────────────────┐
│                       Rust backend                         │
│                                                            │
│  CPAL ─┐   ScreenCaptureKit ─┐                             │
│        │                     │                             │
│        ▼                     ▼                             │
│   mic stream ───► WebRTC AEC ◄── system audio              │
│                       │                                    │
│                       ▼                                    │
│                  mixed WAV file ───► whisper.cpp (Metal)   │
│                                              │             │
│                                              ▼             │
│                                       .txt transcript      │
└────────────────────────────────────────────────────────────┘

Key crates: cpal, screencapturekit-rs, webrtc-audio-processing, whisper-rs, hound for WAV I/O, tauri v2 for the shell.

macOS permissions

On first record Rekk prompts for:

  • Microphone — captures your voice.
  • Screen & System Audio Recording — required by ScreenCaptureKit to tap the audio. Rekk never reads pixels; if you only want to grant the audio sub-permission, see below.

Why the full Screen Recording permission is required

Enabling Rekk only under System Audio Recording Only does not work today, and the app will fail to capture system audio if you do.

ScreenCaptureKit reaches system audio through SCShareableContent, which enumerates displays and windows — it is the very call that triggers the screen-recording prompt, and it needs the full grant. macOS 14.4's System Audio Recording Only sub-permission applies to the Core Audio Process Tap API (NSAudioCaptureUsageDescription), which Rekk does not use yet.

So: enable Rekk in the upper Screen & System Audio Recording list. Rekk still never reads pixels — it only ever asks ScreenCaptureKit for the audio samples — but macOS has no way to grant that narrower capability for this API.

Migrating to Core Audio process taps would make the audio-only grant sufficient and skip the screen-recording prompt entirely. Until then, the permission is mandatory rather than a convenience.

Phantom permissions after a rebuild

Every rebuild produces a binary with a new ad-hoc code signature, which macOS treats as a different app. The toggle in System Settings stays on but TCC denies access. Rekk's setup → reset & restart button runs tccutil reset for the bundle id and relaunches the process so macOS re-prompts cleanly.

Credits

License

MIT · © 2026 danibram

About

macOS audio recorder with mic + system audio capture, AEC and local Whisper transcription

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages