Real-time meeting & interview copilot for Windows and macOS
Live transcription of the other side · first-person teleprompter answers · capture protection
简体中文 · Download · 5-minute setup · Features · ASR Backends · Development · License
Just want to use it? Download the installer — no Node.js, no Python, no commands. Want to hack on it? Skip to Development and run from source.
| File | Type | Best for |
|---|---|---|
MeetingCopilot-<version>-win-x64.exe | Installer (NSIS, per-user) | Normal use — Start-menu and desktop shortcuts, upgrades in place |
MeetingCopilot-<version>-win-x64-portable.exe | Portable | Not installing anything; note that settings still live in %APPDATA% |
Requirements: Windows 10 / 11 (x64), no administrator rights, plus your own API key(s) — MeetingCopilot is bring-your-own-key and collects no fee.
⚠️ This beta is not code-signed yet, so Windows SmartScreen will warn you. Confirm the file came from the official release page, then More info → Run anyway. Each
.exeships a matching.exe.sha256with the hash CI computed — verify it withGet-FileHash .\MeetingCopilot-<version>-win-x64.exe -Algorithm SHA256.
🍎 macOS: no packaged build in this release. macOS is supported when run from source — see INSTALL_MACOS.en.md.
User guides: Quick start · API keys · Troubleshooting · Windows install & data locations

Real capture, no mockup: the interviewer's voice is transcribed while they are still speaking (left, live gray subtitle), and a read-aloud answer grounded in your resume streams in automatically (right).
Click to watch (with sound): using an English podcast and a Chinese vlog as the "other side" — live transcription of both languages, inline translation, auto answers in Chinese and English, 0.94 s end-to-end latency on screen.
The first launch opens a setup wizard — a normal, screen-shareable window, so someone can walk you through it remotely. Five steps:

Step 2 "Plan": each card states plainly how many platforms you have to sign up for and how many keys it needs; "Low latency" is preselected. Local backends stay out of the way behind the "Advanced setup and local modes" link.

Step 3 "Services": one card per service, with the official key page, the official docs and a step-by-step guide right inside it — no hunting through a browser. Paste, press "Save and test connection", and the key is encrypted by the OS credential store before it touches disk.
Then: play some speech, hit ▶ Start, click ⚡Ans on any line. Full walkthrough in QUICK_START.en.md.
You can reopen the wizard any time from ⚙ Settings → Run the setup wizard again, and the in-app Help & guides (tray menu or Settings) has the same content offline.

fun-asr-realtime, and MiMo per-segment. FunASR provides live partials; MOSS emits a finalized utterance after a pause.A:EN) and the teleprompter output flips to English too. Built for English interviews and code-switching conversations..md/.txt/.docx/.pdf; parsing is local and deterministic, nothing gets uploaded. Question-type detection (behavioral / technical / smalltalk) appends a zero-latency answering hint.prompt_cache_hit_tokens); kept warm automatically during capture.| Dark | Light |
|---|---|
![]() | ![]() |

Settings → Appearance → UI Language: the whole interface — title bar, panels, tooltips, dialogs — flips instantly. The screenshots above show the English UI; the Chinese one is in README.zh-CN.md.

A Chinese question, then an English one — same session, nothing reconfigured. The local ASR picks up the language switch automatically (both at ~1.6 s), and after one click on 答:EN the answer streams out in English, still grounded in the same resume.

| Backend | Latency | Cost | Privacy | Notes |
|---|---|---|---|---|
Aliyun fun-asr-realtime (recommended for packaged users) | best | pay-per-use | cloud | word-by-word streaming, server-side punctuation, nothing to install |
| MiMo per-segment | ~1 s/seg | pay-per-use | cloud | simple per-utterance cloud ASR; one key can also serve the answers |
| Local FunASR streaming (default when running from source) | ~1.2–1.8 s | free | ✅ fully local | Fun-ASR-Nano (zh+en, punctuation) or paraformer true streaming (zh-only, snappier subtitles) |
| MOSS-Transcribe-Diarize 0.9B (experimental) | finalized after a pause | free | ✅ fully local | 50+ languages, hotwords, long-form diarization; live mode consumes transcript text only |
| Local Whisper turbo | ~2 s on supported Windows GPUs | free | ✅ fully local | DirectML on Windows; CPU fallback elsewhere |
Which one should you pick? If you installed the packaged build, use a cloud backend: it needs one API key and nothing else. The local backends are an advanced option — free and fully private, but you have to bring your own Python environment and let the model weights download, and the installer ships neither.
| Component | Requirement |
|---|---|
| OS | Windows 10 / 11, or Apple-silicon macOS 14+ |
| Cloud ASR (recommended) | Alibaba Cloud DashScope API key, or a MiMo key |
| LLM | Any OpenAI-compatible API key — DeepSeek recommended (fast, cheap, prefix caching) |
| Local streaming ASR | Python 3.10/3.11 with funasr + torch; CUDA, Apple MPS, or CPU fallback |
| Experimental MOSS ASR | isolated Python 3.12 env; NVIDIA CUDA BF16 first, automatic CPU fallback |
| Local Whisper (offline fallback) | whisper-large-v3-turbo ONNX weights; DirectML on Windows, CPU elsewhere |
| Running from source | Node.js ≥ 20 and npm |
Audio capture, Python setup, stealth behavior and hotkeys differ per platform — each OS has its own guide:
| Platform | Audio capture | Stealth | Guide |
|---|---|---|---|
| 🪟 Windows 10 / 11 | system loopback — zero config | window excluded from captures | docs/windows/SETUP.md |
| 🍎 macOS 14+ (Apple silicon) | input device + BlackHole routing | best-effort (ScreenCaptureKit may capture) | docs/macos/SETUP.md |
One-time Python environment, then the app auto-spawns and reaps the sidecar
(tools/funasr_stream_server.py, ws://127.0.0.1:10097) — selecting the preset
in Settings is all you do. The selected model downloads automatically from
ModelScope on first run (~880 MB for paraformer, ~1.7 GB for Nano). --device auto picks CUDA / Apple MPS / CPU with automatic CPU fallback.
.venv, Apple MPS): see docs/macos/SETUP.mdIf your Python lives elsewhere, set MC_FUNASR_PYTHON to its full path.
MOSS is a one-shot generative model, not native streaming ASR. MeetingCopilot invokes the isolated tools/moss_asr_server.py sidecar after an utterance ends instead of repeatedly decoding a growing buffer. CUDA BF16 is attempted first and initialization failures fall back to CPU; the existing FunASR environment and default remain unchanged.
MC_MOSS_PYTHON; force a device with MC_MOSS_DEVICE=cuda:0 or cpu.Place onnx-community/whisper-large-v3-turbo-ONNX under <userData>/models/onnx-community/whisper-large-v3-turbo-ONNX/ — %APPDATA%/MeetingCopilot/ on Windows, ~/Library/Application Support/MeetingCopilot/ on macOS (encoder_model_fp16.onnx, decoder_model_merged_quantized.onnx, plus config/tokenizer files). The encoder uses DirectML on Windows and CPU elsewhere.
wss://dashscope.aliyuncs.com/api-ws/v1/inference, model fun-asr-realtime or paraformer-realtime-v2.https://api.xiaomimimo.com/v1, model mimo-v2.5-asr.safeStorage (Windows DPAPI / macOS Keychain) and never reach the renderer process.userData directory (%APPDATA%/MeetingCopilot/ on Windows and ~/Library/Application Support/MeetingCopilot/ on macOS). No telemetry, no accounts, no server.git clone https://github.com/JWM0203/MeetingCopilot.git
cd MeetingCopilot
npm install # postinstall applies patches/ (transformers.js patch — do not remove)
npm run build # builds main + preload + renderer into out/
npm start # cross-platform; Windows can also use start.bat
Running from source starts the same first-run wizard as the packaged build. Set MC_DEV_DEFAULT_LOCAL_ASR=1 to skip it and go straight to the overlay with the local FunASR defaults.
npm test # unit tests (prompt building / VAD / stores / doc parsing / ASR protocol / tray / links)
npm run typecheck # dual tsconfig (main + renderer)
npm run dev # vite HMR dev mode
npm run verify # typecheck + tests + build, the pre-commit gate
npm run dist:dir # unpacked build into release/win-unpacked
npm run dist:win # nsis + portable installers
npm run smoke:packaged # boots the packaged exe and asserts both startup paths
node tools/rt-asr-smoke.mjs # streaming-ASR protocol smoke (set MC_RT_URL / MC_RT_KEY)
Platform setup for developers (python envs, audio routing, stealth): docs/windows/SETUP.md · docs/macos/SETUP.md.
🇨🇳 If npm / Electron downloads are slow in China, create a
.npmrccontainingregistry=https://registry.npmmirror.comandelectron_mirror=https://npmmirror.com/mirrors/electron/.
Architecture in one line: Electron main process (window / stealth / tray / IPC / LLM routing / ASR host) → ASR engines inside a utilityProcess (never the main process — DirectML inference wedges there) → React renderer (transcript pane + answer session pane); all state lives in plain JSON files, never DOM storage.
This tool is intended for personal learning and assistive use. Whether and how real-time assistance may be used in meetings or interviews depends on your local laws and the policies of the other party — you are solely responsible for how you use this software.
Apache License 2.0 — free to use, modify and redistribute, including commercially, under the terms of the license.
51 commits
2 commits
TypeScript
87.0%
CSS
4.2%
Python
4.1%
JavaScript
3.9%
Real-time meeting & interview copilot for Windows and macOS
Live transcription of the other side · first-person teleprompter answers · capture protection
简体中文 · Download · 5-minute setup · Features · ASR Backends · Development · License
Just want to use it? Download the installer — no Node.js, no Python, no commands. Want to hack on it? Skip to Development and run from source.
| File | Type | Best for |
|---|---|---|
MeetingCopilot-<version>-win-x64.exe | Installer (NSIS, per-user) | Normal use — Start-menu and desktop shortcuts, upgrades in place |
MeetingCopilot-<version>-win-x64-portable.exe | Portable | Not installing anything; note that settings still live in %APPDATA% |
Requirements: Windows 10 / 11 (x64), no administrator rights, plus your own API key(s) — MeetingCopilot is bring-your-own-key and collects no fee.
⚠️ This beta is not code-signed yet, so Windows SmartScreen will warn you. Confirm the file came from the official release page, then More info → Run anyway. Each
.exeships a matching.exe.sha256with the hash CI computed — verify it withGet-FileHash .\MeetingCopilot-<version>-win-x64.exe -Algorithm SHA256.
🍎 macOS: no packaged build in this release. macOS is supported when run from source — see INSTALL_MACOS.en.md.
User guides: Quick start · API keys · Troubleshooting · Windows install & data locations

Real capture, no mockup: the interviewer's voice is transcribed while they are still speaking (left, live gray subtitle), and a read-aloud answer grounded in your resume streams in automatically (right).
Click to watch (with sound): using an English podcast and a Chinese vlog as the "other side" — live transcription of both languages, inline translation, auto answers in Chinese and English, 0.94 s end-to-end latency on screen.
The first launch opens a setup wizard — a normal, screen-shareable window, so someone can walk you through it remotely. Five steps:

Step 2 "Plan": each card states plainly how many platforms you have to sign up for and how many keys it needs; "Low latency" is preselected. Local backends stay out of the way behind the "Advanced setup and local modes" link.

Step 3 "Services": one card per service, with the official key page, the official docs and a step-by-step guide right inside it — no hunting through a browser. Paste, press "Save and test connection", and the key is encrypted by the OS credential store before it touches disk.
Then: play some speech, hit ▶ Start, click ⚡Ans on any line. Full walkthrough in QUICK_START.en.md.
You can reopen the wizard any time from ⚙ Settings → Run the setup wizard again, and the in-app Help & guides (tray menu or Settings) has the same content offline.

fun-asr-realtime, and MiMo per-segment. FunASR provides live partials; MOSS emits a finalized utterance after a pause.A:EN) and the teleprompter output flips to English too. Built for English interviews and code-switching conversations..md/.txt/.docx/.pdf; parsing is local and deterministic, nothing gets uploaded. Question-type detection (behavioral / technical / smalltalk) appends a zero-latency answering hint.prompt_cache_hit_tokens); kept warm automatically during capture.| Dark | Light |
|---|---|
![]() | ![]() |

Settings → Appearance → UI Language: the whole interface — title bar, panels, tooltips, dialogs — flips instantly. The screenshots above show the English UI; the Chinese one is in README.zh-CN.md.

A Chinese question, then an English one — same session, nothing reconfigured. The local ASR picks up the language switch automatically (both at ~1.6 s), and after one click on 答:EN the answer streams out in English, still grounded in the same resume.

| Backend | Latency | Cost | Privacy | Notes |
|---|---|---|---|---|
Aliyun fun-asr-realtime (recommended for packaged users) | best | pay-per-use | cloud | word-by-word streaming, server-side punctuation, nothing to install |
| MiMo per-segment | ~1 s/seg | pay-per-use | cloud | simple per-utterance cloud ASR; one key can also serve the answers |
| Local FunASR streaming (default when running from source) | ~1.2–1.8 s | free | ✅ fully local | Fun-ASR-Nano (zh+en, punctuation) or paraformer true streaming (zh-only, snappier subtitles) |
| MOSS-Transcribe-Diarize 0.9B (experimental) | finalized after a pause | free | ✅ fully local | 50+ languages, hotwords, long-form diarization; live mode consumes transcript text only |
| Local Whisper turbo | ~2 s on supported Windows GPUs | free | ✅ fully local | DirectML on Windows; CPU fallback elsewhere |
Which one should you pick? If you installed the packaged build, use a cloud backend: it needs one API key and nothing else. The local backends are an advanced option — free and fully private, but you have to bring your own Python environment and let the model weights download, and the installer ships neither.
| Component | Requirement |
|---|---|
| OS | Windows 10 / 11, or Apple-silicon macOS 14+ |
| Cloud ASR (recommended) | Alibaba Cloud DashScope API key, or a MiMo key |
| LLM | Any OpenAI-compatible API key — DeepSeek recommended (fast, cheap, prefix caching) |
| Local streaming ASR | Python 3.10/3.11 with funasr + torch; CUDA, Apple MPS, or CPU fallback |
| Experimental MOSS ASR | isolated Python 3.12 env; NVIDIA CUDA BF16 first, automatic CPU fallback |
| Local Whisper (offline fallback) | whisper-large-v3-turbo ONNX weights; DirectML on Windows, CPU elsewhere |
| Running from source | Node.js ≥ 20 and npm |
Audio capture, Python setup, stealth behavior and hotkeys differ per platform — each OS has its own guide:
| Platform | Audio capture | Stealth | Guide |
|---|---|---|---|
| 🪟 Windows 10 / 11 | system loopback — zero config | window excluded from captures | docs/windows/SETUP.md |
| 🍎 macOS 14+ (Apple silicon) | input device + BlackHole routing | best-effort (ScreenCaptureKit may capture) | docs/macos/SETUP.md |
One-time Python environment, then the app auto-spawns and reaps the sidecar
(tools/funasr_stream_server.py, ws://127.0.0.1:10097) — selecting the preset
in Settings is all you do. The selected model downloads automatically from
ModelScope on first run (~880 MB for paraformer, ~1.7 GB for Nano). --device auto picks CUDA / Apple MPS / CPU with automatic CPU fallback.
.venv, Apple MPS): see docs/macos/SETUP.mdIf your Python lives elsewhere, set MC_FUNASR_PYTHON to its full path.
MOSS is a one-shot generative model, not native streaming ASR. MeetingCopilot invokes the isolated tools/moss_asr_server.py sidecar after an utterance ends instead of repeatedly decoding a growing buffer. CUDA BF16 is attempted first and initialization failures fall back to CPU; the existing FunASR environment and default remain unchanged.
MC_MOSS_PYTHON; force a device with MC_MOSS_DEVICE=cuda:0 or cpu.Place onnx-community/whisper-large-v3-turbo-ONNX under <userData>/models/onnx-community/whisper-large-v3-turbo-ONNX/ — %APPDATA%/MeetingCopilot/ on Windows, ~/Library/Application Support/MeetingCopilot/ on macOS (encoder_model_fp16.onnx, decoder_model_merged_quantized.onnx, plus config/tokenizer files). The encoder uses DirectML on Windows and CPU elsewhere.
wss://dashscope.aliyuncs.com/api-ws/v1/inference, model fun-asr-realtime or paraformer-realtime-v2.https://api.xiaomimimo.com/v1, model mimo-v2.5-asr.safeStorage (Windows DPAPI / macOS Keychain) and never reach the renderer process.userData directory (%APPDATA%/MeetingCopilot/ on Windows and ~/Library/Application Support/MeetingCopilot/ on macOS). No telemetry, no accounts, no server.git clone https://github.com/JWM0203/MeetingCopilot.git
cd MeetingCopilot
npm install # postinstall applies patches/ (transformers.js patch — do not remove)
npm run build # builds main + preload + renderer into out/
npm start # cross-platform; Windows can also use start.bat
Running from source starts the same first-run wizard as the packaged build. Set MC_DEV_DEFAULT_LOCAL_ASR=1 to skip it and go straight to the overlay with the local FunASR defaults.
npm test # unit tests (prompt building / VAD / stores / doc parsing / ASR protocol / tray / links)
npm run typecheck # dual tsconfig (main + renderer)
npm run dev # vite HMR dev mode
npm run verify # typecheck + tests + build, the pre-commit gate
npm run dist:dir # unpacked build into release/win-unpacked
npm run dist:win # nsis + portable installers
npm run smoke:packaged # boots the packaged exe and asserts both startup paths
node tools/rt-asr-smoke.mjs # streaming-ASR protocol smoke (set MC_RT_URL / MC_RT_KEY)
Platform setup for developers (python envs, audio routing, stealth): docs/windows/SETUP.md · docs/macos/SETUP.md.
🇨🇳 If npm / Electron downloads are slow in China, create a
.npmrccontainingregistry=https://registry.npmmirror.comandelectron_mirror=https://npmmirror.com/mirrors/electron/.
Architecture in one line: Electron main process (window / stealth / tray / IPC / LLM routing / ASR host) → ASR engines inside a utilityProcess (never the main process — DirectML inference wedges there) → React renderer (transcript pane + answer session pane); all state lives in plain JSON files, never DOM storage.
This tool is intended for personal learning and assistive use. Whether and how real-time assistance may be used in meetings or interviews depends on your local laws and the policies of the other party — you are solely responsible for how you use this software.
Apache License 2.0 — free to use, modify and redistribute, including commercially, under the terms of the license.
51 commits
2 commits
TypeScript
87.0%
CSS
4.2%
Python
4.1%
JavaScript
3.9%