AI Meeting Note-Taker
Record or import meetings and get an AI transcript plus structured minutes with decisions & action items, persisted on-device in a local knowledge graph - 100% private, runs in your browser
Loading Meeting Note-Taker...
- Click Start Recording and grant microphone permission.
- Optionally toggle "Include tab / system audio" to capture a shared tab or call as a separate [Remote] channel.
- Optionally toggle "Identify speakers (diarization)" to group the [Remote] channel into Speaker 1..N (opt-in, best-effort, downloads extra models).
- Optionally toggle "Capture slides / screen share (vision)" to read on-screen text with Florence-2 (opt-in, heavy multi-GB models, Chromium-only).
- Stop recording to transcribe, or import an existing audio file or transcript instead.
- Review the timestamped transcript (your mic is labeled [Self], tab/system audio [Remote], imports [Participant]).
- Use the Search Transcript box to find any moment by meaning or keyword (hybrid BM25 + vector search), then click a result to jump to it.
- Click Generate Minutes to produce a summary, decisions, action items, and open questions.
- Export your notes as Markdown or JSON.
The entire pipeline runs on-device in your browser using Web Workers, WebGPU (with a WebAssembly fallback), and AI models from Transformers.js:
1. Dual-Channel Capture
Your mic ([Self]) and optional tab/system audio ([Remote]) are captured as two separate channels through an AudioWorklet and resampled to 16kHz mono PCM.
2. Whisper / Moonshine ASR
Each channel is transcribed into timestamped utterances with Whisper (Moonshine is available for fast short turns).
3. Optional Diarization
If enabled, a best-effort pass (voice-activity detection, segmentation, speaker embeddings, and cosine clustering) groups the [Remote] channel into Speaker 1..N labels.
4. Optional Vision Ingestion
If enabled, a shared screen/tab's video is sampled, a perceptual hash keeps only visually-distinct keyframes, and Florence-2 (with an optional SmolVLM2 caption) reads the on-screen text locally. Keyframes are shown as thumbnails and bound into the knowledge graph as VisualArtifact nodes. Opt-in and heavy (multi-GB models), Chromium-only.
5. Candidate Tagging
A deterministic tagger flags utterances that look like decisions, action items, or open questions, shown inline in the transcript.
6. Hybrid Transcript Search
15-30s speaker turns are embedded with bge-small-en-v1.5 into an Orama index. A hybrid BM25 + vector search finds the right moment by meaning or keyword; int8 and 1-bit quantized vectors keep it fast and lightweight.
7. Minutes (hardware-tier engine)
Qwen2.5-0.5B turns the transcript into structured minutes, and all three hardware-tier engines are grammar-constrained to emit schema-valid JSON. On WebGPU-capable devices with ample memory it runs WebLLM with XGrammar grammar-constrained decoding; constrained WebGPU devices use the Transformers.js map-reduce summarizer, grammar-constrained with @huggingface/transformers-structured-output (a StructuredOutputProcessor applied to both the map and reduce passes); and devices without WebGPU use the wllama CPU/WASM engine (Qwen2.5-0.5B GGUF via single-thread llama.cpp Wasm) with GBNF grammar-constrained decoding. The active engine and tier are shown in the badges.
8. WebMCP Tool-Calling (agent mode)
Optionally, the on-device model can act as an agent: it emits grammar-constrained calls to five meeting tools (record a decision, upsert an action item, query the transcript, update or synthesize a topic summary). The calls run through an actual Model Context Protocol (MCP) server that lives entirely in your browser over a MessagePort - no network, no stdio. The deterministic pipeline still works when agent mode is off.
9. On-Device Knowledge Graph
In agent mode, decisions and action items are saved into a local SQLite knowledge graph in your browser's Origin Private File System (OPFS), so they survive a reload in this tab. When vision ingestion is on, captured keyframes are bound in as VisualArtifact nodes (with DEPICTS and MODIFIES_VISUAL_STATE edges). If durable storage is unavailable (an unsupported browser, or the storage lock is held by another tab), it falls back to memory-only and the badge says so. Updates supersede older versions instead of overwriting, and a crash-recovery write-ahead log replays unfinished writes on startup.
10. Structured Output
You get a summary plus decisions, action items, and open questions.
11. Export
Download everything as Markdown or JSON for sharing or archiving.
Everything happens entirely in your browser. No audio, transcript, or minutes are ever uploaded to a server.
- • Audio is processed locally using Web Workers
- • AI models run on-device via WebGPU or WASM
- • No recordings or notes leave your browser at any point
- • Models are cached locally after the first download
- • Persisted decisions and action items are stored only on your device (local SQLite in OPFS), never uploaded, and stay in a single tab
- • Optional vision ingestion is opt-in and local: captured screen frames are read on-device with Florence-2 and never uploaded
- • Ideal for confidential meetings and sensitive discussions