Self-hosting
Everything already runs on your machine. Self-hosting here means the optional parts: extraction with your own LLM, your own embedding model, and an optional sync server you control.
Decision extraction with any endpoint
Extraction turns transcripts into typed assertions. It is off until you provide a key, and it speaks to any OpenAI-compatible chat-completions endpoint:
# OpenRouter (default endpoint)
LAVOX_LLM_KEY=sk-or-... server/.venv/bin/python3 server/extract.py
# or bring your own endpoint: Ollama, vLLM, OpenAI, anything compatible
LAVOX_LLM_URL=http://localhost:11434/v1/chat/completions \
LAVOX_LLM_KEY=... server/.venv/bin/python3 server/extract.py LAVOX_LLM_MODEL picks the model. Assertions are written in the
language of the transcript.
Your own embedding model
Embeddings run locally via fastembed (ONNX). The vector tables are tagged
with the model id, so switching models builds the new index
alongside the old one and cuts over when ready: no downtime, no
lock-in. Set LAVOX_EMBED_MODEL to any model fastembed
supports.
Optional sync server
The server in server/ can also run on your own machine or VPS
to sync recordings across devices and serve share links. It is the same
codebase; point Lavox Hub at it and set an API key:
LAVOX_API_KEY: required for authenticated endpoints when exposed beyond localhost- put it behind TLS (nginx or similar); the repo's server binds to localhost by default
- share links are public-by-token with rate limiting on failed attempts
Backups
Your entire memory is ~/Lavox/memory/lavox-memory.db plus the
recordings folder. Copy them, and you have everything.