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:
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:
- Capture system audio until you press Ctrl+C
- Transcribe with WhisperX
- Summarize with your local LLM
- 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:
- Accept the terms for both models on HuggingFace:
- Create a token at https://huggingface.co/settings/tokens
- Set
HF_TOKENenv var or addhf_tokento config - 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ownscribe-0.2.0.tar.gz.
File metadata
- Download URL: ownscribe-0.2.0.tar.gz
- Upload date:
- Size: 13.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
60a5842303efd46d5d4b923904b399e0c8199b1d3e19b6dfccfaf5bdef46648c
|
|
| MD5 |
760c8a9af36e355f068d47fccaeaf522
|
|
| BLAKE2b-256 |
d9e49d632957fb523d927bdc409b4bac42669363dee3b498d8a29ff0ec8ff50d
|
Provenance
The following attestation bundles were made for ownscribe-0.2.0.tar.gz:
Publisher:
publish.yml on paberr/ownscribe
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ownscribe-0.2.0.tar.gz -
Subject digest:
60a5842303efd46d5d4b923904b399e0c8199b1d3e19b6dfccfaf5bdef46648c - Sigstore transparency entry: 947435056
- Sigstore integration time:
-
Permalink:
paberr/ownscribe@5976cf3d17047ff96070ad66b5a43bcc0b43e1f7 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/paberr
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@5976cf3d17047ff96070ad66b5a43bcc0b43e1f7 -
Trigger Event:
release
-
Statement type:
File details
Details for the file ownscribe-0.2.0-py3-none-any.whl.
File metadata
- Download URL: ownscribe-0.2.0-py3-none-any.whl
- Upload date:
- Size: 20.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9363ffa0c8784c2e57b8968fc91614c239bf8020f584ca53651fe1c4439ff010
|
|
| MD5 |
13e7002c0d9003ecbca2472476aeb5f8
|
|
| BLAKE2b-256 |
8a4c3e709f8ff36ecf000934c25be1c6ed4dcb36294e2c9f3bdd5d3cf138a9a0
|
Provenance
The following attestation bundles were made for ownscribe-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on paberr/ownscribe
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ownscribe-0.2.0-py3-none-any.whl -
Subject digest:
9363ffa0c8784c2e57b8968fc91614c239bf8020f584ca53651fe1c4439ff010 - Sigstore transparency entry: 947435057
- Sigstore integration time:
-
Permalink:
paberr/ownscribe@5976cf3d17047ff96070ad66b5a43bcc0b43e1f7 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/paberr
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@5976cf3d17047ff96070ad66b5a43bcc0b43e1f7 -
Trigger Event:
release
-
Statement type: