Local, bot-free meeting notetaker and live interview copilot for Windows. On-device transcription, diarization and echo cancellation.
Python
1
1 commits
updated Oct 17, 2026
A local, bot‑free meeting notetaker and live interview copilot for Windows.
Records your mic and your computer audio, transcribes and separates speakers on your GPU,
then writes the notes, or drafts your answer while the question is still being asked.
Quick start · Features · How it works · Models · Privacy · Desktop build · Contributing
🤫 No bot in the callMurmur listens to your own devices: microphone plus system loopback. Zoom, Teams, Meet, Slack huddles, a browser tab: if you can hear it, it can transcribe it. Nobody gets a "Notetaker has joined" message. |
🔒 Audio stays localRecognition, speaker separation, voice activity detection and echo cancellation run on your machine. Only text goes to the AI provider you pick, and only for summaries and Copilot answers. |
⚡ Answers in ~1–2 sIn Copilot mode the other side's question is detected automatically, and the first words of your answer appear about one to two seconds later, grounded in your own resume and documents. |
Switch between them from the header at any time.
| 📝 Notetaker | 🎯 Copilot | |
|---|---|---|
| For | Meetings, calls, lectures, imported recordings | Job interviews and live calls |
| During the call | Live draft transcript with speakers | Detects questions, writes your answer in real time |
| After the call | Re‑transcribes at high accuracy, AI summary, sentiment, speaker stats | Full session with every question and answer kept |
| Input | Mic + system audio, screen capture, audio/video import | Mic + system audio, screenshots, resume, documents, playbook |
| Output | TXT · SRT · Markdown | A readable session log you can revisit |
mp3 / m4a / wav / mp4 / mkv … file and transcribe it directly.tools/build_playbook.py turns your past interview transcripts into a playbook (proven self‑intro, facts, stories, Q&A, phrasings) that every answer draws on.flowchart LR
subgraph IN["🎙️ Capture"]
MIC[Microphone]
SYS[System audio<br/>loopback]
SCR[Screen share]
end
subgraph LOCAL["🔒 Runs locally (GPU / CPU)"]
AEC[DTLN‑aec<br/>echo cancel + denoise]
VAD[Silero VAD<br/>segmentation]
ASR[faster‑whisper<br/>or Parakeet]
DIA[sherpa‑onnx<br/>diarization]
STORE[(Local storage<br/>data/)]
end
subgraph AI["☁️ Your AI provider (text only)"]
SUM[Summary,<br/>sentiment, fixes]
COP[Live answers]
end
UI[🖥️ Web UI<br/>127.0.0.1:8765]
MIC --> AEC
SYS --> AEC
AEC --> VAD --> ASR --> DIA --> STORE
SCR --> STORE
DIA -- transcript --> UI
STORE -- transcript text --> SUM --> UI
DIA -- question text --> COP --> UI
classDef capture fill:#3157d5,stroke:#3157d5,color:#fff
classDef local fill:#1f2937,stroke:#7490ff,color:#fff
classDef cloud fill:#7490ff,stroke:#3157d5,color:#fff
classDef ui fill:#19191c,stroke:#7490ff,color:#fff
class MIC,SYS,SCR capture
class AEC,VAD,ASR,DIA,STORE local
class SUM,COP cloud
class UI ui
A FastAPI + uvicorn backend on 127.0.0.1:8765 serves a vanilla‑JS frontend and streams the live transcript and answers over a WebSocket. Audio capture, resampling (soxr), VAD, recognition, diarization and echo cancellation all run in‑process. The design decisions, tuning and latency benchmarks are recorded in docs/adr-001-audio-pipeline.md.
| 🪟 OS | Windows 10 or 11 (system audio is captured through WASAPI loopback) |
| 🐍 Python | 3.12 |
| 🟩 GPU | NVIDIA GPU recommended for fast Whisper; falls back to CPU |
| 🎞️ ffmpeg | ffmpeg.exe in bin/ (not tracked in git, see below) |
| 🔑 API key | One of Anthropic, OpenAI or NVIDIA, for summaries and Copilot answers |
git clone https://github.com/muradiodev/murmur-notetaker-copilot.git
cd murmur-notetaker-copilot
Download a static Windows build of ffmpeg and put ffmpeg.exe into bin/.
| Script | What it does |
|---|---|
setup.bat | First run only: creates the virtual env, installs dependencies, downloads the models |
run.bat | Starts the app at http://127.0.0.1:8765. Closing the window stops it |
python -m venv .venv
.venv\Scripts\python -m pip install -r requirements.txt
.venv\Scripts\python -m app.setup_models REM downloads models on first run
.venv\Scripts\python -m app.server REM serves http://127.0.0.1:8765
Open Settings (bottom left) → API keys, paste a key and choose a Summary provider. Settings, keys included, are saved to data/settings.json and survive restarts.
[!TIP] Want to see what a finished Copilot session looks like before your first call?
python tools/demo_copilot.pycreates four demo sessions with a fictional candidate;--removedeletes them again.
| Provider | Used for | Notes |
|---|---|---|
| Summaries, Copilot answers | Haiku, Sonnet or Opus | |
| Summaries, Copilot answers | Model list is read from your own account | |
| Summaries, Copilot answers | Model list is read from your own account |
Every provider has a Test button that checks the selected model responds before you rely on it in a call.
All speech models run locally and live in models/ (not tracked in git). app/setup_models.py downloads what's missing on first run.
| Folder | Model | Role |
|---|---|---|
faster-whisper/large-v3-turbo | Whisper large‑v3‑turbo (CTranslate2) | 🗣️ Default recognition, multilingual, GPU |
parakeet-tdt-0.6b-v3-onnx | NVIDIA Parakeet TDT 0.6B v3 (ONNX int8) | ⚡ Optional engine, DE/EN, fast on CPU |
diarization/ | pyannote segmentation 3.0 + WeSpeaker ResNet34 (sherpa‑onnx) | 👥 Speaker separation |
silero_vad.onnx | Silero VAD | 🎚️ Voice activity and segmentation |
aec/ | DTLN‑aec (ONNX) | 🔇 Echo cancellation and denoise |
murmur-notetaker-copilot/
├── app/ # backend
│ ├── server.py # FastAPI app, REST + WebSocket
│ ├── audio.py # mic + loopback capture, resampling
│ ├── transcriber.py # faster-whisper / Parakeet engines
│ ├── diarize.py # speaker separation (sherpa-onnx)
│ ├── aec.py, dtln.py # echo cancellation
│ ├── summary.py # AI summaries, sentiment, provider clients
│ ├── copilot.py # live interview answers, resume/document library
│ ├── names.py # speaker names from self-introductions
│ ├── storage.py # meetings on disk, exports
│ └── static/ # frontend: index.html, app.js, copilot.js, style.css, i18n/
├── tools/ # build_playbook.py, demo_copilot.py
├── packaging/ # PyInstaller + Inno Setup desktop build
├── docs/ # architecture decision records
├── brand/ # logo and brand kit
├── desktop.py # WebView2 desktop window
├── setup.bat · run.bat
└── models/ · data/ # local models and user data (git-ignored)
A packaged build with its own window (WebView2) and a setup.exe installer:
powershell -ExecutionPolicy Bypass -File packaging\build.ps1
Requirements and caveats are in packaging/README.md.
| Stays on your machine | Sent to your AI provider |
|---|---|
| 🎙️ Raw audio and screen recordings | 📝 Transcript text, for summaries |
| 🗣️ Transcription and speaker separation | ❓ Question and conversation text, for Copilot answers |
🔑 API keys (data/settings.json) | 🖼️ Screenshots, only when you press Screenshot |
| 📄 Your resumes, documents and playbook library | 📄 The resume and documents you attach to a Copilot session |
[!IMPORTANT]
data/andmodels/are git‑ignored. Never commitdata/settings.json: it holds your API keys.
Issues and pull requests are welcome.
git checkout -b feature/my-changeUI strings live in app/static/i18n/en.js, so adding a language starts there.
faster‑whisper · sherpa‑onnx · pyannote · WeSpeaker · Silero VAD · DTLN‑aec · NVIDIA Parakeet · onnx‑asr · FastAPI · Geist · Phosphor Icons
Released under the MIT License. Third‑party models keep their own licenses; check each model's page before redistributing them.
[!NOTE] Copilot is an interview‑preparation and live‑assistance tool. Use it in line with the rules of any interview or assessment you take part in, and let people know when you record a conversation where the law requires it.
Local, bot-free meeting notetaker and live interview copilot for Windows. On-device transcription, diarization and echo cancellation.
Python
1
1 commits
updated Oct 17, 2026
A local, bot‑free meeting notetaker and live interview copilot for Windows.
Records your mic and your computer audio, transcribes and separates speakers on your GPU,
then writes the notes, or drafts your answer while the question is still being asked.
Quick start · Features · How it works · Models · Privacy · Desktop build · Contributing
🤫 No bot in the callMurmur listens to your own devices: microphone plus system loopback. Zoom, Teams, Meet, Slack huddles, a browser tab: if you can hear it, it can transcribe it. Nobody gets a "Notetaker has joined" message. |
🔒 Audio stays localRecognition, speaker separation, voice activity detection and echo cancellation run on your machine. Only text goes to the AI provider you pick, and only for summaries and Copilot answers. |
⚡ Answers in ~1–2 sIn Copilot mode the other side's question is detected automatically, and the first words of your answer appear about one to two seconds later, grounded in your own resume and documents. |
Switch between them from the header at any time.
| 📝 Notetaker | 🎯 Copilot | |
|---|---|---|
| For | Meetings, calls, lectures, imported recordings | Job interviews and live calls |
| During the call | Live draft transcript with speakers | Detects questions, writes your answer in real time |
| After the call | Re‑transcribes at high accuracy, AI summary, sentiment, speaker stats | Full session with every question and answer kept |
| Input | Mic + system audio, screen capture, audio/video import | Mic + system audio, screenshots, resume, documents, playbook |
| Output | TXT · SRT · Markdown | A readable session log you can revisit |
mp3 / m4a / wav / mp4 / mkv … file and transcribe it directly.tools/build_playbook.py turns your past interview transcripts into a playbook (proven self‑intro, facts, stories, Q&A, phrasings) that every answer draws on.flowchart LR
subgraph IN["🎙️ Capture"]
MIC[Microphone]
SYS[System audio<br/>loopback]
SCR[Screen share]
end
subgraph LOCAL["🔒 Runs locally (GPU / CPU)"]
AEC[DTLN‑aec<br/>echo cancel + denoise]
VAD[Silero VAD<br/>segmentation]
ASR[faster‑whisper<br/>or Parakeet]
DIA[sherpa‑onnx<br/>diarization]
STORE[(Local storage<br/>data/)]
end
subgraph AI["☁️ Your AI provider (text only)"]
SUM[Summary,<br/>sentiment, fixes]
COP[Live answers]
end
UI[🖥️ Web UI<br/>127.0.0.1:8765]
MIC --> AEC
SYS --> AEC
AEC --> VAD --> ASR --> DIA --> STORE
SCR --> STORE
DIA -- transcript --> UI
STORE -- transcript text --> SUM --> UI
DIA -- question text --> COP --> UI
classDef capture fill:#3157d5,stroke:#3157d5,color:#fff
classDef local fill:#1f2937,stroke:#7490ff,color:#fff
classDef cloud fill:#7490ff,stroke:#3157d5,color:#fff
classDef ui fill:#19191c,stroke:#7490ff,color:#fff
class MIC,SYS,SCR capture
class AEC,VAD,ASR,DIA,STORE local
class SUM,COP cloud
class UI ui
A FastAPI + uvicorn backend on 127.0.0.1:8765 serves a vanilla‑JS frontend and streams the live transcript and answers over a WebSocket. Audio capture, resampling (soxr), VAD, recognition, diarization and echo cancellation all run in‑process. The design decisions, tuning and latency benchmarks are recorded in docs/adr-001-audio-pipeline.md.
| 🪟 OS | Windows 10 or 11 (system audio is captured through WASAPI loopback) |
| 🐍 Python | 3.12 |
| 🟩 GPU | NVIDIA GPU recommended for fast Whisper; falls back to CPU |
| 🎞️ ffmpeg | ffmpeg.exe in bin/ (not tracked in git, see below) |
| 🔑 API key | One of Anthropic, OpenAI or NVIDIA, for summaries and Copilot answers |
git clone https://github.com/muradiodev/murmur-notetaker-copilot.git
cd murmur-notetaker-copilot
Download a static Windows build of ffmpeg and put ffmpeg.exe into bin/.
| Script | What it does |
|---|---|
setup.bat | First run only: creates the virtual env, installs dependencies, downloads the models |
run.bat | Starts the app at http://127.0.0.1:8765. Closing the window stops it |
python -m venv .venv
.venv\Scripts\python -m pip install -r requirements.txt
.venv\Scripts\python -m app.setup_models REM downloads models on first run
.venv\Scripts\python -m app.server REM serves http://127.0.0.1:8765
Open Settings (bottom left) → API keys, paste a key and choose a Summary provider. Settings, keys included, are saved to data/settings.json and survive restarts.
[!TIP] Want to see what a finished Copilot session looks like before your first call?
python tools/demo_copilot.pycreates four demo sessions with a fictional candidate;--removedeletes them again.
| Provider | Used for | Notes |
|---|---|---|
| Summaries, Copilot answers | Haiku, Sonnet or Opus | |
| Summaries, Copilot answers | Model list is read from your own account | |
| Summaries, Copilot answers | Model list is read from your own account |
Every provider has a Test button that checks the selected model responds before you rely on it in a call.
All speech models run locally and live in models/ (not tracked in git). app/setup_models.py downloads what's missing on first run.
| Folder | Model | Role |
|---|---|---|
faster-whisper/large-v3-turbo | Whisper large‑v3‑turbo (CTranslate2) | 🗣️ Default recognition, multilingual, GPU |
parakeet-tdt-0.6b-v3-onnx | NVIDIA Parakeet TDT 0.6B v3 (ONNX int8) | ⚡ Optional engine, DE/EN, fast on CPU |
diarization/ | pyannote segmentation 3.0 + WeSpeaker ResNet34 (sherpa‑onnx) | 👥 Speaker separation |
silero_vad.onnx | Silero VAD | 🎚️ Voice activity and segmentation |
aec/ | DTLN‑aec (ONNX) | 🔇 Echo cancellation and denoise |
murmur-notetaker-copilot/
├── app/ # backend
│ ├── server.py # FastAPI app, REST + WebSocket
│ ├── audio.py # mic + loopback capture, resampling
│ ├── transcriber.py # faster-whisper / Parakeet engines
│ ├── diarize.py # speaker separation (sherpa-onnx)
│ ├── aec.py, dtln.py # echo cancellation
│ ├── summary.py # AI summaries, sentiment, provider clients
│ ├── copilot.py # live interview answers, resume/document library
│ ├── names.py # speaker names from self-introductions
│ ├── storage.py # meetings on disk, exports
│ └── static/ # frontend: index.html, app.js, copilot.js, style.css, i18n/
├── tools/ # build_playbook.py, demo_copilot.py
├── packaging/ # PyInstaller + Inno Setup desktop build
├── docs/ # architecture decision records
├── brand/ # logo and brand kit
├── desktop.py # WebView2 desktop window
├── setup.bat · run.bat
└── models/ · data/ # local models and user data (git-ignored)
A packaged build with its own window (WebView2) and a setup.exe installer:
powershell -ExecutionPolicy Bypass -File packaging\build.ps1
Requirements and caveats are in packaging/README.md.
| Stays on your machine | Sent to your AI provider |
|---|---|
| 🎙️ Raw audio and screen recordings | 📝 Transcript text, for summaries |
| 🗣️ Transcription and speaker separation | ❓ Question and conversation text, for Copilot answers |
🔑 API keys (data/settings.json) | 🖼️ Screenshots, only when you press Screenshot |
| 📄 Your resumes, documents and playbook library | 📄 The resume and documents you attach to a Copilot session |
[!IMPORTANT]
data/andmodels/are git‑ignored. Never commitdata/settings.json: it holds your API keys.
Issues and pull requests are welcome.
git checkout -b feature/my-changeUI strings live in app/static/i18n/en.js, so adding a language starts there.
faster‑whisper · sherpa‑onnx · pyannote · WeSpeaker · Silero VAD · DTLN‑aec · NVIDIA Parakeet · onnx‑asr · FastAPI · Geist · Phosphor Icons
Released under the MIT License. Third‑party models keep their own licenses; check each model's page before redistributing them.
[!NOTE] Copilot is an interview‑preparation and live‑assistance tool. Use it in line with the rules of any interview or assessment you take part in, and let people know when you record a conversation where the law requires it.