Providers
Which transcription and summary providers Minutd supports and what each needs.
Providers are small modules behind one interface, so adding one is a single file.
Transcription
| Provider | Needs | Notes |
|---|---|---|
local | Nothing | faster-whisper, selectable model size. Runs after the meeting ends. Needs the whisper service, see below. |
openai | API key | Whisper or gpt-4o-transcribe. |
groq | API key | Hosted Whisper. |
deepgram | API key | Can also provide diarization. |
assemblyai | API key | Can also provide diarization. |
Pick the provider on the Settings page. Keys and tokens are stored encrypted with MINUTD_SECRET and are never shown again after saving: leave the field blank to keep the stored value. The Test button checks the values currently in the form, saved or not, without spending tokens.
The default is local. Each provider keeps its own saved settings, so switching back does not lose them.
Local whisper service
The local provider talks to the whisper service from services/whisper. In the compose file it sits behind the local profile:
docker compose --profile local up -d
The model downloads on first use into the models volume. Set WHISPER_MODEL (tiny to large-v3, default small) in .env to change the default. The provider uses http://whisper:8000 unless you change the base URL in Settings.
After a meeting
When the bot leaves, the worker merges the recorded segments into one audio file, sends it to the provider and stores the transcript. Files over 24 MiB are re-encoded and split for providers with an upload limit, and the timestamps are put back together. If the provider fails, the meeting shows the error and keeps its audio and any earlier transcript. Fix the setting and press Re-run transcription on the meeting page.
Speaker names normally come from the meeting page, not from the transcription provider. If that is unavailable, provider diarization is mapped to names by overlap with the page events.
Summary
| Provider | Needs | Notes |
|---|---|---|
none | Nothing | Default. |
| OpenAI-compatible | Base URL, key and model | Covers OpenAI, DeepSeek, Ollama, OpenRouter and others. |
anthropic | API key | Claude models. |
DeepSeek is text only, so it works for summaries but not transcription.
Pick the provider in Settings, press Test, then Save and use. With a provider other than none, every finished transcription is followed by a summary using the default prompt. On a meeting page, the Summary tab shows it as rendered Markdown, lets you copy it, and keeps a history. Regenerate lets you pick another prompt or another configured provider for that one run. Failed summaries show their error in the history and never affect the transcript.
Prompts
Settings has a list of prompt templates. The built-in “Meeting summary” prompt (summary, decisions, action items, open questions, in the language of the meeting) cannot be edited, but Copy to edit makes a copy. Create, edit and delete your own, and choose which one is used for automatic summaries. The prompt is sent as the system message and the transcript, one [hh:mm:ss] Speaker: text line per segment, as the user message.
Long meetings
Every summary provider has a maxInputChars setting (24000 for OpenAI-compatible, 300000 for Anthropic by default, which is about 6k and 75k tokens). Lower it for a small local model, raise it for a model with a large context window. A transcript that fits is sent in one request. A longer one is split on line boundaries, each part is condensed into notes, and your prompt is then applied to the notes. If the notes still do not fit, they are condensed again, up to four rounds, and then the summary fails with a message saying so. A long meeting therefore costs several requests and loses some detail compared with one request to a large-context model.
Privacy
With the local provider and no summary, audio and text never leave your machine. With a hosted provider, the audio or transcript is sent to that provider under its terms. Pick accordingly for sensitive meetings.
Each provider has a Test button in Settings that checks the key before you rely on it.