Meta Archive Explorer
Facebook exports are exhaustive, fragmented, and almost impossible to explore. I built a private, localhost-only system that turns a 40+ GiB export into a provenance-preserving archive: deduplicated, searchable, and browsable across conversations, media, people, activity, time, and derived semantics.
A FastAPI service and SQLite/Alembic data model handle ingestion, reconciliation, API access, and source identity. A React and TypeScript dashboard makes 1.3M+ messages usable, while LanceDB, local embeddings, and reranking add semantic retrieval without separating results from their original context.
- Messages indexed
- 1.3M+
- Source archive
- 40+ GiB
- Source files
- 80K+
- Unique blobs
- 55K+
- Application views
- 17
- Retrieval modes
- 4
An archive that keeps its receipts
Every source file is inventoried and hashed. Duplicate bytes become immutable content-addressed blobs, while source coordinates, collisions, and reconstruction manifests remain intact. The archive becomes easier to use without erasing how it was assembled.
- Inventory
- 80K+ source files
- Identity
- SHA-256 + source coordinates
- Storage
- 55K+ immutable blobs
- Reconstruction
- Manifest-backed
Many ways in, one source of truth
The same retained records can be explored as conversations, media, chronological activity, or aggregate patterns. Deep links return every derived view to its source.
Filter direct, group, and system histories; jump by date; search within a thread; inspect attachments, reactions, calls, and provenance boundaries.
Browse photos, video, audio, GIFs, stickers, and documents by date, size, source, or type. Missing files stay explicit instead of quietly disappearing.
Move across messages, events, posts, comments, groups, check-ins, and other activity. Coverage notices distinguish absent export data from an empty history.
Explore volume, heatmaps, streaks, response timing, attachment trends, topics, social graphs, model-derived signals, storage, and collection coverage.
One private collection across conversations, messages, media, activity, events, and people.
Audited, undoable merge and split corrections preserve every original source coordinate.
Revision-bound preview, reversible quarantine, restore, and guarded purge across derived data.
Retrieval that keeps its receipts
Search can be lexical, exact-literal, semantic, or hybrid. Hybrid mode combines full-text and vector rankings, reranks a bounded candidate set locally, and preserves context plus an exact jump back to the retained record.
- 01Speaker-labelled windowsMessages, transcripts, activity, and extracted text
- 02Local BGE embeddingsPinned 768-dimensional model with explicit health state
- 03LanceDB + hybrid fusionExact cosine search and reciprocal-rank fusion
- 04CPU cross-encoderBounded reranking with stable result identities
- 05Source jumpOriginal conversation, timestamp, and surrounding context
Resumable audio transcription, sandboxed document extraction, versioned sentiment, emotion, and toxicity estimates, topic clusters, and six-way NLI conflict review. Model output is visibly derived, provenance-labelled, and never presented as ground truth.
Private by construction
The default product path stays on one machine. Security and deletion semantics are part of the data model, not a privacy paragraph added after the screenshots looked nice.
Loopback-only binding, strict Host, Origin, and CSRF checks, restrictive content security policy, and no automatic external-media fetches. Optional cloud RAG is explicit and bounded; ordinary browsing, search, and enrichment remain local.
Python · FastAPI · SQLite · Alembic · React · TypeScript · TanStack · ECharts · LanceDB · ONNX Runtime · Playwright