Skip to content

Releases: NachoTek/meetandread

Release list

v0.19.1

Choose a tag to compare

@TerminalSausage TerminalSausage released this 09 Jun 16:01

[0.19.1] -- 2026-06-04

Fixed

  • Benchmark test data missing in release builds (Issue #13) -- PyInstaller now collects src/meetandread/performance/test_data/* including benchmark.wav and ground truth files, fixing "Test clip not found" errors in release builds
  • Speaker diarization fails in release builds (Issue #14) -- Removed soundfile dependency (which could not be bundled via PyInstaller after 8 attempts) and switched to Python's built-in wave module for WAV file I/O. This eliminates scipy.io.wavfile bundling issues and completely fixes ModuleNotFoundError in release builds. Supports standard 16-bit PCM WAV files (most microphones)

Added

  • Speaker Diarization settings in Settings panel -- Three tunable controls added for speaker detection behavior:
    • Clustering Threshold (0.0-1.0, step 0.05) -- Controls speaker segmentation; higher values produce more speakers
    • Min Speech Segment (0.1-5.0s, step 0.1s) -- Minimum duration for speech segments before discarding
    • Min Silence Gap (0.1-5.0s, step 0.1s) -- Minimum silence duration before splitting speakers
  • All settings persist immediately to config and restore on panel open

Changed

  • Speaker diarization defaults -- Updated based on testing to reduce over-segmentation in noisy environments:
    • clustering_threshold: 0.6 → 0.5 (fewer false speaker splits)
    • min_duration_off: 0.5 → 0.8s (better for noisy rooms)

v0.19.0

Choose a tag to compare

@github-actions github-actions released this 03 Jun 12:36

[0.19.0] -- 2026-06-02

Fixed

  • Live transcription text duplication (Issue #2) — Two-buffer model in TranscriptStore (_words + _live_phrase_words) replaces wholesale on each re-transcription pass instead of appending, eliminating duplicate text from sliding window overlap. set_live_phrase_words / commit_live_phrase provide a unified replace path for both is_final and re-transcription segments
  • Post-processing and scrub broken (Issue #11) — M019 changed transcribe_chunk() to return TranscriptionSuccess | TranscriptionError but post_processor, scrub, and benchmark still iterated the raw return. All callers now unwrap the typed result
  • Speaker identity matching not resolving (Issue #12) — Post-processing diarization runs via subprocess; JSON round-trip produces int speaker labels in segments but string keys in matches dict. speaker_label_for() now tries both exact match and str() coercion before falling back to SPK_N default
  • Post-processor speaker_matches metadata — Now built from the diarization result's VoiceSignatureStore identity matches instead of carrying forward stale realtime transcript data
  • Transcript save missing live buffer_get_segments_internal() and finalizer now include live phrase buffer so saved transcripts contain full text
  • run.bat Windows Store python stub — Switched pythonpy launcher to bypass Windows Store AppInstaller redirector

Changed

  • Code Review Audit Remediation (Issue #8) — 46 verified findings from GPT-5.5 code review triaged and fixed: atomic_write() utility for crash-safe file operations, TranscriptionResult typed return from transcribe_chunk(), thread safety fixes in TranscriptStore, resource lifecycle cleanup, exception handling hardening, and lint cleanup across 8 modules