100% local AI meeting transcription and notes — not a single cloud call.
A desktop app (Electron) that captures your system audio, transcribes it with faster-whisper, tells the speakers apart, and drafts meeting notes with a local LLM via Ollama. Everything — audio, transcripts, models, summaries — stays on your machine.
- System-audio capture (Linux, PulseAudio/PipeWire) — enumerates microphones, sink monitors and per-application outputs, records any combination of them (
parec+ffmpeg, multi-sourceamixmixing). Windows/macOS system capture is not implemented yet; local audio files work everywhere. - Transcription with faster-whisper — a Python/FastAPI sidecar that probes CUDA properly (loads
libcublas/libcudnnviactypesbefore committing to GPU) and falls back cleanly to CPU/int8. One resident Whisper model with explicit eviction, so it can share a GPU with Ollama. Per-segment confidence and optional word timestamps. - Speaker diarization with no gated models — a custom pipeline: sliding windows → ECAPA-TDNN embeddings (SpeechBrain, Apache-2.0) → agglomerative clustering. No HuggingFace token, no license click-through, fully offline. A voiceprint registry accumulates speaker centroids and recognizes the same person across recordings (pyannote is available as an optional backend if you bring your own
HF_TOKEN). - Meeting notes with a local LLM — summaries, action items and custom prompt templates via Ollama. The app auto-detects installed models (and other local OpenAI-compatible servers such as LM Studio or vLLM), recommends a model for your VRAM, and can install models from the UI with streamed download progress. Long transcripts get
num_ctx: 8192so Ollama doesn't silently truncate them. - Translation — batch transcript translation with a local LLM, with per-segment fallback.
- Export — Markdown, TXT, HTML, JSON, DOCX and PDF, plus bulk ZIP export.
- Library — SQLite + plain Markdown files under
~/.cripter-ai/(your data outlives the app), with a persisted job queue (cancel/retry,AbortController) and live SSE progress streams end-to-end into the UI. - UI — Angular 21 standalone + NgRx SignalStore (zero
.subscribe()in components), bilingual EN/ES, light/dark theming on a custom Tailwind v4 design system ("Aurora", 31 components — no Angular Material).
apps/
renderer/ Angular 21 standalone SPA (UI)
desktop/ Electron main process (launches the bridge API; custom cripter:// scheme)
bridge-api/ Express 5 local API (SQLite, jobs, channel/capture/speaker services)
whisper-svc/ Python FastAPI (faster-whisper + local diarization)
packages/
shared-types/ Cross-package TS interfaces & enums
data-access/ Angular services, signal stores
ui/ Aurora design-system standalone components (Tailwind v4)
ui-styles/ Design tokens & theming (light/dark)
utils/ Isomorphic utility functions
Nx monorepo, TypeScript strict, pnpm.
Requirements: Node 20+, pnpm, Python 3.12, ffmpeg and pulseaudio-utils (Linux), optionally an NVIDIA GPU + Ollama for the AI features.
pnpm install
cp .env.example .env
# First time only — set up the Python venv for the transcription service:
pnpm nx install whisper-svc
# Run everything in dev (renderer + bridge-api + desktop + whisper-svc):
pnpm devpnpm build
pnpm nx pack desktop # produces .deb and AppImage (electron-builder)The packaged app bundles the renderer and the bridge API; whisper-svc runs as a separate service (e.g. systemd --user) so a single GPU-resident instance can serve the app.
All processing is local by default: audio never leaves the machine, models run on your hardware, storage is local SQLite + Markdown. Cloud LLM providers (OpenAI/Anthropic) exist only as an explicit opt-in — you create such an agent yourself and bring your own key; nothing is configured out of the box.