vemem — visual entity memory
by @linville-charlie
Visual entity memory — remember faces, objects, and places across sessions with persistent identity. Use when the user asks who is in an image, when you need...
Quick check — is vemem available?
Run python -c "import vemem; print(vemem.__version__)". If that fails, install:
pip install vemem
or with uv:
uv pip install vemem
First-time face encoding triggers a ~200MB InsightFace model download into ~/.insightface/. Warn the user if their network is constrained.
Run the MCP server (preferred for agents)
python -m vemem.mcp_server
This exposes 14 tools over stdio. Wire it into your host's MCP config. For Claude Desktop, the ready-to-paste config lives at docs/examples/claude_desktop_config.json in the vemem repo.
Use directly (preferred for scripting in Python)
from vemem import Vemem
vem = Vemem() # LanceDB store at ~/.vemem, InsightFace encoder
Store path is overridable via VEMEM_HOME env var or Vemem(home="/path/to/store").
| Symptom | Cause | Fix |
|---|---|---|
| identify() returns [] on a face you labeled earlier | Different encoder version, or the face isn't being detected | Check encoder.id hasn't changed; try min_confidence=0.2 to see raw scores |
| RuntimeError: image pipeline unavailable | InsightFace weights not installed | First call downloads ~200MB from InsightFace to ~/.insightface/; ensure network access on first use |
| ModalityMismatchError on merge | Trying to merge a face entity with an object entity | v0 keeps modalities separate; create an instance_of relationship instead |
| OperationNotReversibleError on undo | Past 30 days, or op was forget | Not fixable — forget is deliberately irreversible; window is configurable via DEFAULT_UNDO_WINDOW |
clawhub install vemem