Skip to main content

Fully local meeting transcription and summarization CLI

Project description

ownscribe

Local-first meeting transcription and summarization CLI. Record, transcribe, and summarize meetings and system audio entirely on your machine – no cloud, no bots, no data leaving your device.

Features

  • System audio capture — records all system audio natively via Core Audio Taps (macOS 14.2+), no virtual audio drivers needed
  • Microphone capture — optionally record system + mic audio simultaneously with --mic
  • WhisperX transcription — fast, accurate speech-to-text with word-level timestamps
  • Speaker diarization — optional speaker identification via pyannote (requires HuggingFace token)
  • Local LLM summarization — structured meeting notes via Ollama, LM Studio, or any OpenAI-compatible server
  • One command — just run ownscribe, press Ctrl+C when done, get transcript + summary

Requirements

  • macOS 14.2+ (for system audio capture)
  • Python 3.12+
  • uv
  • Xcode Command Line Tools (xcode-select --install)
  • One of:
    • Ollamabrew install ollama
    • LM Studio
    • Any OpenAI-compatible local server

Works with any app that outputs audio through Core Audio (Zoom, Teams, Meet, etc.).

Installation

Quick start with uvx

uvx ownscribe

On macOS, the Swift audio capture helper is downloaded automatically on first run.

From source

# Clone the repo
git clone https://github.com/paberr/ownscribe.git
cd ownscribe

# Build the Swift audio capture helper (optional — auto-downloads if skipped)
bash swift/build.sh

# Install with transcription support
uv sync --extra transcription

# Pull a model for summarization (if using Ollama)
ollama pull mistral

Usage

Record, transcribe, and summarize a meeting

ownscribe                    # records system audio, Ctrl+C to stop

This will:

  1. Capture system audio until you press Ctrl+C
  2. Transcribe with WhisperX
  3. Summarize with your local LLM
  4. Save everything to ~/ownscribe/YYYY-MM-DD_HHMMSS/

Options

ownscribe --mic                               # capture system audio + default mic
ownscribe --mic-device "MacBook Pro Microphone" # capture system audio + specific mic
ownscribe --device "MacBook Pro Microphone"   # use mic instead of system audio
ownscribe --no-summarize                      # skip LLM summarization
ownscribe --diarize                           # enable speaker identification
ownscribe --model large-v3                    # use a larger Whisper model
ownscribe --format json                       # output as JSON instead of markdown

Subcommands

ownscribe devices                  # list audio devices (uses native CoreAudio when available)
ownscribe apps                     # list running apps with PIDs for use with --pid
ownscribe transcribe recording.wav # transcribe an existing audio file
ownscribe summarize transcript.md  # summarize an existing transcript
ownscribe config                   # open config file in $EDITOR

Configuration

Config is stored at ~/.config/ownscribe/config.toml. Run ownscribe config to create and edit it.

[audio]
backend = "coreaudio"     # "coreaudio" or "sounddevice"
device = ""               # empty = system audio
mic = false               # also capture microphone input
mic_device = ""           # specific mic device name (empty = default)

[transcription]
model = "base"            # tiny, base, small, medium, large-v3
language = ""             # empty = auto-detect

[diarization]
enabled = false
hf_token = ""             # HuggingFace token for pyannote

[summarization]
enabled = true
backend = "ollama"        # "ollama" or "openai"
model = "mistral"
host = "http://localhost:11434"

[output]
dir = "~/ownscribe"
format = "markdown"       # "markdown" or "json"

Precedence: CLI flags > environment variables (HF_TOKEN, OLLAMA_HOST) > config file > defaults.

Speaker Diarization

Speaker identification requires a HuggingFace token with access to the pyannote models:

  1. Accept the terms for both models on HuggingFace:
  2. Create a token at https://huggingface.co/settings/tokens
  3. Set HF_TOKEN env var or add hf_token to config
  4. Run with --diarize

Acknowledgments

ownscribe builds on some excellent open-source projects:

  • WhisperX — fast speech recognition with word-level timestamps and speaker diarization
  • faster-whisper — CTranslate2-based Whisper inference
  • pyannote.audio — speaker diarization
  • Ollama — local LLM serving
  • Click — CLI framework

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ownscribe-0.1.0.tar.gz (12.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ownscribe-0.1.0-py3-none-any.whl (19.8 kB view details)

Uploaded Python 3

File details

Details for the file ownscribe-0.1.0.tar.gz.

File metadata

  • Download URL: ownscribe-0.1.0.tar.gz
  • Upload date:
  • Size: 12.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for ownscribe-0.1.0.tar.gz
Algorithm Hash digest
SHA256 d80d4e29aa0b6b5269dfaad86ec2b4ac071680d5928f526bd57d7d2dbe937ba3
MD5 bf3b34ff37cab6c4cca47bc47d8c6c20
BLAKE2b-256 8116f9eaef576a1e0d8330e95d840f1858d6ffe0f740dcbd4ec5ce3f59f0b0c9

See more details on using hashes here.

File details

Details for the file ownscribe-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: ownscribe-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 19.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for ownscribe-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fbbbf0d790f60e0db6fb483009b40920e5df7f3c3c538579e24b32db82d5a5ee
MD5 48e20b1f36710cb0c7b84ed3fae23d62
BLAKE2b-256 cdf7dee4e3fad4fffe59281fe7c64f389cac8494145c7ca15b1f2f139be273aa

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page