{"slug": "i-forgot-the-words-not-the-memory-building-ghostlight", "title": "I Forgot the Words, Not the Memory: Building Ghostlight", "summary": "A developer built Ghostlight, an open-source browser-based memory archive that uses the all-MiniLM-L6-v2 embedding model via Transformers.js 3.8.1 and WebAssembly in a Web Worker to retrieve saved passages from fuzzy descriptions. In a Chromium test on 1 November 2026, the query \"music during a power cut\" returned the intended note at 0.395 similarity while an unrelated query scored 0.057 and triggered a \"no close connection found\" notice at a 0.25 threshold the developer describes as a simple interface heuristic, not a calibrated confidence boundary. The static HTML/CSS/JavaScript app downloads roughly 23 MB of model weights on first visit, caches embeddings for unchanged notes, and is MIT licensed, with OpenAI Codex assisting on implementation and validation.", "body_md": "*This is a submission for the [Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine](https://dev.to/challenges/hacktoberfest-week4-2026-10-26).*\n\nI typed **“music during a power cut.”**\n\nThe note I wanted used neither “music” nor “power cut.” It described a monsoon blackout, a little red radio with dead batteries, and Grandma humming songs on the kitchen floor.\n\nGhostlight found it.\n\nThat small connection is the project: **a memory archive you can search when you remember the moment but have forgotten its words.** An open-source embedding model runs in your browser and retrieves the passages you saved.\n\nFor *Ghost in the Machine*, I imagined the ghost as a trace left in an archive: a recipe, a familiar song, someone waiting on a railway platform. The machine’s job is to make that trace reachable again. Every result shows the original text.\n\nThe six example memories, including the radio story, are fictional. They let anyone try the idea without contributing a private family story. You can then add short memories of your own or import an archive.\n\n[Try Ghostlight in your browser](https://ghostlight-memory-lantern-2026.coatedaspen1.chatgpt.site)\n\nClick **Light the lantern**, then try these searches. In a Chromium browser test on 1 November 2026, the actual WebAssembly model returned these results:\n\n| Search | First result or notice | Top similarity | \n|---|---|---|\n| `music during a power cut` | Radio in the rain | 0.395 | \n| `how someone taught me to ride` | The blue bicycle | 0.405 | \n| `quantum processors on Mars` | “No close connection found” | 0.057 | \n\nThese are three checks against six fictional notes, not an accuracy benchmark. The unrelated query still displays the nearest original passages, clearly labelled as weak matches. The 0.25 notice threshold is a simple interface heuristic; it is not a calibrated confidence boundary.\n\nNext, add a fictional memory and export the archive as JSON. You can import that file to bring the words back. Saving in the browser is optional; the default is session only.\n\nThe first visit downloads roughly 23 MB of model weights plus runtime files. An internet connection is needed for that download. Subsequent inference processes the notes and query on the device. Browser caching varies, so complete offline operation is not a guarantee.\n\n[Browse the Ghostlight source code](https://github.com/Anudhyan/ghostlight-hf26)\n\nThe application code is MIT licensed. The README credits the model and dependencies under their own licenses. OpenAI Codex assisted with implementation, documentation, and validation, including the browser checks described here.\n\nGhostlight uses plain HTML, CSS, and JavaScript, served as static files.\n\nThe central component is [all-MiniLM-L6-v2](https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2), used through [Xenova’s ONNX conversion](https://huggingface.co/Xenova/all-MiniLM-L6-v2). [Transformers.js](https://github.com/huggingface/transformers.js), pinned to version 3.8.1, runs the quantized model with WebAssembly inside a Web Worker.\n\nThe retrieval flow is small enough to inspect:\n\nThe worker keeps model loading and inference away from the interface thread. It caches embeddings for unchanged notes and evicts entries when their source text changes. Model and library versions are pinned so the implementation is easier to reproduce.\n\nThe model earns its place in the app. “Hummed songs” and “music” can be close in its embedding space; exact string matching alone cannot make that connection. The final display still comes directly from the archive.\n\nTesting found an unglamorous bug: adding a note relied on `crypto.randomUUID`, which was unavailable on the HTTP preview origin. A `getRandomValues` fallback fixed it. The subsequent browser checks verified adding a fictional note, saving it across a reload, exporting it, and importing it again.\n\nThe automated archive and vector checks pass too. The repository includes the browser observations and a separate reproducible CPU-inference test; scores can vary between the CPU and browser backends.\n\nThis version intentionally handles a small archive: up to 100 notes, with 1,000 characters per note. English paraphrases are its tested use case. Long family histories and multilingual retrieval deserve more evaluation before making bigger claims.\n\nFor this archive, open innovation changes where the useful work happens. Downloadable model weights and an open runtime let the browser compute embeddings itself. Ghostlight sends no note or query text to an inference service, and local inference has no per-query API charge.\n\nThe reader can inspect the retrieval code, replace the model, or serve their own copy. JSON export keeps the words portable even if the interface changes later. Those choices matter for something intended to hold personal memories.\n\nLocal processing has limits. Hosting, CDN, and model providers receive ordinary asset-download requests. Optional `localStorage` is unencrypted and accessible to other people using the same browser profile. A small model can rank the wrong story, which is why the source passage and similarity label stay visible.\n\nThe detail I keep returning to is the radio with dead batteries. The saved words are already there; the useful thing the machine does is help someone find them again.", "url": "https://wpnews.pro/news/i-forgot-the-words-not-the-memory-building-ghostlight", "canonical_source": "https://dev.to/anudhyan/i-forgot-the-words-not-the-memory-building-ghostlight-15fc", "published_at": "2026-11-01 06:20:15+00:00", "updated_at": "2026-11-01 06:21:46.726837+00:00", "lang": "en", "topics": ["artificial-intelligence", "machine-learning", "ai-tools", "developer-tools", "natural-language-processing"], "entities": ["Ghostlight", "all-MiniLM-L6-v2", "Transformers.js", "Xenova", "OpenAI Codex", "Hacktoberfest"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/i-forgot-the-words-not-the-memory-building-ghostlight", "markdown": "https://wpnews.pro/news/i-forgot-the-words-not-the-memory-building-ghostlight.md", "text": "https://wpnews.pro/news/i-forgot-the-words-not-the-memory-building-ghostlight.txt", "jsonld": "https://wpnews.pro/news/i-forgot-the-words-not-the-memory-building-ghostlight.jsonld"}}