Private meeting notes with local AI
Turn a meeting recording into a transcript and a summary of decisions and action items on your own computer.
Written by Jakub Rusinowski · Updated
Two local pieces do the work: a speech-to-text model (Whisper or Parakeet) turns the recording into a transcript, and a chat model running in Ollama turns the transcript into decisions, action items and owners. Meetily packages both in one free desktop app; engineers can script the same pipeline with whisper.cpp and Ollama. It stays private only if the summary model is local too. Other open transcription models, with their accuracy on the Open ASR Leaderboard, are on the speech-to-text page.
Will this work on my computer?
| Your computer | What the Model Finder sets up | Expect |
|---|---|---|
| PC with 16 GB of RAM and no graphics card | Qwen 3.5 4B | Usable |
| PC with an 8 GB graphics card | Qwen 3.5 4B | Smooth |
| PC with a 24 GB graphics card | Gemma 4 26B-A4B | Smooth |
| M1 Mac with 16 GB of memory | Qwen 3.5 9B | Usable |
This table covers the summary model. Transcription runs a separate speech model as well; the site has no measured figures for speech models, so the table does not include it.
What you'll build
- Meeting audio
- Speech-to-text (Whisper or Parakeet, local)
- Transcript
- Summary prompt to a chat model in Ollama (local)
- Decisions, actions, owners, dates and open questions
Before you start
- Consent first. Rules on recording conversations differ between countries and, in the US, between states; some require everyone's agreement. Tell people you are recording and get their agreement before you start. This is not legal advice: check the rules where you and the other participants are.
- Meetily: a Mac with Apple Silicon or a Windows PC (the Windows installer needs an x64 processor with AVX2). On Linux you build it from source.
- DIY path: comfortable in a terminal, with
git,cmake,ffmpeg,jqand a C++ compiler installed. - Ollama installed for the summaries, from ollama.com/download.
Recommended stack
Pick: Meetily (Community Edition). A free, MIT-licensed desktop app that records the meeting, transcribes it on your machine with Whisper or Parakeet, and summarises it with Ollama or a cloud provider you choose. Its current release is marked pre-release, so expect rough edges.
Alternative for engineers: whisper.cpp + Ollama. Two command-line tools and one prompt, and the transcript is a plain text file you keep.
The summary model is the one the table above names for your computer.
Setup steps
Path A: Meetily
- Install Ollama and pull the summary model the table names for your computer:
ollama pull qwen3.5:4b # for No GPU, 8 GB GPU
ollama pull gemma4:26b-a4b # for 24 GB GPU
ollama pull qwen3.5:9b # for Mac- Download Meetily from its GitHub Releases page: the
.dmgfor an Apple Silicon Mac, thex64-setup.exefor Windows. - Install it. On a Mac, open the
.dmgand drag Meetily to Applications; on Windows, run the installer. - In Meetily's settings, choose a local transcription model (Whisper or Parakeet). It downloads once.
- For summaries, choose Ollama and the model you pulled in step 1. If the meeting must stay private, do not pick Claude, Groq, OpenRouter or OpenAI: those send the transcript to that provider.
- Record a short test meeting, stop it, and generate the summary.
Path B: whisper.cpp + Ollama (DIY)
- Build whisper.cpp and download a speech model:
git clone https://github.com/ggml-org/whisper.cpp.git
cd whisper.cpp
sh ./models/download-ggml-model.sh base.en
cmake -B build
cmake --build build -j --config Release- Convert your recording to the 16-bit WAV that
whisper-clireads:
ffmpeg -i meeting.m4a -ar 16000 -ac 1 -c:a pcm_s16le meeting.wav- Transcribe it to a text file:
./build/bin/whisper-cli -m models/ggml-base.en.bin -f meeting.wav -otxt -of meeting- For a meeting that is not in English, download a multilingual model (one without
.enin its name) and add-l auto. - Summarise it with Ollama, asking for JSON so you can reuse the result. If you pulled a different model, change the
modelname:
jq -n --rawfile t meeting.txt '{
model: "qwen3.5:4b", stream: false,
messages: [{role: "user", content: ("Summarise this meeting transcript. List decisions, action items with owner and due date if stated, and open questions. Use only what the transcript says; write \"not stated\" when an owner or date is missing.\n\n" + $t)}],
format: {type: "object", properties: {
decisions: {type: "array", items: {type: "string"}},
actions: {type: "array", items: {type: "object", properties: {task: {type: "string"}, owner: {type: "string"}, due: {type: "string"}}, required: ["task", "owner", "due"]}},
open_questions: {type: "array", items: {type: "string"}}
}, required: ["decisions", "actions", "open_questions"]}
}' | curl -s http://localhost:11434/api/chat -d @- | jq -r '.message.content' > meeting-summary.jsonjq builds the request from the transcript safely, quotes and line breaks included. More on the JSON part: Reliable JSON from local LLMs.
Test it
Record yourself reading a short script with one decision, one task with an owner and a date, and one open question:
"We agreed to move the launch to the second week of March. Anna will update the pricing page by Friday. We still don't know whether the EU price includes VAT."
A good summary lists exactly one decision, one action (Anna, pricing page, Friday) and one open question, and adds nothing.
Verify it worked
- The transcript has the names and numbers you said, spelled the way you said them.
- Every action in the summary appears in the transcript. Nothing is invented.
- With Wi-Fi off, transcription and summary both still run.
Did you get this working?
Thanks. Your answer helps us see which recipes need work.
Troubleshooting and limits
- Who said what. Meetily's README lists speaker labels as a PRO-edition feature, and whisper.cpp's default output does not label speakers. whisper.cpp has an experimental speaker-turn mode (the
small.en-tdrzmodel with-tdrz), English only. Treat the owners in a summary as a draft to check. - Check names, numbers and owners against the audio. Speech models mishear names and figures, and the summary model then repeats the mistake confidently.
- Long meetings. If the summary forgets the second half, the transcript did not fit the model's context window. Summarise in parts, or see context length and memory.
- Ollama not reachable. Connection refused fixes.
- Windows says the app is unsafe. SmartScreen and antivirus.
- Meetily also sells a separate PRO edition (accuracy, speaker labels, team deployment). The free Community Edition is what this page covers.
What stays on your computer
| Component | Runs where | Note |
|---|---|---|
| Audio recording | On your computer | Saved by Meetily, or wherever you keep the file |
| Speech-to-text (Whisper or Parakeet) | On your computer, after a one-time download | The speech model downloads once |
| Summary model | On your computer, or online if you choose a cloud option | Local only if you choose Ollama; Meetily also offers Claude, Groq, OpenRouter, OpenAI and other endpoints, which send the transcript to that provider |
| Ollama | On your computer | Unless you pick a :cloud model; OLLAMA_NO_CLOUD=1 blocks those |
| Transcripts and summaries | On your computer | Stored on your disk |
Go deeper
- Offline voice assistant: the same speech model, used live.
- Reliable JSON from local LLMs
- Local LLM for email and writing: turn the action list into follow-up emails.
- Model Finder · Hardware checker
Sources
The steps on this page were checked against these official pages on the date shown.
- github.com/Zackriya-Solutions/meetily (2026-10-15)
- github.com/Zackriya-Solutions/meetily/releases (2026-10-15)
- github.com/ggml-org/whisper.cpp (2026-10-15)
- github.com/ggml-org/whisper.cpp/blob/master/examples/cli/README.md (2026-10-15)
- docs.ollama.com/capabilities/structured-outputs (2026-10-15)
- docs.ollama.com/faq (2026-10-15)