Recall: A Local-First AI Memory for Everything You’ve Saved
This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend What I Built I built Recall , a local-first personal memory system for a friend who has a habit of saving everything: screenshots, useful webpages, PDFs, notes, images, and random files that might be useful someday. The problem was not storing those things. It was finding them again. A normal keyword search works…
Title: Recall: A Local-First AI Memory System for Personal Information Organization
Recall is a personal memory system designed by the author for a friend who has a tendency to save a multitude of files, including screenshots, useful webpages, PDFs, notes, images, and various other files. The primary challenge faced by the author was not merely storing these files but locating them when needed. Traditional keyword searches become ineffective when the user cannot recall the exact words associated with the information.
Recall addresses this issue by transforming scattered files into searchable memories. Users can ingest text, webpages, images, screenshots, PDFs, and other file formats, then search the entire collection using natural language. For instance, instead of searching for a specific filename, users can input a description or context, such as "the screenshot where GitHub could not resolve the host," to retrieve the relevant memory.
The system operates locally, meaning all data remains on the user's device without the need for cloud accounts or APIs. Once a memory has been processed, searching does not require a generative AI model running in the background, ensuring fast retrieval. The code for Recall is open-source, available on GitHub, and includes the backend, frontend, ingestion pipeline, search system, tests, and technical documentation.
The core functionality of Recall utilizes AI primarily during the ingestion process, rather than for every query. Content is converted into metadata and text, with images processed through OCR and image captioning to become searchable. Embeddings are generated from the searchable text for semantic retrieval, stored in SQLite using FTS5 for lexical search and FAISS for vector retrieval. The final search combines BM25 lexical search, vector search, and metadata + recency + exact-match signals for accurate results.
Recall employs several design constraints to ensure efficiency and usability. The database serves as the source of truth, allowing the FAISS index to be rebuilt as needed. Ingestion is idempotent, using content hashes to prevent repeated processing of the same file. The system is designed to handle AI failures gracefully, ensuring search functionality remains available even if optional AI models are unavailable. The application is optimized for typical laptops, eliminating the need for a dedicated GPU.
The use of open innovation in Recall allows for the implementation of important features locally, such as image captioning, OCR, and semantic embeddings, without the need to send personal data to remote services. This approach changes the trade-off from uploading personal data to a remote service for AI interpretation to processing data locally, storing useful representations, and performing searches without an online AI dependency.
This model also facilitates easier experimentation with different models, as they can be swapped, compared, or removed without requiring significant redesign of the application.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.