Skip to content

v0.16.0

Release date: 2026-07-26

This release adds the shared terminology engine for TTS pronunciation and subtitle case-correction, fixes the Whisper MLX provider's TranscribeFile method, and normalizes BCP-47 language codes to ISO 639-1 for Whisper compatibility.

Highlights

  • Terminology engine — shared Pronouncer and CaseCorrector backed by terminology-spec with 247 embedded terms for consistent TTS pronunciation and subtitle casing
  • Whisper MLX TranscribeFile fix — the method now works (previously returned "not implemented")
  • BCP-47 language normalization — Whisper MLX accepts en-US/zh-Hans and normalizes to en/zh automatically

Added

Terminology engine (terminology/)

  • Pronouncer — rewrites a term's spoken form into text before TTS synthesis, per BCP-47 locale (e.g. "AAuth" → "ay auth" for en-US)
  • CaseCorrector — fixes the displayed form of a term in STT-derived subtitle text, independent of locale (e.g. "oauth" → "OAuth")
  • Re-exports Builtin(), Curated(), All(), and LoadDir() from terminology-spec for loading embedded or project-specific terms
  • Unit tests covering Pronouncer and CaseCorrector behavior

Documentation

  • docs/terminology.md — guide for the terminology engine with usage examples
  • Updated docs/local-tts.md — added Whisper MLX section with installation, usage, and BCP-47 language handling

Fixed

Whisper MLX provider

  • TranscribeFile now reads the file and delegates to Transcribe instead of returning "not implemented"
  • Language codes are normalized from BCP-47 (e.g. en-US) to ISO 639-1 primary subtag (en) before sending to Whisper, so callers can pass either form

Changed

  • Added terminology-spec v0.1.0 as a dependency for the terminology engine

Chore

  • Gitignore generated Python proto stubs (*_pb2*.py) and go.work/go.work.sum

Consumers

  • videoascode — uses Pronouncer via the pronunciation config for TTS and CaseCorrector for subtitle generation