[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-75705":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":9,"totalLinesOfCode":9,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":9,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":14,"stars30d":16,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":17,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":18,"hasPages":18,"topics":9,"createdAt":9,"pushedAt":9,"updatedAt":20,"readmeContent":21,"aiSummary":22,"trendingCount":14,"starSnapshotCount":14,"syncStatus":23,"lastSyncTime":24,"discoverSource":25},75705,"muesli","pHequals7\u002Fmuesli","pHequals7","Muesli - local meeting transcription + dictation for macOS (Granola + WisprFlow alternative)",null,"https:\u002F\u002Fgithub.com\u002FpHequals7\u002Fmuesli","Swift",465,37,0,16,73,4.74,false,"main","2026-06-12 02:03:35","\u003Cp align=\"center\">\n  \u003Cimg src=\"assets\u002Fmuesli-readme-og.jpg\" alt=\"Muesli - Speech that is free, Speech that is yours\" width=\"900\" \u002F>\n\u003C\u002Fp>\n\n\u003Ch1 align=\"center\">Muesli\u003C\u002Fh1>\n\n\u003Cp align=\"center\">\n  \u003Cstrong>Local-first dictation & meeting transcription for macOS\u003C\u002Fstrong>\u003Cbr>\n  100% on-device speech-to-text · Zero cloud costs · Privacy by default\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"LICENSE\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-blue.svg\" alt=\"MIT License\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fbuymeacoffee.com\u002Fphequals7\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FBuy%20Me%20A%20Coffee-support-yellow?logo=buymeacoffee&logoColor=white\" alt=\"Buy Me A Coffee\" \u002F>\u003C\u002Fa>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-macOS%2014.2%2B-lightgrey?logo=apple\" alt=\"macOS 14.2+\" \u002F>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FApple%20Silicon-optimized-green\" alt=\"Apple Silicon\" \u002F>\n\u003C\u002Fp>\n\n---\n\n## What is Muesli?\n\nMuesli is a **lightweight native macOS app** that combines **WisprFlow-style dictation** and **Granola-style meeting transcription** in one tool. All transcription runs locally on Apple Silicon — your audio never leaves your device unless you choose a cloud-backed meeting summary provider.\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"assets\u002Fmuesli-github-ss.png\" alt=\"Muesli interface showing dictations and meeting history\" width=\"900\" \u002F>\n\u003C\u002Fp>\n\n### Dictation\nHold your hotkey (or double-tap for hands-free mode) → speak → release → transcribed text is pasted at your cursor. **~0.13 second latency** via Parakeet TDT on the Apple Neural Engine.\n\n### Meeting Transcription\nStart a meeting recording → Muesli captures your mic (You) and system audio (Others) simultaneously → VAD-driven chunked transcription happens during the meeting at natural speech boundaries → speaker diarization identifies individual remote speakers (Speaker 1, Speaker 2, etc.) → when you stop, the transcript is ready in seconds, not minutes. Generate structured meeting notes via OpenAI, free OpenRouter models, your ChatGPT Plus\u002FPro subscription, or local Ollama models.\n\n---\n\n## Features\n\n- **Native Swift, zero Python** — Pure Swift app with CoreML and Metal backends. No bundled runtimes, no subprocess IPC.\n- **Multiple ASR models** — Parakeet TDT (Neural Engine), Cohere Transcribe 2B (mixed precision CoreML), Whisper Small\u002FMedium\u002FLarge Turbo (CoreML\u002FANE via WhisperKit), and Qwen3 ASR (52 languages, CoreML).\n- **Hold-to-talk & hands-free** — Hold hotkey for quick dictation, or double-tap for sustained recording.\n- **Meeting recording** — Captures mic + system audio (including Bluetooth\u002FAirPods) with a CoreAudio process tap by default and ScreenCaptureKit fallback. System audio from Zoom, Teams, and other call clients stays on the Others side of the transcript.\n- **VAD-driven chunk rotation** — Silero VAD detects natural speech boundaries in real-time, splitting mic audio at pauses instead of fixed intervals. No mid-sentence cuts.\n- **Speaker diarization** — Identifies individual speakers in system audio (Speaker 1, Speaker 2, etc.) using FluidAudio's pyannote-based CoreML diarization model.\n- **Camera-based meeting detection** — Detects when your webcam + mic activate in a recognized meeting app (Zoom, Chrome, Teams, FaceTime, Slack, WhatsApp). Camera alone (e.g. Photo Booth) won't trigger false positives.\n- **Join & Record** — Extracts meeting URLs from calendar events (Zoom, Google Meet, Teams, Webex, Chime, FaceTime). Split-button notification: \"Join & Record\" opens the meeting + starts recording, \"Join Only\" opens without recording, \"Record Only\" starts recording without joining. Platform icons (Zoom, Meet) in the notification panel.\n- **Google Calendar integration** — Connect your Google Calendar to see upcoming meetings in the Coming Up section and status bar. Event-driven notifications via `EKEventStoreChangedNotification` for instant calendar change detection. Pre-meeting countdowns via Marauder's Map easter egg.\n- **Meeting export** — Export meeting notes or transcripts as PDF (paginated US Letter) or Markdown. Format picker in the save panel, auto-opens the exported file.\n- **Meeting templates** — Built-in and custom templates for meeting notes. Choose a template before or after recording — re-summarize any meeting with a different template.\n- **Dismiss calendar events** — Hide irrelevant events from Coming Up, status bar, and menu bar. Dismissed events are pruned automatically.\n- **Filler word removal** — Automatically strips \"uh\", \"um\", \"er\", \"hmm\" and verbal disfluencies.\n- **AI meeting notes** — BYOK with OpenAI or OpenRouter, sign in with your ChatGPT Plus\u002FPro subscription (no API key needed), or use local Ollama models. Auto-generated meeting titles. Re-summarize any meeting.\n- **ChatGPT OAuth** — Sign in with your existing ChatGPT subscription via browser-based OAuth (PKCE). Tokens stored in the app support directory with owner-only file permissions.\n- **Personal dictionary** — Add custom words, phrase matches, and replacement pairs. Jaro-Winkler fuzzy matching auto-corrects transcription output.\n- **Model management** — Download, delete, and switch between models from the Models tab. Background downloads that don't block the app.\n- **Configurable hotkeys** — Choose any modifier key (Cmd, Option, Ctrl, Fn, Shift) for dictation.\n- **Onboarding** — First-launch wizard with model selection, real OS permission verification, hotkey configuration, smoother Accessibility handoff, live dictation test to verify the full pipeline works, and optional summary setup for ChatGPT, OpenAI, OpenRouter, or Ollama. Progress saved on every step — survives crashes and manual quits.\n- **Launch at Login** — Start Muesli automatically with macOS login items, with approval-state refresh in Settings.\n- **Dark & light mode** — Adaptive theme with toggle in sidebar.\n- **SwiftUI dashboard** — Dictation history, meeting notes (Notes-style split view), meeting folders, dictionary, models, shortcuts, settings, about page.\n- **Floating indicator** — Frosted glass pill with dynamic waveform, accent color customization, and click-to-stop for meetings.\n\n---\n\n## Install\n\n### Download (recommended)\n\nDownload the latest `.dmg` from [Releases](https:\u002F\u002Fgithub.com\u002FpHequals7\u002Fmuesli\u002Freleases), open it, and drag Muesli to Applications — or double-click to install automatically.\n\n### Homebrew\n\n```bash\nbrew tap pHequals7\u002Fmuesli\nbrew install --cask muesli\n```\n\n### Build from source\n\n**Requirements:** macOS 14.2+, Xcode 16+\n\n```bash\n# Clone\ngit clone https:\u002F\u002Fgithub.com\u002FpHequals7\u002Fmuesli.git\ncd muesli\n\n# Build and install to \u002FApplications\n.\u002Fscripts\u002Fbuild_native_app.sh\n\n# Contributor dev build without the maintainer Developer ID certificate\nMUESLI_SKIP_SIGN=1 .\u002Fscripts\u002Fdev-test.sh\n```\n\nRelease builds are signed by the maintainer Developer ID certificate. External\ncontributors can use the unsigned dev build for local testing; it installs\n`MuesliDev.app` with a separate bundle ID and app data directory.\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for the full local development workflow.\n\nThe transcription model (~450MB for Parakeet v3) downloads automatically on first use.\n\n---\n\n## Agent CLI\n\nMuesli bundles an agent-friendly local CLI inside the app bundle:\n\n- Installed path: `\u002FApplications\u002FMuesli.app\u002FContents\u002FMacOS\u002Fmuesli-cli`\n- Dev path: `native\u002FMuesliNative\u002F.build\u002Farm64-apple-macosx\u002Fdebug\u002Fmuesli-cli`\n\nThe CLI is designed for coding agents such as Codex and Claude Code. It exposes meetings, dictations, raw transcripts, and stored notes as stable JSON so an agent can analyze them with its own model and write notes back without requiring a user-supplied OpenAI or OpenRouter key.\n\n### What agents should do\n\n1. Discover the CLI:\n   ```bash\n   command -v muesli-cli || echo \"\u002FApplications\u002FMuesli.app\u002FContents\u002FMacOS\u002Fmuesli-cli\"\n   ```\n2. Inspect the command contract:\n   ```bash\n   \u002FApplications\u002FMuesli.app\u002FContents\u002FMacOS\u002Fmuesli-cli spec\n   ```\n3. List recent meetings or dictations:\n   ```bash\n   \u002FApplications\u002FMuesli.app\u002FContents\u002FMacOS\u002Fmuesli-cli meetings list --limit 10\n   \u002FApplications\u002FMuesli.app\u002FContents\u002FMacOS\u002Fmuesli-cli dictations list --limit 10\n   ```\n4. Fetch a full record:\n   ```bash\n   \u002FApplications\u002FMuesli.app\u002FContents\u002FMacOS\u002Fmuesli-cli meetings get 125\n   \u002FApplications\u002FMuesli.app\u002FContents\u002FMacOS\u002Fmuesli-cli dictations get 42\n   ```\n5. Summarize or analyze locally in the agent.\n6. Write improved meeting notes back:\n   ```bash\n   cat notes.md | \u002FApplications\u002FMuesli.app\u002FContents\u002FMacOS\u002Fmuesli-cli meetings update-notes 125 --stdin\n   ```\n\n### Commands\n\n- `muesli-cli spec`\n- `muesli-cli info`\n- `muesli-cli meetings list [--limit N] [--folder-id ID]`\n- `muesli-cli meetings get \u003Cid>`\n- `muesli-cli meetings update-notes \u003Cid> (--stdin | --file \u003Cpath>)`\n- `muesli-cli dictations list [--limit N]`\n- `muesli-cli dictations get \u003Cid>`\n\n### JSON contract\n\nAll CLI commands return JSON on stdout.\n\nSuccess shape:\n\n```json\n{\n  \"ok\": true,\n  \"command\": \"muesli-cli meetings get\",\n  \"data\": {},\n  \"meta\": {\n    \"schemaVersion\": 1,\n    \"generatedAt\": \"2026-03-17T00:00:00Z\",\n    \"dbPath\": \"\u002FUsers\u002Fexample\u002FLibrary\u002FApplication Support\u002FMuesli\u002Fmuesli.db\",\n    \"warnings\": []\n  }\n}\n```\n\nFailure shape:\n\n```json\n{\n  \"ok\": false,\n  \"command\": \"muesli-cli meetings get 999\",\n  \"error\": {\n    \"code\": \"not_found\",\n    \"message\": \"No meeting exists with id 999.\",\n    \"fix\": \"Run `muesli-cli meetings list` to find a valid ID.\"\n  },\n  \"meta\": {\n    \"schemaVersion\": 1,\n    \"generatedAt\": \"2026-03-17T00:00:00Z\",\n    \"dbPath\": \"\",\n    \"warnings\": []\n  }\n}\n```\n\nImportant meeting fields:\n\n- `rawTranscript`\n- `formattedNotes`\n- `notesState`\n- `calendarEventID`\n- `micAudioPath`\n- `systemAudioPath`\n\n`notesState` values:\n\n- `missing`\n- `raw_transcript_fallback`\n- `structured_notes`\n\n### Notes for agent authors\n\n- The CLI is JSON-first and intended to be machine-consumed.\n- `formattedNotes` is the only write-back surface in v1.\n- `rawTranscript` is read-only and should be treated as source material.\n- If `notesState` is `missing` or `raw_transcript_fallback`, agents should prefer summarizing from `rawTranscript`.\n- Use `--db-path` or `--support-dir` only when the default Muesli data location is wrong.\n\n---\n\n## Models\n\n| Model | Backend | Runtime | Size | Languages | Latency |\n|-------|---------|---------|------|-----------|---------|\n| **Parakeet v3** (recommended) | FluidAudio | CoreML \u002F Neural Engine | ~450 MB | 25 languages | ~0.13s |\n| Parakeet v2 | FluidAudio | CoreML \u002F Neural Engine | ~450 MB | English only | ~0.13s |\n| **Cohere Transcribe 2B** | CoreML | FP16 encoder + INT8 decoder | ~3.8 GB | English | ~1s |\n| Qwen3 ASR | FluidAudio | CoreML \u002F Neural Engine | ~1.3 GB | 52 languages | ~2-3s |\n| Whisper Small | WhisperKit | CoreML \u002F Neural Engine | ~190 MB | English only | ~1-2s |\n| Whisper Medium | WhisperKit | CoreML \u002F Neural Engine | ~1.5 GB | English only | ~2-3s |\n| Whisper Large Turbo | WhisperKit | CoreML \u002F Neural Engine | ~600 MB | Multilingual | ~2-4s |\n\nCohere Transcribe is a 2B parameter model (#1 on Open ASR Leaderboard) running in mixed precision — FP16 FastConformer encoder on the Neural Engine with INT8 quantized decoders. Includes VAD-gated silence detection to prevent hallucination. Best for high-accuracy English dictation.\n\nModels download on demand from HuggingFace. Manage them from the **Models** tab in the dashboard.\n\n---\n\n## Permissions\n\nMuesli needs these macOS permissions (guided during onboarding):\n\n| Permission | Why |\n|---|---|\n| **Microphone** | Record audio for dictation and meetings |\n| **System Audio Recording** | Capture call audio from Zoom\u002FMeet\u002FTeams |\n| **Accessibility** | Simulate Cmd+V to paste transcribed text |\n| **Input Monitoring** | Detect hotkey presses globally |\n| **Camera** *(implicit)* | Detect webcam activation for meeting detection |\n| **Calendar** *(optional)* | Show upcoming meetings from Google Calendar |\n\n---\n\n## Tech Stack\n\n| Component | Technology |\n|---|---|\n| App | Swift, AppKit, SwiftUI |\n| Primary ASR | [FluidAudio](https:\u002F\u002Fgithub.com\u002FFluidInference\u002FFluidAudio) (Parakeet TDT + Qwen3 ASR on CoreML\u002FANE) |\n| Cohere ASR | [Cohere Transcribe](https:\u002F\u002Fhuggingface.co\u002FCohereLabs\u002Fcohere-transcribe-03-2026) (FP16 encoder + INT8 decoder on CoreML) |\n| Whisper ASR | [WhisperKit](https:\u002F\u002Fgithub.com\u002Fargmaxinc\u002FWhisperKit) (CoreML\u002FANE) |\n| Voice activity | Silero VAD via FluidAudio (streaming, event-driven) |\n| Speaker diarization | pyannote via FluidAudio (CoreML on ANE) |\n| Camera detection | CoreMediaIO property listeners (event-driven) |\n| System audio | CoreAudio process tap by default; ScreenCaptureKit (`SCStream`) fallback |\n| Meeting notes | OpenAI \u002F OpenRouter (BYOK), ChatGPT subscription (OAuth), or Ollama |\n| Calendar | Google Calendar API (OAuth 2.0) |\n| Export | PDF (NSPrintOperation, paginated US Letter) + Markdown |\n| Word correction | Jaro-Winkler similarity (native Swift) |\n| Storage | SQLite (WAL mode) |\n| Signing | Developer ID + hardened runtime (notarization ready) |\n\n---\n\n## Contributing\n\nContributions welcome! To get started:\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FpHequals7\u002Fmuesli.git\ncd muesli\nswift build --package-path native\u002FMuesliNative -c release\nswift test --package-path native\u002FMuesliNative\n.\u002Fscripts\u002Ftest_packaged_cli.sh\n```\n\n684 tests covering model configuration, custom word and phrase matching, filler removal, transcription routing, data persistence, CLI contract\u002Fpath-resolution logic, speaker diarization alignment, token consolidation, camera-based meeting detection, CoreAudio system capture, ChatGPT OAuth logic, Ollama summaries, update-flow policy, launch at login, paste\u002Fclipboard safety, meeting export, meeting navigation, and Google Calendar URL extraction.\n\nCurrent test scope:\n\n- Covered by tests: CLI command contract generation, CLI path-resolution logic, SQLite read\u002Fwrite behavior, note-state classification, meeting\u002Fdictation retrieval\u002Fupdate flows, update-flow policy, CoreAudio cleanup, paste\u002Fclipboard safety, launch at login, Ollama summary routing, and Computer Use planner foundations.\n- Not covered by Swift unit tests: app-bundle packaging and copying `muesli-cli` into `\u002FApplications\u002FMuesli.app\u002FContents\u002FMacOS`.\n- Packaging is verified by `scripts\u002Ftest_packaged_cli.sh`, which builds an isolated app bundle, checks that `Contents\u002FMacOS\u002Fmuesli-cli` exists and is executable, and runs `muesli-cli spec` from the packaged path.\n\nPlease open an issue before submitting large PRs.\n\n---\n\n## Support\n\nIf Muesli saves you time, consider supporting development:\n\n\u003Ca href=\"https:\u002F\u002Fbuymeacoffee.com\u002Fphequals7\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FBuy%20Me%20A%20Coffee-support-yellow?style=for-the-badge&logo=buymeacoffee&logoColor=white\" alt=\"Buy Me A Coffee\" \u002F>\u003C\u002Fa>\n\n---\n\n## Acknowledgements\n\n- [FluidAudio](https:\u002F\u002Fgithub.com\u002FFluidInference\u002FFluidAudio) — CoreML speech models for Apple devices (Parakeet TDT, Qwen3 ASR, Silero VAD, speaker diarization)\n- [WhisperKit](https:\u002F\u002Fgithub.com\u002Fargmaxinc\u002FWhisperKit) — Swift Whisper inference on CoreML\u002FANE\n- [Core Audio](https:\u002F\u002Fdeveloper.apple.com\u002Fdocumentation\u002Fcoreaudio) by Apple — system audio process taps\n- [ScreenCaptureKit](https:\u002F\u002Fdeveloper.apple.com\u002Fdocumentation\u002Fscreencapturekit) by Apple — system audio fallback capture\n- [NVIDIA Parakeet](https:\u002F\u002Fhuggingface.co\u002Fnvidia\u002Fparakeet-tdt-0.6b-v3) — FastConformer TDT speech recognition model\n- [Cohere Transcribe](https:\u002F\u002Fhuggingface.co\u002FCohereLabs\u002Fcohere-transcribe-03-2026) — 2B parameter autoregressive ASR (#1 Open ASR Leaderboard)\n- [Qwen3-ASR](https:\u002F\u002Fhuggingface.co\u002FQwen\u002FQwen3-ASR-0.6B) — Multilingual speech recognition (52 languages)\n- [pyannote](https:\u002F\u002Fgithub.com\u002Fpyannote\u002Fpyannote-audio) — Speaker diarization (via FluidAudio CoreML conversion)\n\n---\n\n## License\n\n[MIT](LICENSE) — free and open source.\n\n## Star History\n\n\u003Ca href=\"https:\u002F\u002Fwww.star-history.com\u002F?repos=phequals7%2Fmuesli&type=date&legend=top-left\">\n \u003Cpicture>\n   \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fchart?repos=phequals7\u002Fmuesli&type=date&theme=dark&legend=top-left\" \u002F>\n   \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fchart?repos=phequals7\u002Fmuesli&type=date&legend=top-left\" \u002F>\n   \u003Cimg alt=\"Star History Chart\" src=\"https:\u002F\u002Fapi.star-history.com\u002Fchart?repos=phequals7\u002Fmuesli&type=date&legend=top-left\" \u002F>\n \u003C\u002Fpicture>\n\u003C\u002Fa>\n","Muesli 是一款专为 macOS 设计的本地会议转录和听写应用。它通过利用苹果设备上的神经引擎，提供低延迟（约0.13秒）的实时语音转文字服务，所有处理都在本地完成，确保用户隐私。Muesli 支持多种自动语音识别模型，包括Parakeet TDT、Cohere Transcribe 2B以及Whisper系列模型等，并且能够同时录制麦克风输入与系统音频，适用于Zoom、Teams等远程会议场景下的会议记录。此外，该软件还具备VAD驱动的分块转录功能，可智能识别自然语言边界，避免句子中间被切断；并通过说话人分离技术准确区分不同发言者。适合需要高效、安全地进行会议纪要整理或日常听写工作的macOS用户使用。",2,"2026-05-18 11:12:32","trending"]