overview
Product Overview
Open Meeting Notebook is a macOS-first, cross-platform-ready Electron desktop app for local meeting capture, local transcription, optional diarization, AI summaries, and reusable exports.
- Runs as a desktop recorder instead of a meeting bot.
- Links recordings to Apple, Google, or Outlook calendar events.
- Keeps old recordings, transcripts, summaries, and exports stable while sprint work continues.
- Supports a three-column workspace: calendar agenda, recorder/transcript, and AI summary/prep panel.
Operator notes
- Use this section as the public product positioning text.
- Avoid claiming cloud sync or automatic speaker identity matching; both are deferred.
capture
Recording And Audio Capture
The renderer captures microphone, system, and mixed review streams, then forwards durable chunks to the main-process recording service.
- Recording states are idle, arming, recording, stopping, ready, and failed.
- Audio source modes are microphone, system, or both.
- Available tracks are mixed, mic, and system.
- System/app audio depends on Electron system audio support or a loopback input such as BlackHole, Loopback, Soundflower, VB-Cable, Background Music, or a working aggregate input.
Operator notes
- If direct system audio is unavailable, guide the user to a loopback input instead of treating the app as failed.
- For troubleshooting only, OPEN_MEETING_NOTEBOOK_LEGACY_SCREEN_AUDIO=1 forces the older capture path.
transcription
Transcription Runtime
Parakeet transcription runs after the meeting through an app-managed Python runtime or a user-provided Python path.
- Primary model: nvidia/parakeet-tdt-0.6b-v3.
- Install script: scripts/setup_parakeet_runtime.sh.
- The app checks Python availability, worker path, model cache status, ffmpeg, missing packages, and download support.
- ffmpeg is preferred so recordings can be converted to 16 kHz mono WAV before transcription.
Operator notes
- A new Mac should install Python 3.10 or 3.11 and ffmpeg before runtime setup.
- Users can pre-cache the Parakeet model to avoid discovering a long download after a meeting ends.
diarization
Diarization And Speaker Metadata
Optional local pyannote diarization improves speaker labeling and records alignment quality for downstream editing.
- Model: pyannote/speaker-diarization-community-1.
- Install script: scripts/setup_diarization_runtime.sh.
- A Hugging Face token accepted for the pyannote model is required for gated access.
- Transcript segments and words can carry speaker ID, display label, role, confidence, warning, and alignment mode.
Operator notes
- Weak speaker warnings are non-blocking and should stay visible.
- Manual speaker management and recurring speaker profiles are planned sprint work.
summaries
Summary Providers
Summaries are generated after transcript segments exist and use the selected template, detail level, provider, and model.
- Ollama defaults to http://127.0.0.1:11434 and calls /api/tags plus /api/generate.
- OpenRouter and OpenAI-compatible providers use chat completions.
- Claude, DeepSeek, GLM, Kimi, Codex CLI, and offline-demo paths are represented in provider configuration.
- Summary fields include title, overview, decisions, action items, risks, follow-up draft, redactions, provider, and generated timestamp.
Operator notes
- Cloud providers require saved or environment API keys.
- Codex CLI is experimental and depends on the user local CLI login rather than an app API key.
exports
Exports And Redaction
The export service can produce meeting artifacts for notes, captions, documents, drafts, and bundles.
- Export formats: Markdown, PDF, HTML, clipboard, email draft, Slack-ready text, SRT, VTT, TXT, DOCX-named text, and bundle.
- Options include speaker labels on/off, redacted on/off, and audio inclusion for bundles.
- Redaction removes obvious email addresses and phone numbers from transcript exports.
- Bundle export writes summary.md, transcript.txt, and optionally the selected audio file.
Operator notes
- DOCX is currently a text-compatible placeholder, not high-fidelity document layout.
- PDF is intentionally simple and reliable before layout polish.
storage
Local Storage And Data Retention
Recordings, transcripts, summaries, settings, credentials, exports, and model cache paths are handled as local-first app data.
- SQLite stores metadata for sessions, providers, settings, credentials, transcripts, and summaries.
- The vault stores audio tracks, transcript payloads, summary payloads, export artifacts, and app-managed runtime references.
- Parakeet and pyannote model caches were moved outside the selectable local data vault.
- Users can open the local model cache folder for manual cleanup.
Operator notes
- Selective artifact deletion is implemented for audio-only and audio-plus-transcript retention paths.
- Cloud sync and multi-device vault sync are deferred.
permissions
macOS Permissions
The packaged app includes usage strings and diagnostic paths for microphone, system audio, and calendar access.
- Microphone recording uses the macOS microphone permission prompt.
- System audio uses Electron audio-only capture where available.
- Calendar access reads event title, time, attendees, notes, and meeting links.
- The permission strip can open macOS privacy settings for guided repair.
Operator notes
- For a copied app bundle, basic microphone recording only requires the bundle and macOS microphone permission.
- System audio and local transcription require additional runtime and device setup.
verification
Manual QA Checklist
The production checklist covers launch, permissions, recording, transcription, summary generation, export, and packaged app smoke testing.
- Run npm run check and npm run build before packaging.
- Package with npx electron-builder --mac --arm64.
- Launch the packaged app and verify agenda loading, settings, runtime status, recording, transcript, summary, and export flows.
- Confirm saved vault files and exported artifacts exist where expected.
Operator notes
- Automated Electron smoke tests are planned in Sprint 7.
- Capture screenshots and console logs on smoke failure once automation exists.