Everything Soufflé does, and what it needs to do it.
What Soufflé does, what it needs, and where it keeps things. Nothing here requires an account, an API key, or a network connection beyond the first model download.
Install
With Homebrew:
brew install --cask damione1/tap/souffleOr download the .dmg from the latest release and drag Soufflé into Applications. Every build is signed and notarized, so it opens normally: no right-click detour, no Gatekeeper warning.
On first launch the setup wizard downloads a speech model, between 670 MB and 5.6 GB depending on which one you pick. That download is the only moment Soufflé needs the network in order to transcribe.
Requirements
Permissions
Soufflé asks for each of these as you use the feature that needs it, never up front. Settings → System → Permissions shows the current state of each and links straight to the matching System Settings pane.
Refusing one disables only the feature that needs it. Without System Audio a meeting still records your microphone and the transcript is labelled Mic only. Without Accessibility the dictated text is copied to the clipboard instead of being inserted for you.
First run
A setup wizard covers four things: the permissions Soufflé needs, which microphone to use, the speech model to download, and the dictation shortcut. The default shortcut is ⌘⇧Space.
The last step also offers auto-paste, on by default: when you stop dictating, the text goes straight into the app you were in. Turn it off and the text is put on the clipboard instead. Everything here can be changed later in Settings.
Dictation
Press the shortcut anywhere, talk, press it again. The text is inserted into whatever app had focus, or copied to the clipboard if you turned auto-paste off.
Apps that reject a synthetic paste (terminals, secure fields) can receive simulated keystrokes instead. Settings → Interface offers three insertion methods: the clipboard and ⌘V, simulated typing, or a direct write to the focused field through Accessibility.
Two optional passes run on the way out. Dictation polish sends the raw transcript through a local LLM with an editable prompt template (clean up, professional email, bullet points, remove fillers) and needs Apple Intelligence or Ollama. Learn from edits, on by default, watches the field just after insertion: correct a misheard name by hand once and Soufflé keeps that spelling for next time, in the custom dictionary under Settings → Transcription.
Optional start and stop sounds confirm the shortcut landed.
Shortcuts
Both dictation shortcuts are set in Settings → Interface. Each must include a modifier key, and the two cannot share a combination.
The overlay
Dictation does not open a window. A small overlay, the pill, appears above whatever you are working in: a recording dot, the label, a live waveform and a stop button. It stays compact until there is text to show, then widens and grows line by line as you talk.
When you stop, the pill switches to Reformulating… while the local polish pass runs, then disappears as the text lands in the field you were already using. The window is excluded from screen capture, so it does not turn up in the meeting you are in.
Meetings
A meeting records your microphone and, on macOS 14.4+, the system audio, so the live transcript separates Me from Them as it goes.
The lifecycle is meant to be hands-off: the app offers to start when a calendar meeting begins, detects when the meeting seems over and stops on its own after warning you, and recovers or salvages the session if the engine stalls or the microphone disappears. When the Mac goes to sleep the recording is closed cleanly, and Soufflé offers to resume it on wake.
A meeting stops on its own after 10 minutes without speech, with a 4-hour failsafe behind it. Both are adjustable in Settings → Audio, along with the microphone Soufflé should prefer.
Audio recording is off by default. Turn it on in Settings → System → Data and the meeting sound is kept as compact Opus files, for 7 days, 30 days or until you delete them, replayable with click-to-seek from any line of the transcript.
Summaries
Summaries are generated on-device: by Apple Intelligence on macOS 26 or newer, with nothing to install, and otherwise by a local Ollama. Alongside the prose summary, Soufflé extracts decisions, action items with owners, and open questions.
Setting up Ollama takes two commands:
brew install ollama
ollama pull qwen2.5:7bThen, in Settings → Meetings → Summarization, leave the server at http://localhost:11434 and pick the model. Any general-purpose chat model works; qwen2.5:7b is the one Soufflé recommends. The same provider is what dictation polish uses.
Nothing about a summary is sent anywhere. With Ollama the only request is to your own instance.
Speech models
All models run locally and are downloaded on first use from HuggingFace. Switch at any time in Settings → Transcription.
The two Kyutai models are the streaming ones: text appears while you are still talking. Whisper and Parakeet transcribe the whole recording once you stop, which is fine for a meeting you read afterwards but changes how dictation feels.
A loaded model is unloaded after an hour of inactivity to give the RAM back, and reloaded on the next recording. Change or disable that in Settings → Audio.
Settings reference
Five tabs. The settings worth knowing about:
InterfaceClipboard and ⌘V, simulated typing, or a direct Accessibility write. Change it when an app refuses the paste.
InterfaceOn: the text goes into the app you were using. Off: it is copied to the clipboard.
InterfaceStart and stop cues, with a volume.
TranscriptionThe local LLM pass and its prompt templates, which you can edit. Needs Apple Intelligence or Ollama.
TranscriptionProper nouns and technical terms to spell correctly, filled in by hand or learned from your corrections.
AudioAn ordered list of preferred inputs, a separate choice for clamshell mode, and a switch that keeps Bluetooth headsets from being used as microphones so they stay in stereo.
AudioStop after 5, 10, 15 or 30 minutes without speech, with a hard failsafe behind it.
AudioFree the model's RAM after 5, 15 or 60 idle minutes, or never.
MeetingsOff until you turn it on. Lists today's events and offers to start recording when one begins.
MeetingsProvider, Ollama server and model, and the summary templates.
SystemOff, keep 7 days, keep 30 days, or keep until you delete it.
SystemAsks GitHub once a day whether a newer release exists. Turn it off in About.
What touches the network
The privacy claim is worth checking rather than believing, so here is every outbound connection the app makes.
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.
Where your data lives
Everything sits in one folder, ~/Library/Application Support/com.souffle.desktop/. Settings → System → Data has a button that reveals it in Finder.
souffle.dbSQLite: meetings, transcripts, notes, summaries, dictation history, the custom dictionary and your settings.models/Downloaded speech models, filed by engine and backend. Deleting one frees the disk; it is downloaded again if you select that model later.recordings/Meeting audio as Ogg/Opus, one folder per meeting. Empty unless you turned recording on.logs/Rotating application logs. This is what to attach when you report a problem.Backing that folder up backs up everything. Deleting it returns the app to a first launch.
Export
Any meeting exports as Markdown, JSON, or SRT/VTT subtitles, with its recorded audio alongside if you kept any. The whole archive exports as a plain folder of Markdown and JSON. No proprietary container, nothing to migrate out of later.
MCP server
The bundled souffle-mcp sidecar lets Claude Desktop, Claude Code or any MCP client search and read your transcripts. It is read-only, fully local, and works even when the app is closed.
For Claude Code:
claude mcp add souffle "/Applications/Soufflé.app/Contents/MacOS/souffle-mcp"For Claude Desktop, in claude_desktop_config.json:
{
"mcpServers": {
"souffle": {
"command": "/Applications/Soufflé.app/Contents/MacOS/souffle-mcp"
}
}
}Five tools are exposed: list_meetings, get_meeting, search_meetings, latest_meeting and list_dictations. Settings → System → Data carries the same snippets with the path already filled in, plus a button that tests the connection.
Headless CLI
The souffle binary transcribes a file without launching the app. It ships inside the app bundle and is not added to your PATH, so 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
# Transcribe a file, JSON on stdout
souffle --transcribe-file audio.wav --json
--transcribe-file <WAV>Transcribe a WAV file and exit.--jsonEmit one machine-readable JSON object instead of text.--repeat NRun the same file N times. The model loads once, so this doubles as a benchmark harness for comparing models on your machine.--list-enginesList the available engines.--list-modelsList every engine, model and backend combination with its install status.--engine, --model, --backendOverride what is saved in Settings for this run.It reads the same database and the same downloaded models as the app, so anything already installed is reused.
Troubleshooting
Symptom first, then the usual cause.
models/ forces a clean re-download.logs/ holds the recent logs, which are what an issue needs.Uninstall
Installed with Homebrew:
brew uninstall --cask souffleOtherwise, drag Soufflé out of Applications.
Either way your data stays. To remove it too, delete ~/Library/Application Support/com.souffle.desktop/ — or, before uninstalling, use Settings → System → Data, which clears meetings, dictations and recorded audio in one action.
To reclaim disk without uninstalling, delete the speech models you no longer use from Settings → Transcription.
Build from source
Requires an Apple Silicon Mac, Rust, Node.js 18+, and cmake (brew install cmake).
git clone https://github.com/damione1/souffle.git
cd souffle
npm install
npm run tauri dev
Reporting a problem
If something does not work the way this documentation describes, open an issue. Include your macOS version, your Mac model, the audio devices involved, and a log from the logs/ folder.
License
Copyright © 2026 Damien Goehrig. Released under the GNU General Public License v3.0 or later. You are free to use, study, modify and redistribute it, provided derivative works are published under the same license.