Private, on-device meeting transcription and dictation for macOS. Local STT, summaries and action items, full exports, MCP server for AI assistants. No cloud, no API keys.
See the codePrivate speech-to-text for macOS that never leaves your Mac.
Dictate into any app, transcribe meetings that tell your voice from everyone else's, and get
on-device summaries with decisions and action items. No cloud, no accounts, no API keys.
Download · Meetings · Dictation · Requirements · Speech models · Build from source
System-audio capture separates Me from Them in the live transcript, with no virtual audio device to install. The recording looks after itself: it offers to start when a calendar meeting begins, notices when the meeting seems over and stops on its own after warning you, closes cleanly when the Mac sleeps and offers to resume on wake, and recovers or salvages the session if the engine stalls or the microphone disappears.
Soufflé is not a window you type into. Press the shortcut and a small pill appears above whatever you are working in; when you stop, the text lands in the field your cursor was already in. Chat, mail, an editor, a terminal: the pill does not care which, and it is excluded from screen capture, so it never turns up in the meeting you are in.
With the default model the transcript streams in, punctuated and capitalised, instead of appearing all at once when you stop. French and English on the same model, with no language to switch.
Meetings and dictations land on one timeline, with today's calendar above it and full-text search across every word you have ever recorded.
Export any meeting as Markdown, JSON, or SRT/VTT subtitles, or the whole archive as a plain folder of Markdown and JSON.
MCP server: the bundled souffle-mcp sidecar lets Claude Desktop, Claude Code or any MCP client search and read your transcripts. Read-only, fully local, works even when the app is closed. Setup snippets live in Settings > System > Data.
Headless CLI: souffle --transcribe-file audio.wav --json transcribes a file without launching the app, and --repeat N doubles as a benchmark harness.
The souffle binary ships inside the app bundle and is not added to your PATH, so it is not a global command. Invoke it by full path, or symlink it once:
# Run directly
"/Applications/Soufflé.app/Contents/MacOS/souffle" --list-engines
# Or expose it as a `souffle` command
ln -s "/Applications/Soufflé.app/Contents/MacOS/souffle" /usr/local/bin/souffle
All models run locally and are downloaded on first use from HuggingFace:
The two Kyutai models are the streaming ones: text appears while you are still talking. The other two transcribe the whole recording once you stop, which suits a meeting you read afterwards but changes how dictation feels.
Soufflé asks for these as you use the features that need them, never up front:
| Permission | Why | Needed for |
|---|---|---|
| Microphone | Records your voice to transcribe it | Everything |
| System Audio Recording | Captures what the other participants say, without a virtual audio device | Meetings (macOS 14.4+) |
| Accessibility | Pastes into the app you were using, reads back your corrections when "learn from edits" is on, and installs the native event tap for single-key shortcuts (Fn, lone modifier, F5–F12) | Auto-paste, dictation polish, single-key shortcuts |
| Calendar | Reads today's events to list them and offer to start recording | Calendar integration (optional) |
Settings > System > Permissions shows the current state of each and links straight to the matching System Settings pane.
The privacy claim above is worth checking rather than believing, so here is every outbound connection the app makes:
http://localhost:11434 by default, if you enable summaries with Ollama. It is your machine unless you point it elsewhere.Your audio, transcripts, notes and summaries are never sent anywhere. They live in a local SQLite database, and Settings > System > Data exports or deletes the lot.
Open source and actively developed. Every release is signed and notarized, and the engineering is covered by a large test suite. Macs differ enormously in audio hardware and routing, so if something does not behave on yours, a report is genuinely useful.
The fastest useful bug report is Settings > System > Diagnostics, which copies the app version, the current pipeline state and the log settings and paths, plus a live tail of the log. Paste that into a new issue with your macOS version, your Mac model and what you were doing. None of it contains transcript text, though the paths do include your user name.
Install with Homebrew:
brew install --cask damione1/tap/souffle
Or grab a prebuilt installer from the Releases page: a .dmg for Apple Silicon Macs. See Requirements for the macOS versions.
Requires an Apple Silicon Mac, Rust, Node.js 18+, and cmake (brew install cmake).
npm install
npm run tauri dev
Debug builds are Soufflé Nightly (com.souffle.desktop.nightly) so they sit next to the installed app with their own TCC rows. After a code change:
make nightly
Copyright (c) 2026 Damien Goehrig.
Released under the GNU General Public License v3.0 or later (GPL-3.0-or-later). You are free to use, study, modify, and redistribute this software, provided that derivative works are also published under the same license. See LICENSE.md for the full text.
364 commits
3 commits
Rust
61.8%
TypeScript
24.0%
Svelte
7.9%
CSS
2.1%
Swift
1.2%
Nunjucks
1.2%
JavaScript
1.0%
Private, on-device meeting transcription and dictation for macOS. Local STT, summaries and action items, full exports, MCP server for AI assistants. No cloud, no API keys.
See the codePrivate speech-to-text for macOS that never leaves your Mac.
Dictate into any app, transcribe meetings that tell your voice from everyone else's, and get
on-device summaries with decisions and action items. No cloud, no accounts, no API keys.
Download · Meetings · Dictation · Requirements · Speech models · Build from source
System-audio capture separates Me from Them in the live transcript, with no virtual audio device to install. The recording looks after itself: it offers to start when a calendar meeting begins, notices when the meeting seems over and stops on its own after warning you, closes cleanly when the Mac sleeps and offers to resume on wake, and recovers or salvages the session if the engine stalls or the microphone disappears.
Soufflé is not a window you type into. Press the shortcut and a small pill appears above whatever you are working in; when you stop, the text lands in the field your cursor was already in. Chat, mail, an editor, a terminal: the pill does not care which, and it is excluded from screen capture, so it never turns up in the meeting you are in.
With the default model the transcript streams in, punctuated and capitalised, instead of appearing all at once when you stop. French and English on the same model, with no language to switch.
Meetings and dictations land on one timeline, with today's calendar above it and full-text search across every word you have ever recorded.
Export any meeting as Markdown, JSON, or SRT/VTT subtitles, or the whole archive as a plain folder of Markdown and JSON.
MCP server: the bundled souffle-mcp sidecar lets Claude Desktop, Claude Code or any MCP client search and read your transcripts. Read-only, fully local, works even when the app is closed. Setup snippets live in Settings > System > Data.
Headless CLI: souffle --transcribe-file audio.wav --json transcribes a file without launching the app, and --repeat N doubles as a benchmark harness.
The souffle binary ships inside the app bundle and is not added to your PATH, so it is not a global command. Invoke it by full path, or symlink it once:
# Run directly
"/Applications/Soufflé.app/Contents/MacOS/souffle" --list-engines
# Or expose it as a `souffle` command
ln -s "/Applications/Soufflé.app/Contents/MacOS/souffle" /usr/local/bin/souffle
All models run locally and are downloaded on first use from HuggingFace:
The two Kyutai models are the streaming ones: text appears while you are still talking. The other two transcribe the whole recording once you stop, which suits a meeting you read afterwards but changes how dictation feels.
Soufflé asks for these as you use the features that need them, never up front:
| Permission | Why | Needed for |
|---|---|---|
| Microphone | Records your voice to transcribe it | Everything |
| System Audio Recording | Captures what the other participants say, without a virtual audio device | Meetings (macOS 14.4+) |
| Accessibility | Pastes into the app you were using, reads back your corrections when "learn from edits" is on, and installs the native event tap for single-key shortcuts (Fn, lone modifier, F5–F12) | Auto-paste, dictation polish, single-key shortcuts |
| Calendar | Reads today's events to list them and offer to start recording | Calendar integration (optional) |
Settings > System > Permissions shows the current state of each and links straight to the matching System Settings pane.
The privacy claim above is worth checking rather than believing, so here is every outbound connection the app makes:
http://localhost:11434 by default, if you enable summaries with Ollama. It is your machine unless you point it elsewhere.Your audio, transcripts, notes and summaries are never sent anywhere. They live in a local SQLite database, and Settings > System > Data exports or deletes the lot.
Open source and actively developed. Every release is signed and notarized, and the engineering is covered by a large test suite. Macs differ enormously in audio hardware and routing, so if something does not behave on yours, a report is genuinely useful.
The fastest useful bug report is Settings > System > Diagnostics, which copies the app version, the current pipeline state and the log settings and paths, plus a live tail of the log. Paste that into a new issue with your macOS version, your Mac model and what you were doing. None of it contains transcript text, though the paths do include your user name.
Install with Homebrew:
brew install --cask damione1/tap/souffle
Or grab a prebuilt installer from the Releases page: a .dmg for Apple Silicon Macs. See Requirements for the macOS versions.
Requires an Apple Silicon Mac, Rust, Node.js 18+, and cmake (brew install cmake).
npm install
npm run tauri dev
Debug builds are Soufflé Nightly (com.souffle.desktop.nightly) so they sit next to the installed app with their own TCC rows. After a code change:
make nightly
Copyright (c) 2026 Damien Goehrig.
Released under the GNU General Public License v3.0 or later (GPL-3.0-or-later). You are free to use, study, modify, and redistribute this software, provided that derivative works are also published under the same license. See LICENSE.md for the full text.
364 commits
3 commits
Rust
61.8%
TypeScript
24.0%
Svelte
7.9%
CSS
2.1%
Swift
1.2%
Nunjucks
1.2%
JavaScript
1.0%