Releases: umzcio/zMeet
v1.15.0 — Audio-driven meeting detection (Teams lobby fix)
Fixes the Teams lobby bug at the root, and makes detection more reliable.
The bug: zMeet decided a meeting had ended from window titles. A Teams lobby/waiting room shows no meeting-titled window, so a wait longer than ~24s was misread as 'meeting ended' and the recording auto-stopped — right before you were admitted.
The fix: detection now keys off audio activity (how robust notetakers like Granola do it). Using macOS per-process Core Audio state, zMeet knows when Teams/Zoom is actually moving audio (a real call), independent of window titles:
- No more lobby false-stops — a recording can only auto-stop after the call's audio has actually been running, so sitting in a lobby (any length) can never trigger it.
- Mute-safe — muting yourself mid-meeting no longer risks a stop.
- Auto-start fallback — if the window detector misses a meeting, zMeet now also offers to take notes when a call's audio starts.
- Auto-stop now happens cleanly when the meeting's audio actually ends.
If audio detection ever can't tell, it errs toward not stopping — you'd just stop manually, never losing a meeting.
v1.14.0 — Better meeting notes
Quality improvements to the notes (and their Obsidian export).
- "People", not "attendees". The frontmatter field that listed people is now
people(people referenced in the meeting) instead ofattendees— a transcript can't know who was actually present, so it no longer claims attendance. - Auto-titled meetings. In-person / manual recordings that came through as "Untitled Meeting" now get a short descriptive title generated from their notes — in the filename, the note, and zMeet's Library. You can still rename any meeting (Library → right-click → Rename…), and the rename now updates the Obsidian vault too (renames the note, removes the old one).
- Smarter source. In-person meetings show
source: In personinstead ofUnknown. - Less guessing in summaries. The summarizer no longer invents action-item owners or attributes statements to people unless the transcript clearly names them.
Existing notes keep their old fields until re-processed or re-published.
v1.13.2 — Backfill feedback
Small UX follow-up: "Publish all to vault" now shows a result message when it finishes — e.g. "All 5 meetings already in the vault." or "Published 2; 3 already in the vault." — instead of silently doing nothing when everything's already imported.
v1.13.1 — Backfill skips already-imported meetings
Follow-up to v1.13.0's "Publish all to vault."
- No more re-importing. Re-running "Publish all to vault" now skips meetings already in the vault and only publishes new, renamed, or missing ones — no redundant re-export or re-extraction. A renamed meeting or a switched vault still re-publishes correctly.
v1.13.0 — Publish all to Obsidian
Backfill your existing meetings into Obsidian in one click.
New: "Publish all to vault" (Settings → Obsidian, shown when publishing is on + a vault is selected). Publishes every meeting already in your Library into the vault — frontmatter, summary, companion transcript, and [[people/projects/topics]] graph links — with a live "Publishing N of M…" progress count.
- Reuses each meeting's saved transcript and notes — no re-transcribing or re-summarizing; it just adds the graph links.
- Idempotent — safe to run again; it overwrites cleanly instead of duplicating.
- Best-effort — skips any meeting without readable notes, never blocks.
- Leaves zMeet's own notes in
~/Documents/zMeetuntouched; it only writes the linked copies into your vault.
Set up a fresh vault and want your whole history in it? Enable Obsidian publishing, pick the vault, hit Publish all to vault.
v1.12.2 — Obsidian export polish
Small follow-up from a regression scan of v1.12.1.
- Clean upgrade. Re-publishing a meeting that was exported under v1.12.0 (which named files by date only) no longer leaves a stale duplicate in your vault — the old note is removed before the new date+time note is written.
- No double-processing. Re-processing the same meeting while its Obsidian publish is still finishing in the background is now ignored, avoiding redundant work.
- Cleanup. Removed a leftover unused shell helper.
All findings were low severity; no data loss or crashes.
v1.12.1 — Obsidian export fixes + cleanup
Bug-fix release from a multi-agent code review of the v1.12.0 Obsidian export.
Fixes
- No more vault overwrites. Two meetings on the same day with the same title (e.g. a recurring "Standup", or two untitled meetings) no longer overwrite each other's notes in the vault — filenames now include the time.
- Backfill works. Re-processing an older meeting whose audio was already purged (retention/free-up) now reuses the saved transcript instead of failing, so you can back-fill old meetings into Obsidian after enabling the feature.
- Snappier processing. The Obsidian publish now runs in the background after notes are saved, so the menu-bar icon returns to idle and the "notes ready" popup appears immediately even with cloud entity-extraction enabled.
- Rename cleanup. Renaming a meeting and re-publishing removes the old vault note instead of leaving a stale duplicate.
- No dangling links / cosmetic filename fixes. The transcript note is written before the main note (no broken
[[link]]on a partial failure); sanitized filenames no longer leave stray double spaces.
Internal cleanup
- Removed the dead legacy shell-command processing pipeline and other unused code (net −213 lines). Git auto-commit, previously wired only into that dead path, now runs on the live processing path for users who enable it.
v1.12.0 — Obsidian export
Obsidian linked-vault export (opt-in)
Publish a linked copy of each processed meeting into an Obsidian vault, turning your notes into a connected "network brain."
- Linked notes — each meeting becomes a Markdown note with YAML frontmatter (date, source, duration, mode, attendees) plus
[[wikilinks]]for the people, projects, and topics it surfaced, so Obsidian's graph connects meetings that share them. - Companion transcript note — the full transcript is written as a separate linked note.
- Auto-detected vaults — Settings → Obsidian lists your existing Obsidian vaults in a dropdown (or choose a folder manually). Off by default.
- Idempotent — re-processing a meeting overwrites the same two files in place; link nodes stay stable across meetings.
- Best-effort — entity extraction runs on whichever summary engine is active (cloud or on-device) and never blocks or fails your notes.
zMeet writes plain Markdown directly into the vault folder — no account or login. Sync the vault across machines with your tool of choice (Drive, iCloud, Git, Obsidian Sync), and chat with it via Obsidian's own MCP.
v1.11.0
Quality-of-life fixes.
- Full-meeting notes on-device: on-device summaries now cover the entire meeting via chunked summarization (previously long meetings were summarized from only their first ~15 minutes).
- Dock presence: opening the Library or Settings now shows a Dock icon and keeps the window from getting lost when you switch apps; it returns to menu-bar-only when the window closes.
- Processing indicator: the menu-bar icon now shows a distinct state while notes are being generated.
- Fewer false stops: brief meeting-window blips (Teams password / waiting room) no longer stop a recording.
- Copyable notes: meeting notes are now selectable/copyable, like the transcript.
Auto-updates via Sparkle.
v1.10.0
Recording modes + speaker labels.
- Recording modes (Remote / Hybrid / In-person): each mode has its own capture profile — system-audio capture, microphone, mic gain, and noise reduction — set once and applied automatically when you record in that mode. Pick the mode from the start-recording prompt; Settings → Recording lets you tune each mode's profile. The mode is shown on each meeting in the Library.
- Speaker labels (You vs Others): opt-in in Settings → Recording. For remote/hybrid meetings, zMeet records your mic and the other participants separately and produces a transcript that labels who spoke (You: / Others:), which also sharpens the summary. Fully on-device; the extra tracks are temporary and removed after processing.
Auto-updates via Sparkle.