Open Source · Local · AI Speech-to-Text
Speak to type, convert audio to text, AI auto-polish. Powered by FunASR, all on your device.
English · 简体中文
🦊 Brand cover by Azhou · Screenshot archive
Murmur is a local-first speech-to-text tool optimized for Chinese. It's more than "voice input" — press a hotkey to dictate and text appears at your cursor; import audio files for batch transcription and export; then let AI remove filler words or turn the transcript into meeting notes or a Xiaohongshu post. Everything happens on your computer, no internet, no uploads.
Positioning: Murmur doesn't compete head-on with macOS/Windows system dictation on real-time latency. It focuses on three things system dictation can't do — file transcription, AI post-processing, and fully local + customizable models. Real-time streaming is on the roadmap (see Roadmap).
| Capability | Murmur | macOS Dictation | iFlytek | Whisper Desktop |
|---|---|---|---|---|
| File Transcription | ✅ | ❌ | ✅ | ✅ |
| AI Post-processing | ✅ | ❌ | ❌ | ❌ |
| Fully Local | ✅ | ✅ | ❌ | ✅ |
| Custom Prompts | ✅ | ❌ | ❌ | ❌ |
| 11+ AI Models | ✅ | ❌ | ❌ | ❌ |
| Desktop (macOS/Windows) | ✅ | macOS only | ❌ | Windows only |
| Open Source | ✅ | ❌ | ❌ | ✅ |
System dictation wins on real-time latency (streaming); Murmur wins on "what you can do after transcription" (AI polish + batch files + privacy). They can coexist.
| 🎤 Accurate Chinese | 🤖 AI Polish | 📁 File Transcription | 🔒 Fully Local |
|---|---|---|---|
| FunASR Paraformer-large | Filler removal, fix, summarize | wav/mp3/m4a/flac batch | Zero data upload |
| ⌨️ Global Hotkey | 🌐 11+ AI Models | 💾 History | 🌍 i18n |
|---|---|---|---|
Cmd+Shift+Space |
OpenAI/DeepSeek/Qwen/GLM/Ollama | SQLite + search + export | zh-CN / English |
🤖 Meet the animated Bot mascot — the little fellow in the title bar morphs with app state: eyes wide open while recording, thinking dots while recognizing, a comet when a transcription finishes. The engine is ported from bloub (MIT) with frame-by-frame measured animation constants, replicated with zero drift. Pick its shape / color / expression under Settings → General.
AI polish pipeline (transcript → Xiaohongshu-style post):
macOS app UI:
murmur-intro-15s.mp4
▶ Watch the 15-second intro — speak to type, AI polish, fully local. Also archived in-repo: MP4 and a no-BGM version for your own soundtrack.
Download the latest build from Releases:
- macOS:
Murmur-<version>-arm64.dmg - Windows:
Murmur.Setup.<version>.exe
Package managers (planned): Homebrew (
brew install --cask murmur) and Winget (winget install TeFuirnever.Murmur) are coming soon — cask/manifest definitions live indocs/homebrew/anddocs/winget/but are not yet submitted upstream.Linux: no official packages for now (limited maintainer capacity — macOS/Windows quality comes first). Community contributions for Linux packaging and maintenance are welcome (issues / PRs).
First install notes
- macOS: if macOS reports "cannot verify the developer", right-click the app → Open
- macOS: if macOS says the app "is damaged and can't be opened" (v1.5.0 ships with a broken signature seal), run in Terminal:
xattr -cr /Applications/Murmur.app && codesign --force --deep --sign - /Applications/Murmur.app— details in Troubleshooting
- Windows: if SmartScreen blocks the installer, click More info → Run anyway
- Launch Murmur and wait for the model download (~671 MB the first time, instant afterwards)
- Press
Cmd+Shift+Space(macOS) orCtrl+Shift+Space(Windows) and start speaking - Text appears at your cursor
AI Polish (optional): Settings → choose provider (DeepSeek, Qwen, Ollama, etc.) → enter API key or use a local model. A built-in Quick Start guide helps you get a free API key (DeepSeek / SiliconFlow grant free credits on sign-up).
| Provider | Base URL | Needs API Key | Free tier |
|---|---|---|---|
| OpenAI | api.openai.com/v1 | ✅ | — |
| DeepSeek ⭐ | api.deepseek.com/v1 | ✅ | Sign-up bonus |
| Qwen (通义千问) | dashscope.aliyuncs.com | ✅ | New users |
| Zhipu GLM (智谱) | open.bigmodel.cn | ✅ | Sign-up bonus |
| SiliconFlow ⭐ | api.siliconflow.cn | ✅ | Sign-up bonus |
| Groq | api.groq.com | ✅ | Free tier |
| Moonshot | api.moonshot.cn | ✅ | — |
| MiniMax | api.minimaxi.com | ✅ | — |
| OpenRouter | openrouter.ai/api/v1 | ✅ | Partially free |
| Ollama (local) | localhost:11434 | ❌ | Free |
| LM Studio (local) | localhost:1234 | ❌ | Free |
⭐ Providers marked with a star are beginner-friendly — free credits on sign-up, stable access within mainland China.
Just pick a provider — Murmur fills in the base URL and models automatically.
- Node.js 22.5+ and pnpm
- Python 3.11+ (for FunASR, matching the
pyproject.tomlrequires-python)
git clone https://github.com/TeFuirnever/Murmur.git
cd Murmur
pnpm install
# Python setup (choose one)
# Option A: uv (recommended, manages the virtualenv for you)
curl -LsSf https://astral.sh/uv/install.sh | sh
uv sync
# Option B: system Python
# [20261006_Docs_423_T10] spec #412 (T10): install exactly what
# pyproject.toml declares (modelscope arrives transitively via funasr).
uv pip install -r pyproject.toml
# [20261006_Docs_423_T10] spec #412 (T10): ONNX models need NO manual
# download — the first `pnpm dev` fetches the pin-anchored onnx-int8 set
# in-app (~671MB, resumable). `uv run python download_models.py` would only
# pre-seed the LEGACY fp32 torch fallback cache, which the new engine never
# reads; it stays available solely to seed that one-version-cycle rollback.
pnpm devpnpm dev # start dev mode
pnpm test # unit tests (coverage gate enforced by ci:check)
pnpm lint # linting (0 warnings)
pnpm typecheck # TypeScript type check
pnpm ci:check # run all CI gates locally| Layer | Technology |
|---|---|
| Desktop | Electron 39 |
| Frontend | React 19, Tailwind CSS 4, Vite |
| Speech | FunASR (Paraformer-large + FSMN-VAD + CT-Transformer) |
| AI | 11+ OpenAI-compatible models + custom prompt templates |
| Storage | SQLite (node:sqlite, safeStorage encryption) |
| Document | What it covers |
|---|---|
| FAQ | Common questions |
| Troubleshooting | Install, launch, and audio issues |
| CONTRIBUTING.md | Dev setup, code standards, PR process |
| Security Policy | How to report vulnerabilities privately |
| CHANGELOG.md | Full release history |
Done:
- Local FunASR speech recognition (Paraformer-large)
- AI text optimization (11+ models, incl. local Ollama/LM Studio)
- Custom AI prompt templates
- Audio file transcription (wav/mp3/m4a/flac)
- History search (instant client-side filtering) and export (TXT/SRT/Markdown/DOCX)
- Global hotkey (
Cmd+Shift+Space) - Multi-language (Chinese/English)
- Semi-auto update (SHA256 verified)
- Accessibility (ARIA + keyboard nav)
- GPU auto-detection (CUDA > CPU; MPS intentionally skipped — FunASR float64 unsupported)
- TypeScript strict mode (full-src coverage gated, see CI)
- File config support (
~/.murmur.json) - AI Provider quick-start guide (free API key)
In Progress / Planned:
- Real-time streaming transcription (target 200ms latency)
- CLI mode (
murmur transcribe --file) - Multi-engine ASR (whisper.cpp / SenseVoice)
- Long audio chunked transcription (solves the 10-minute timeout)
- AI streaming response
See docs/follow-ups.md (open items) and CHANGELOG.md (shipped). docs/strategic-plan-gap-analysis.md is a historical strategy snapshot, kept for reference only.
PRs welcome! See CONTRIBUTING.md for setup, code standards, and the PR process.
Help & community: questions → FAQ · troubleshooting → Troubleshooting · security issues → Security Policy (please report vulnerabilities privately, not as public issues).

