Skip to main content

murmurvault

Python CI pre-commit.ci status Documentation Status codecov PyPI Version Python Versions License Ruff SPEC 0 — Minimum Supported Dependencies

Local-first recording, transcription and semantic search for meetings and voice notes.

Status: early prototype. The on-disk layout and the CLI may still change.

  • Your files, on your disk. Each recording is a directory of plain files: FLAC tracks, JSON transcripts and a meta.json. Folders are real directories. The search index is derived data and can always be rebuilt.
  • Microphone and computer audio on separate tracks. Your words are labelled me and the other side others without any model. Optional diarization splits others into individual speakers.
  • Live or later. Get a draft transcript while recording, then an accurate pass when you stop. You can also import existing files and transcribe them at any time, with any engine. Every pass is kept.
  • Any engine. Built-in faster-whisper, or any OpenAI-compatible /v1/audio/transcriptions server: a hosted API, or a local one such as speaches or whisper.cpp's server.
  • Hybrid semantic search. SQLite FTS5 (BM25) keyword search and embedding search, fused with reciprocal rank fusion, then reranked with a cross-encoder. Embedders and rerankers can be local models or API endpoints.
  • Folders and tags for organising recordings.
  • CLI for scripts and agents (--json everywhere) and a TUI for people. A GUI is planned.

Install

pip install "murmurvault[whisper,search]"          # built-in engine + semantic search
pip install "murmurvault[av]"                       # API engines only; av decodes m4a/mp4/webm imports
pip install "murmurvault[whisper,search,diarize]"  # + speaker diarization (pyannote)
pip install "murmurvault[all]"                      # everything, incl. macOS system-audio capture

System requirements:

  • Linux: PortAudio (sudo apt install libportaudio2) for the microphone. For the computer's audio, parec (pulseaudio-utils) or pw-record (PipeWire). Either works on PipeWire systems.
  • macOS 14.2+: computer-audio capture uses Core Audio process taps via the macos extra. Grant your terminal both the microphone and the system-audio recording permissions. Alternatively, point audio.system_device at a loopback device such as BlackHole.

Use headphones in calls. Otherwise the far side leaks into your microphone track.

Quick start

murmurvault record --title "Weekly sync" -f work/team -t sync   # Ctrl-C to stop
murmurvault import ~/Downloads/interview.m4a -f research -t interview
murmurvault ls
murmurvault show <id>                 # transcript; --format srt|json|meta
murmurvault search "what did we decide about the budget"
murmurvault tui

Recording consent: tell the people you record. In many places it is a legal requirement.

Commands

Command What it does
record Record mic and/or system audio (--no-mic, --no-system, --duration, --no-live)
import FILE... Import audio/video files, transcribing them unless --no-transcribe
transcribe ID (Re-)transcribe with --engine, --model, --language, --diarize
ls, show, path List, print, locate recordings (-f FOLDER, -t TAG filters)
mv, tag, rename, rm Organise recordings
folders, tags List folders and tags
search QUERY Hybrid search (-k, -f, -t, --no-rerank)
reindex Rebuild the index, e.g. after changing the embedding model
devices List audio devices
config [--init] Show the effective config, or write a commented template
tui Terminal UI

IDs can be abbreviated to any unique prefix. With --json, record streams one JSON object per live segment, followed by the final recording.

TUI keys

/ search · r start/stop recording (live draft) · t transcribe · g tags · m move · e rename · F5 refresh · Esc close results · q quit

Configuration

murmurvault config --init writes a commented config.toml to the platform config directory. Set MURMURVAULT_CONFIG to use a different file and MURMURVAULT_VAULT to use a different vault. Example of a local transcription server:

[transcription]
engine = "lan"

[engines.lan]
type = "openai"
base_url = "http://localhost:8000/v1"
api_key_env = ""
model = "Systran/faster-whisper-large-v3"

Diarization uses pyannote/speaker-diarization-community-1. Accept its conditions on Hugging Face, then export HF_TOKEN. Enable it with [diarization] enabled = true, or per run with --diarize.

Vault layout

<vault>/work/team/20261007-101500-a1b2/
  meta.json                   title, tags, tracks, track offsets, active transcript
  mic.flac  system.flac       16 kHz mono tracks
  transcript.live.json        draft made while recording
  transcript.local-small.json accurate pass (one file per engine/model)
<vault>/.murmurvault/index.db search index (derived; `murmurvault reindex`)

Development

uv sync --all-extras --group dev
uv run prek install
uv run pytest

See CONTRIBUTING.md.

License

BSD-3-Clause

Metadata

Release files for murmurvault 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for murmurvault 0.1.0
File Size Uploaded
murmurvault-0.1.0.tar.gz 351.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for murmurvault 0.1.0
File Interpreter ABI Platform
murmurvault-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 396.3 kB

Release files / murmurvault-0.1.0.tar.gz

Download URL murmurvault-0.1.0.tar.gz
Size 351.0 kB
Tags Source
SHA-256 checksum
How to use checksums
1828f7392650bf333927b51a7fdd88f776d32bcae0862568f2733945798e126a
BLAKE2b-256 checksum
How to use checksums
1601a5f2e7001ff1a39cca80999919742d9a04347c5c2eff536a673c31e3958c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / murmurvault-0.1.0-py3-none-any.whl

Download URL murmurvault-0.1.0-py3-none-any.whl
Size 45.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
686f7f032fa5fd60dc5a47c0e1ebe7d36127ee7e5101df6a94392b77f002b341
BLAKE2b-256 checksum
How to use checksums
0aa86a90d6d61f649f8d39c2f800be2554604c3bddadc8f48725e2fb5d9a1dee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page