Releases: paberr/ownscribe
v0.10.0
What's New
Silence auto-stop (#13)
Recording automatically stops after a configurable period of silence on both system audio and microphone, defaulting to 5 minutes:
[audio]
silence_timeout = 300 # seconds; 0 to disableAlso available via CLI: ownscribe --silence-timeout 120
Key details:
- When both mic and system audio are captured, the timeout only triggers once both sources have been quiet long enough
- Uses monotonic time to avoid clock drift from NTP sync or sleep/wake
- SoundDevice backend stops the stream immediately on timeout via
CallbackStop - CoreAudio backend signals the Swift helper which handles graceful shutdown
Bug fixes
- Fixed diarization progress bar stuck at 0% when the speaker model is already cached
Full Changelog: v0.9.0...v0.10.0
v0.9.0
What's New
Built-in local LLM summarization (#11)
Summarize meetings entirely on-device — no server required. A bundled GGUF model (Phi-4-mini) runs via llama-cpp-python with automatic Metal/CUDA offloading:
[summarization]
backend = "local" # new default for fresh installs
model = "phi-4-mini"Existing users with a config file are unaffected — their backend setting is preserved.
Arbitrary HuggingFace GGUF models
Use any GGUF model from HuggingFace with the hf: prefix:
[summarization]
model = "hf:unsloth/Phi-4-mini-instruct-GGUF/Phi-4-mini-instruct-Q4_K_M.gguf"README demos
Added animated pipeline simulations to the README showing the recording, transcription, and summarization flow.
Hardened local summarizer
_suppress_stderrgracefully falls back to no-op if fd manipulation is unavailableis_available()checks whetherllama-cpp-pythonis installedchat()supportsjson_schemawith automatic fallback chain- Model download in
run_summarizehandles errors instead of crashing - Comprehensive unit tests for
LlamaCppSummarizerand_ensure_model
Full Changelog: v0.8.0...v0.9.0
v0.8.0
What's New
Output files colocated with input
Transcripts and summaries are now saved alongside the input audio file instead of in a separate output directory. ownscribe transcribe and ownscribe summarize follow the same convention.
resume command
New command to pick up partially-completed pipelines:
ownscribe resume 2026-02-24_1430/
Detects what's already done (audio, transcript, summary) and resumes from there — summarize-only if a transcript exists, full pipeline if only audio is present.
Model download progress (#9)
First-run model downloads now show activity in the progress TUI instead of a silent spinner. Download progress (filename, bytes, percentage) is displayed inline below the "Preparing models" step.
Hardened failure handling
Summarization failures no longer lose the transcript. The transcript is saved first, and errors are reported without crashing.
Full Changelog: v0.7.0...v0.8.0
v0.7.0
What's New
ask command — natural-language search across meeting notes (#7)
Ask questions about your meetings in plain English:
ownscribe ask "What did Anna say about the deadline?"
How it works: A two-stage LLM pipeline first identifies relevant meetings from summaries, then answers from full transcripts with quote verification.
- Spinner UX with batch progress
- Meeting source citations in answers
- Keyword fallback when the LLM returns no results
- Configurable
context_sizefor large model contexts
Full Changelog: v0.6.0...v0.7.0
v0.6.0
What's new
- Summarization templates — built-in presets for different use cases:
meeting(default),lecture, andbrief. Select with--template lectureor in config. Define custom templates via[templates.*]in config. - LLM-generated folder titles — output folders are automatically named with a short LLM-generated title (e.g.
2026-02-17_1430_q3-budget-review/) - ffmpeg dependency check — clear error message on startup if ffmpeg is missing
Bug fixes
- Fix --mic stop timeout — increased SIGINT timeout from 5s to 30s to allow time for system+mic track merging on longer recordings; added SIGKILL fallback (#3)
- Fix --mic merge crash with no system audio —
ownscribe --micno longer crashes when no system audio is playing; mic-only recordings now produce valid output (#5)
Full Changelog: v0.5.0...v0.6.0
v0.5.0
MPS (Metal) acceleration for diarization
Diarization (pyannote) now automatically uses the Metal Performance Shaders (MPS) GPU backend on Apple Silicon Macs, providing ~10x faster speaker identification.
What's new
- MPS acceleration — diarization runs on the Apple Silicon GPU by default, reducing processing time from ~3 min to ~20s for typical recordings
deviceconfig option — newdevicefield in[diarization]config section ("auto","mps", or"cpu"); defaults to"auto"which auto-detects MPS availability
Configuration
[diarization]
device = "auto" # "auto" (mps if available), "mps", or "cpu"No action needed — existing configs will default to "auto" and benefit from GPU acceleration automatically.
Full Changelog: v0.4.0...v0.5.0
v0.4.0
What's new
- Pipeline progress checklist — live display of all pipeline steps (transcribe → diarize → summarize) with spinners, progress bars, and checkmarks
- Custom summarization prompts — configure
system_promptandpromptin[summarization]config section --languageflag — set transcription language (e.g.--language en) instead of relying on auto-detection- Diarization telemetry toggle — HuggingFace Hub and pyannote metrics telemetry are now disabled by default; opt in via
telemetry = truein[diarization] - Spinner for
ownscribe summarizecommand - Fix duplicate silence warning when using CoreAudio recorder
Full Changelog: v0.3.0...v0.4.0
v0.3.0
Mic mute/unmute toggle
Press m to mute/unmute the microphone during recording with --mic. System audio continues capturing uninterrupted — muted sections are written as silence so timing and merge are preserved.
What's new
- Mic mute toggle — press
mduring--micrecording to mute/unmute.[MIC MUTED]indicator shown on the recording timer. - Swift CI build — the Swift audio helper is now compiled on every push/PR to catch build errors early.
Full Changelog: v0.2.0...v0.3.0
v0.2.0
What's new
ownscribe cleanupcommand — remove config, cache, and output directories from diskkeep_recordingconfig option — auto-delete WAV files after successful transcription (keep_recording = falsein config or--no-keep-recordingflag)- PyPI publish workflow — releases are now automatically published to PyPI via OIDC trusted publishers
- Faster CI — lint job no longer installs full project dependencies
v0.1.0 — Initial Release
ownscribe v0.1.0
Local-first meeting transcription and summarization CLI. Record, transcribe, and summarize meetings entirely on your machine — no cloud, no bots, no data leaving your device.
Highlights
- System audio capture via Core Audio Taps (macOS 14.2+) — no virtual audio drivers needed
- Microphone capture — record system + mic simultaneously with
--mic - WhisperX transcription with word-level timestamps and optional speaker diarization
- Local LLM summarization via Ollama, LM Studio, or any OpenAI-compatible server
- One command —
ownscribe, Ctrl+C to stop, get transcript + summary
Install
uvx ownscribeOr from source:
git clone https://github.com/paberr/ownscribe.git
cd ownscribe
uv sync --devSwift Binary
The attached ownscribe-audio-arm64 binary is the native macOS audio capture helper. It is downloaded automatically on first run — no manual setup needed.
If you prefer to build from source: bash swift/build.sh (requires Xcode Command Line Tools).