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.
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)