Everything Soufflé does, and what it needs.

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/souffle

Or 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

MacApple Silicon. There is no Intel build.
macOS 13+Dictation, and meetings recorded from your microphone.
macOS 14.4+Meetings that also capture the other participants. System-audio capture uses the Core Audio process tap, which does not exist before 14.4. On macOS 13 a meeting still records, and the transcript is labelled Mic only.
Disk670 MB to 5.6 GB for the speech model, downloaded on first use.
SummariesApple Intelligence, which needs macOS 26 or newer, or a local Ollama on any supported version. Transcription needs neither.

Permissions

The setup wizard has an optional Permissions step; skip it and Soufflé asks for each of these as you use the feature that needs it. Notifications are the exception, requested when the app launches. Settings → System → Permissions shows the current state of each and links straight to the matching System Settings pane.

MicrophoneRecords your voice so it can be transcribed. Needed for everything.
System AudioCaptures what the other participants say, without a virtual audio device. Meetings on macOS 14.4+.
AccessibilityInserts the text into the app you were using, reads back your corrections when “learn from edits” is on, and installs the native event tap that lets a dictation shortcut bind to a single key (a lone modifier, or F5–F12).
CalendarReads today's events to list them on Home and notify you when one starts. Optional, and off until you turn it on.
NotificationsCalendar reminders, a meeting about to stop on its own, a paste that failed. Requested at launch; refusing it only silences those alerts.

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, and a single-key shortcut cannot install its event tap; classic modifier shortcuts still work.

First run

A setup wizard covers the permissions Soufflé needs, which microphone to use, the speech model to download, and the dictation shortcut. The default shortcut is ⌘⇧Space.

The shortcut step also offers auto-paste, off until you tick it: when it is on and you stop dictating, the text goes straight into the app you were in. Left off, the text is put on the clipboard instead. A fresh install finishes with Launch at login on; change that later in Settings → System. 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 while auto-paste is off. Press Esc during a toggle dictation to throw it away. If a paste fails, the text waits on Home under Dictation to recover until you copy or delete it.

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 passes run on the way out, and each can be turned off. Dictation polish, on by default when a provider is available, 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.

Voice snippets live under Settings → Transcription: say a trigger phrase at the start of a dictation and Soufflé pastes the expansion instead, case- and accent-insensitive, with no AI polish on that take. The menu bar also offers Copy Last Transcription when you need the previous take back, and Pause Shortcut (1h) when you need the key for something else.

Optional start and stop sounds confirm the shortcut landed.

Shortcuts

Both dictation shortcuts are set in Settings → Interface. Each takes a classic combo with a modifier, or a single key (a lone left or right modifier, or F5–F12), which needs the Accessibility permission so the native tap can install. The two bindings cannot share a combination.

Toggle dictationPress once to start, once to stop. ⌘⇧Space by default.
Push-to-talkHold to record, release to stop. Not set by default; bind a classic combo or a single key (lone modifier, F5–F12) if you prefer holding.
CancelEsc discards a toggle dictation in progress. It is only captured while one is running.

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. By default the window is excluded from screen capture, so it does not turn up in the meeting you are in; Hide recording overlay in screen captures in Settings → Interface turns that off.

You can hide the overlay in Settings → Interface; drag it when visible to move it. Position is remembered across display changes.

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. That separation needs a Kyutai model; Whisper and Parakeet transcribe the meeting as one mixed stream.

The lifecycle is meant to be hands-off: the app notifies you when a calendar meeting begins, and today's events have a start button on Home. It 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 stopped meeting can also be picked up by hand with Resume recording, which adds another session to the same meeting. If a microphone stops responding, a banner says so and offers Restart Soufflé.

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. With system audio the file is stereo, you on the left and the others on the right, at about 1.5x the disk of mono.

From a meeting's page you can copy the summary or the transcript, export the meeting, or delete it. The summary templates are yours to edit in Settings → AI.

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:7b

Then, in Settings → AI, 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.

Kyutai STT 1BDefault. French and English, ~2.4 GB, Metal GPU via Candle. Streams text while you speak.
Kyutai STT 2.6BEnglish only, higher quality, ~5.6 GB. Streams text while you speak. It has no pause detector, so long speech without a quiet gap can lose about 2.5 seconds every 28 seconds.
Whisper Large V3 TurboMultilingual, ~1.6 GB, Metal via whisper.cpp. Transcribes once you stop.
Parakeet TDT 0.6B v325 languages with punctuation and capitalization, ~670 MB int8, fast CPU inference via ONNX Runtime. Transcribes once you stop.

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 → Transcription.

Settings reference

Six tabs. The settings worth knowing about:

Insertion method
Interface
Clipboard and ⌘V, simulated typing, or a direct Accessibility write. Change it when an app refuses the paste.
Auto-paste
Interface
On: the text goes into the app you were using. Off, the default: it is copied to the clipboard.
Paste delay
Interface
How long to wait before pasting. Raise it if the text lands in the wrong app.
Language and theme
Interface
The interface in French or English, and a light, dark or system appearance.
Dictation sounds
Interface
Start and stop cues, with a volume.
Hide recording overlay
Interface
Hide the floating HUD while dictating or in a meeting. Drag it when visible to move it; the position is remembered. A second switch, on by default, keeps it out of screen captures.
Dictation polish
AI
The local LLM pass and its prompt templates, which you can edit. On by default when Apple Intelligence or Ollama is available.
Custom dictionary
Transcription
Proper nouns and technical terms to spell correctly, filled in by hand or learned from your corrections.
Voice snippets
Transcription
Trigger phrases that expand to a prepared block of text at the start of a dictation. Matching skips the polish pass.
Microphone priority
Audio
An 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.
Meeting auto-stop
Audio
Stop after 5, 10, 15 or 30 minutes without speech, with a hard failsafe behind it.
Meeting transcription language
Audio
A hint for language detection in meetings, never forced on the engine.
Model unload
Transcription
Free the model's RAM after 5, 15 or 60 idle minutes, or never.
Calendar
Meetings
Off until you turn it on. Lists today's events from the calendars you keep ticked, reminds you a few minutes before one (2 by default), and notifies you when one begins while a call is using the microphone.
Summarization
AI
Provider, Ollama server and model, and the summary templates.
Launch at login
System
Open Soufflé automatically when you start your Mac. On by default after a fresh setup wizard.
Meeting audio
System
Off, keep 7 days, keep 30 days, or keep until you delete it.
Model storage
System
Deletes the selected speech model from disk, once it is downloaded and not loaded.
Update check
System
Asks GitHub once a day whether a newer release exists. Turn it off in About. An update is downloaded only when you press Download update, and installed with Install and restart, which asks you to stop a running meeting first.

What touches the network

The privacy claim is worth checking rather than believing, so here is every outbound connection the app makes.

huggingface.coDownloads a speech model the first time you select it. Nothing is sent, and once the model is on disk transcription works offline forever.
api.github.comOnce a day, and whenever you press Check for updates, asks whether a newer release exists, and fetches the release notes for What's New. It sends nothing but the request: no identifier, no account, no usage data. Turn the daily check off in Settings → System → About.
github.comOnly if you press Download update: fetches the signed update, which is verified before Install and restart is offered.
localhost:11434Your Ollama instance, only if you enable summaries with Ollama. It is your machine unless you point it elsewhere. A model you download from Settings → AI is pulled by that instance, not by Soufflé.

Your audio, transcripts, notes and summaries are never sent anywhere. They live in a local SQLite database: Settings → System → Data exports the lot, and deleting the data folder removes it.

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, get_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.

The other participants are missing from the transcriptSystem-audio capture needs macOS 14.4 or later and the System Audio permission. When it is unavailable the transcript is labelled Mic only and records your microphone alone.
A single-key push-to-talk shortcut does nothingLone modifiers and F5–F12 need the Accessibility permission for the native tap. Settings → System → Permissions links there.
The dictated text is not insertedAuto-paste may be off, in which case the text is waiting on the clipboard. Otherwise it is the Accessibility permission. If Soufflé is already listed and ticked there, the entry can be a stale one left by an update: remove it with the minus button and add it back, or use Repair in Settings → System → Permissions.
One app refuses the pasteTerminals and secure fields often reject a synthetic ⌘V. Switch the insertion method to simulated typing in Settings → Interface.
The wrong microphone is pickedPin an input, and a separate one for clamshell mode, in Settings → Audio. Bluetooth headsets are left out of automatic selection by default: using one as a microphone switches it to HFP and costs you stereo sound.
Polish or summaries do nothingBoth need a provider. Without Apple Intelligence (macOS 26+), install Ollama and pick a model in Settings → AI. The reason a pass was skipped is shown in the status message and written to the log.
A model download stopped part waySelect the model again to restart the download. Deleting its folder under models/ forces a clean re-download.
Anything elseSettings → System → Data reveals the data folder. logs/ holds the recent logs, which are what an issue needs.

Uninstall

Installed with Homebrew:

brew uninstall --cask souffle

Otherwise, drag Soufflé out of Applications.

Either way your data stays. To remove it too, quit Soufflé and delete ~/Library/Application Support/com.souffle.desktop/: meetings, dictations, recorded audio and models all live there.

To reclaim disk without uninstalling, select a speech model you no longer use and delete it under Settings → System → Model storage. It has to be downloaded and not loaded.

Build from source

The app is Rust with a native Slint interface, plus a little Swift for the overlay. Building it requires an Apple Silicon Mac, Rust, the Xcode command-line tools, and cmake (brew install cmake).

git clone https://github.com/damione1/souffle.git
cd souffle
make nightly

make nightly builds and opens Soufflé Nightly, a debug build with its own identity that sits next to an installed Soufflé. ./scripts/bundle-macos.sh builds a signed release bundle.

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.