A dictation app that understands where your words are going.

Open-source Mac dictation with local and self-hosted options.

macOS 14+ · Apple Silicon and Intel

Foil capture, providers, app-specific style, history, and usage insight in a 27-second walkthrough.

A deeper dictation toolkit

Fast capture is the start. Foil also gives you routing, cleanup, recovery, and visibility.

Core loop

Dictate without switching context.

Hold a key, speak, release. Foil transcribes, applies the right app policy, and puts the result where you were typing.

Hold-to-record Toggle mode Custom hotkeys Language hints M4A, WAV, FLAC

Provider choice

Local whisper.cpp, Groq, OpenAI Whisper, or custom OpenAI-compatible transcription.

Cleanup Groups

Raw text for some apps; prompts, corrections, and preferred terms for others.

Paste recovery

Auto-paste, clipboard fallback, Paste Last, retry, copy, edit, export, and delete.

Usage Insights

Local words, sessions, time saved, daily trends, and top apps without transcript analytics.

Recording control

Visible recording, transcription, cleanup, and paste states while focus stays in your app.

Trust controls

Keychain keys, local history controls, redacted diagnostics, and explicit provider routes.

Choose where audio and cleanup run

Audio and text cleanup are separate routes. Choose each deliberately.

Local whisper.cpp

Transcribe through a localhost OpenAI-compatible server.

  • No hosted transcription required
  • Uses localhost by default
  • Copyable setup commands
Read the local setup guide

Groq Whisper

Fast hosted transcription with your Groq API key.

  • Quick setup
  • Good fit for daily dictation
  • Can also be selected for cleanup groups

OpenAI Whisper

Use OpenAI Whisper with your OpenAI API key.

  • Uses the whisper-1 transcription model
  • Separate OpenAI key setup
  • Cleanup groups can separately use OpenAI chat models

Custom OpenAI-compatible

Point Foil at your own compatible endpoint and model.

  • Bring your own transcription endpoint
  • Optional API keys when your server allows it
  • Separate custom chat routing for cleanup groups

Unassigned apps stay raw by default. Cleanup is explicit, app-aware, and routed through the selected cleanup provider.

Foil Transcription settings showing provider, credentials, Whisper model, and speech language
Transcription settings keep provider, credentials, model, and language visible.

Questions before installing

Short answers to the setup, provider, and reliability questions that usually matter before trying Foil.

How do I install Foil?

Homebrew is the primary install path. Run brew tap mean-weasel/foil https://github.com/mean-weasel/homebrew-foil, then brew install --cask foil. The cask installs Foil 1.13.13 from the signed, notarized, Sparkle update-signed macOS DMG published on GitHub Releases.

Prefer a manual DMG? Use the latest GitHub Release, or view all releases. SHA-256: 33f682b4...51d2e79.

Can Foil run transcription locally?

Yes. Start with a local whisper.cpp server on localhost, then select Local whisper.cpp in Transcription settings. Foil also supports custom OpenAI-compatible transcription endpoints.

Do I need a Groq or OpenAI key?

Not for the local whisper.cpp route. Groq Whisper and OpenAI Whisper require their own API keys, and custom endpoints only need a key when your server requires one.

Where does cleanup text go?

Cleanup is optional and group-based. It can use Groq, OpenAI, or a custom OpenAI-compatible chat endpoint, and transcript text goes only to the cleanup provider selected for the matching group.

What are Cleanup Groups?

Cleanup Groups let selected apps use different transcript behavior. The default group handles unassigned apps, while custom groups can use cleanup providers, prompts, vocabulary corrections, and preferred terms.

What happens to history and audio?

Transcription history stays on this Mac and can be limited or turned off. Successful audio files are deleted after transcription; failed audio may be retained locally only for retryable failures.

Are Usage Insights transcript analytics?

No. Insights is local usage metadata for words, sessions, trends, and top apps. It is separate from transcript text and can be deleted from the app.

What if paste does not land in the target app?

Paste automation depends on Accessibility permission and target-app behavior. Foil keeps History and clipboard fallback paths available so you can recover the transcript.