Sourdine: Meeting Transcription with 100% Local AI

An open source macOS app to transcribe your meetings without sending your data to the cloud

Sourdine: Meeting Transcription with 100% Local AI
Disponible en français

How many meetings do you have this week? And how many notes did you actually take? Between actively participating and taking detailed notes, you have to choose. This frustration led to Sourdine — with one major constraint: everything must stay on my machine.

The Problem: Cloud AI vs Privacy

Transcription solutions (Otter.ai, Fireflies, Teams/Meet transcriptions) share one thing in common: your conversations go through their servers. Problematic for:

  • Strategic business meetings
  • Confidential interviews
  • Medical or legal discussions
  • Anything that's none of Google, Microsoft, or a startup's business

Not to mention the monthly subscriptions piling up.

The Solution: All Local, Zero Compromise

Sourdine runs two AI models directly on your Mac:

ModelSizeRole
Parakeet TDT (NVIDIA)640 MBSpeech-to-text transcription
Mistral 7B4.4 GBSummaries, key points, contextual chat

No internet connection needed after initial download. Your data never leaves your machine.

How It Works

Smart Audio Capture

Sourdine captures two sources simultaneously:

Microphone (your voice)  →  ┐
                            ├→  Audio mixer  →  Transcription
System audio (Teams)     →  ┘

This dual capture uses ScreenCaptureKit (macOS 14.2+). I developed a native module in Rust with napi-rs to integrate it with Electron.

Transcription Pipeline

StepTechnologyFunction
1. Voice detectionSilero VADIdentifies speech vs silence/noise
2. TranscriptionParakeet TDT via sherpa-onnxConverts audio to text
3. AI notesMistral 7B via node-llama-cppGenerates summary, actions, key points

STT runs in a separate Node.js worker to avoid blocking the UI.

Note Generation

Mistral 7B analyzes the transcription to extract:

  • Summary of the discussion
  • Key points covered
  • Action items with assigned people
  • Title automatically generated

You can also ask questions: "What did Pierre say about the budget?"

All meetings are indexed via SQLite FTS5 (full-text search) and can be exported as Markdown or plain text.

Technical Architecture

┌──────────────────────────────────────────────────┐
│  Electron Main Process                           │
│  ├── NestJS Backend (dependency injection)      │
│  ├── stt-worker (sherpa-onnx, isolated process) │
│  ├── llm-worker (node-llama-cpp, isolated)      │
│  └── SQLite (local storage, FTS5 search)        │
└──────────────────────────────────────────────────┘
                       │ IPC
┌──────────────────────┴───────────────────────────┐
│  Renderer Process (Angular 21)                   │
└──────────────────────────────────────────────────┘

Tech Stack

LayerTechnologies
DesktopElectron 34
FrontendAngular 21, Signals, SCSS
BackendNestJS 11, RxJS
DatabaseSQLite + FTS5 (full-text search)
AudioRust/napi-rs + ScreenCaptureKit
BuildNx monorepo, Vite, Electron Forge

Why These Choices?

  • Electron — Native system access (audio, files), TypeScript ecosystem
  • NestJS in Electron — Modular architecture, dependency injection
  • Separate workers — AI model isolation (crash-safe)
  • Rust for audio — Native performance, ScreenCaptureKit integration

Performance on Apple Silicon

MetricMacBook Pro M2
TranscriptionReal-time
LLM generation~20 tokens/s
Peak RAM~4 GB
Active CPU15-30%

Apple Silicon chips with their Neural Engine are perfectly suited for this.

What I Learned

1. Audio Is Complicated

  • Resampling (48kHz → 16kHz)
  • Format conversion (Float32 → Int16 PCM)
  • Multi-source mixing
  • Buffer and latency management

2. Local AI Has Constraints

  • 16 GB RAM minimum
  • Initial loading takes several seconds
  • Quality depends on quantization (Q4_K_M = good compromise)

3. Electron Is Not Dead

Despite criticism about memory usage, still the best choice for cross-platform desktop with native access.

Installation

Requirements

ComponentMinimumRecommended
macOS14.2 (Sonoma)15+ (Sequoia)
ProcessorApple Silicon (M1)M2/M3/M4
RAM16 GB32 GB
Storage10 GB20 GB

Download the DMG

Download Sourdine v0.2.1-beta

  1. Open the DMG and drag Sourdine to Applications
  2. Run this command (app is not signed):
    xattr -cr /Applications/Sourdine.app
  3. Launch Sourdine — The wizard will download AI models (~5 GB)
  4. Grant Microphone and Screen Recording permissions on first launch

Beta: This version is under active development. Feedback is welcome via GitHub Issues.

Conclusion

Sourdine was born from a personal need: keeping control over my data while benefiting from AI. The project is open source and contributions are welcome.

github.com/Lingelo/Sourdine


If you share this concern for privacy, I hope this project will be useful to you.