Skip to content
equanimitechPublic

About

macOS: Apple Voice Memos → markdown transcripts, locally. Uses Apple's transcript when it's English, Whisper otherwise.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

8 Commits

Folders and files

Repository files navigation

murmur

macOS only. Turns Apple Voice Memos into markdown transcripts. Local only, stdlib only.

Uses Apple's own transcript when it exists and the memo is English; otherwise transcribes with whisper.cpp.

Install

brew install whisper-cpp ffmpeg
uv tool install git+https://github.com/equanimitech/murmur
murmur setup

murmur setup checks for ffmpeg and whisper-cli, then finds a whisper model or downloads ggml-large-v3-turbo.bin (~1.6 GB) into ~/Library/Application Support/murmur/. If a tool is missing it says which, skips the download and exits 1. It is idempotent. Model lookup order: $MURMUR_MODEL (used as-is when set), murmur's own folder, then a copy Vibe already downloaded, if any. sync and transcribe never download. With no model they exit non-zero and point to murmur setup.

Usage

murmur list [--limit N] [--json]           # date, duration, title, id, has Apple transcript
murmur sync [--out DIR] [--since YYYY-MM-DD] [--force]
murmur transcribe <id | filename | path>    # one transcript to stdout
murmur setup                                # check tools, fetch the model if missing

sync writes DIR/YYYY-MM-DD-HHMM-<slug>.md (default ~/Documents/murmur) with frontmatter: id, date, duration, title, source (apple|whisper), language. It skips memos already written (unless --force), skips audio evicted to iCloud, and holds a lock in DIR, so a file watch can fire it repeatedly.

Claude Code skill

/plugin marketplace add equanimitech/marketplace
/plugin install murmur@equanimitech

Then say "sync my voice memos" or "review my memos" (or /murmur). The skill runs murmur sync, lists transcripts with no reviewed: field, newest first, and summarizes each one in its own language: gist, decisions, action items, ideas, people. On your OK it hands action items to a task tool you have connected and adds reviewed: YYYY-MM-DD to the frontmatter. Transcript content never leaves the session without your consent.

No MCP server is included: the skill uses the CLI and the files directly.

Caveats

  • Apple transcripts are English-only. Apple forces an English locale, so PT/FR memos get garbage text. murmur trusts Apple's transcript only when whisper detects en.
  • Apple writes its transcript hours or a day after recording. Memos under 2 days old with no Apple transcript are left for a later sync.
  • Voice Memos data sits in a protected Group Container. The process running murmur needs Full Disk Access: your terminal for manual runs, the host process for unattended ones. For zenborg that's the zenborg-daemon binary inside zenborg.app (System Settings → Privacy & Security → Full Disk Access).

Unattended sync (zenborg)

A jobs.json entry that runs murmur sync five minutes after Voice Memos stops writing:

{
  "voicememos": {
    "id": "voicememos",
    "name": "voicememos",
    "enabled": true,
    "program": "murmur",
    "args": ["sync"],
    "env": { "PATH": "~/.local/bin:/opt/homebrew/bin:/usr/bin:/bin" },
    "trigger": {
      "kind": "watch",
      "paths": [
        "~/Library/Group Containers/group.com.apple.VoiceMemos.shared/Recordings/CloudRecordings.db",
        "~/Library/Group Containers/group.com.apple.VoiceMemos.shared/Recordings/CloudRecordings.db-wal"
      ],
      "debounceSeconds": 300
    }
  }
}

If your zenborg version doesn't expand ~ or look up bare program names on PATH, write the absolute paths instead.

About

macOS: Apple Voice Memos → markdown transcripts, locally. Uses Apple's transcript when it's English, Whisper otherwise.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages