Skip to content

Releases: paberr/ownscribe

v0.10.0

08 Mar 18:31

Choose a tag to compare

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 disable

Also 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

24 Feb 22:37

Choose a tag to compare

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_stderr gracefully falls back to no-op if fd manipulation is unavailable
  • is_available() checks whether llama-cpp-python is installed
  • chat() supports json_schema with automatic fallback chain
  • Model download in run_summarize handles errors instead of crashing
  • Comprehensive unit tests for LlamaCppSummarizer and _ensure_model

Full Changelog: v0.8.0...v0.9.0

v0.8.0

23 Feb 23:29

Choose a tag to compare

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

18 Feb 14:30

Choose a tag to compare

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_size for large model contexts

Full Changelog: v0.6.0...v0.7.0

v0.6.0

17 Feb 15:59

Choose a tag to compare

What's new

  • Summarization templates — built-in presets for different use cases: meeting (default), lecture, and brief. Select with --template lecture or 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 audioownscribe --mic no 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

16 Feb 15:58

Choose a tag to compare

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
  • device config option — new device field 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

16 Feb 14:27

Choose a tag to compare

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_prompt and prompt in [summarization] config section
  • --language flag — 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 = true in [diarization]
  • Spinner for ownscribe summarize command
  • Fix duplicate silence warning when using CoreAudio recorder

Full Changelog: v0.3.0...v0.4.0

v0.3.0

13 Feb 15:51

Choose a tag to compare

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 m during --mic recording 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

13 Feb 13:36

Choose a tag to compare

What's new

  • ownscribe cleanup command — remove config, cache, and output directories from disk
  • keep_recording config option — auto-delete WAV files after successful transcription (keep_recording = false in config or --no-keep-recording flag)
  • 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

13 Feb 12:44

Choose a tag to compare

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 commandownscribe, Ctrl+C to stop, get transcript + summary

Install

uvx ownscribe

Or from source:

git clone https://github.com/paberr/ownscribe.git
cd ownscribe
uv sync --dev

Swift 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).