You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
[2.3.0] - 2026-05-29
✨ New Features
Relay Server: Added a self-hosted relay server (relay-server/) that proxies summarization requests to Claude or OpenAI using the user's Supabase session for auth and usage tracking — no client-side API keys required
Supports both Anthropic and OpenAI models via a unified /summarize endpoint
Enforces per-user usage limits via Supabase RPC
New Relay (Server) provider option in Settings, with all Claude and OpenAI models available
Non-English Audio Detection: Transcription is now skipped with a clear warning when non-English audio is detected, rather than producing garbage output
Language is detected before transcription begins using Whisper's built-in detect_language
Works for both single-file transcription and chunked live transcription during recording
🎯 Improvements
App renamed to Ayjan Minutes: Window titles, login dialog, and in-app header updated throughout
Live transcript selectable: The live transcript preview panel is now selectable and copyable with mouse and keyboard
Live transcript written to file: During recording, the live transcript is written to transcripts/transcript_{timestamp}.txt and updated every 10 seconds — allows external tools to read it while recording is still in progress
Installer model download ETA: The installer now shows a live "~Xm Ys remaining" estimate during Whisper model download; progress bar fills smoothly through the model download phase (previously stalled at 85% with only animated dots)
Recording Complete dialog: "Open Folder" is now the default/highlighted button; Cancel replaces Ok as the dismiss action
Timer reset: Recording timer resets to 00:00 after transcription completes
Attendees tab tooltip: Info icon added to the Names tab header with usage guidance
Info icon: Extracted _make_info_icon as a reusable static method (was duplicated inline)
OpenAI model list: Updated to gpt-4o-mini, gpt-4o, gpt-4-turbo (removed placeholder gpt-5.4 models)
✅ Fixes
OOM crash on long recordings: Fixed out-of-memory crash when transcribing long recordings
File rename after summarization: Renaming recordings and transcripts after summarization now matches files by timestamp rather than exact stem, fixing failures when the stem had already changed
🛠️ Infrastructure
Crash logs: Each app session now writes a timestamped crash log to logs/crashes/ capturing Python faulthandler stack dumps on native crashes (SIGSEGV / access violation) and stderr from C-level libraries (ctranslate2, CUDA) that would otherwise be lost in a frozen GUI app
Local update testing: UpdateCheckerWorker now probes localhost:8765/health first and falls back to GitHub automatically — the mock release server is used whenever Docker is running, with no env var required