Vol. I  ·  Memory Engine Bepo Local  ·  Offline  ·  Open
Memory · Storage · Search
Bepo

Python · FastAPI · CLIP · SQLite

The city
remembers
everything.

Upload a photo with a note and GPS. Bepo encodes it using OpenAI's CLIP model — the same embedding space where "sunset" and a photograph of one end up close together. Store as many memories as you like. Later, type anything natural and Bepo finds the closest match using cosine similarity. Everything runs locally. No cloud. No accounts. Just you and your memories.

Model
CLIP vit-base-patch32
Dims
512-d vectors
Storage
SQLite · local

Stored memories

Beautiful sunset at the beach
34.0522°N · 118.2437°W · Los Angeles
0.87
Snowy mountain peaks in winter
45.8325°N · 6.8652°E · Mont Blanc
0.79
City skyline at night with lights
40.7128°N · 74.0060°W · New York
0.82

How it works

01
Upload
Photo + optional note + GPS sent to POST /memory. Image saved to local filesystem with a timestamp filename.
02
Embed
CLIP encodes both the image and the text note into 512-dimensional vectors in a shared semantic space.
03
Store
Embeddings serialised as BLOBs in SQLite alongside timestamp, GPS coordinates, and image path.
04
Retrieve
Query encoded with CLIP. Cosine similarity computed against all stored embeddings. Best match returned with score.

API endpoints

POST /memory
Store a new memory. Generates CLIP embeddings for the image and text note, persists to SQLite with GPS.
photo · required note · optional lat · optional lon · optional
POST /search
Search by natural language. Encodes query with CLIP, computes cosine similarity against all stored embeddings, returns best match.
query · required
GET /
Returns API info and available endpoints.

Stack

Python FastAPI CLIP vit-base-patch32 PyTorch SQLite NumPy Pillow Uvicorn
← portfolio