{"slug": "lastwhisper-search-your-voice", "title": "LastWhisper : Search your voice", "summary": "A developer built LastWhisper, a local-first voice memory archive that imports personal audio, transcribes it with open-source faster-whisper inference on CPU, indexes transcript segments with local sentence-transformer embeddings, and lets users search, replay and save source-grounded memories without any hosted transcription, embedding, LLM or analytics service. The system pairs a React/TypeScript frontend with a loopback FastAPI backend and SQLite storage, keeping audio outside the web root and linking saved memories to immutable snapshots of transcript evidence. The developer verified the release on a Ryzen 5 5600H with 14 GiB RAM using the pinned faster-whisper-base model with int8 compute.", "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 built **LastWhisper**, a local-first voice memory archive that helps people preserve, search, and revisit the stories hidden inside their recordings.\n\nThe idea behind it is simple: a voice recording can outlive the moment, place, or even the person who created it. That felt like a natural interpretation of **Ghost in the Machine**. The “ghost” is not an AI pretending to be someone. It is the real voice, story, and memory that already exists inside the recording. The machine simply helps you find it again.\n\nWith LastWhisper, a user can:\n\nThe default setup does not require a hosted transcription API, embedding API, cloud LLM, analytics service, or remote storage.\n\nLastWhisper is a local-first voice memory archive. It imports personal audio, transcribes it with open-source Whisper inference, indexes transcript evidence with local sentence-transformer embeddings, and lets people search, replay, and save source-grounded memories.\n\nNo hosted transcription, embedding, LLM, analytics, or telemetry service is required. Model files may need a one-time download before offline use.\n\n`faster-whisper`, language detection, progress, retry, and cancellation.\nThe repository includes:\n\nThe frontend uses **React, TypeScript, Vite, Tailwind CSS, and Lucide**. It communicates with a loopback **FastAPI** backend. **SQLAlchemy and SQLite** persist recordings, transcript segments, semantic chunks, saved memories, and embedding metadata. Original audio is stored outside the web root under generated UUID filenames.\n\nLastWhisper uses **faster-whisper** with **CTranslate2**. The verified default path uses the pinned SYSTRAN `faster-whisper-base` conversion on CPU with `int8` compute.\n\nThe worker stores:\n\nClicking a transcript segment sets the audio player to that segment's real Whisper timestamp.\n\nFor retrieval, LastWhisper uses **sentence-transformers** with the Apache-2.0 `paraphrase-multilingual-MiniLM-L12-v2` model pinned to an immutable revision.\n\nLong transcripts are split into bounded overlapping chunks. Every chunk remains linked to its recording and contributing transcript segment IDs. The generated 384-dimensional vectors are normalized and stored directly in SQLite as little-endian float32 BLOBs alongside:\n\nSearch embeds the query locally, computes cosine similarity, applies a configurable threshold, and returns ranked transcript evidence. The score is presented as a ranking signal—not a probability or guarantee of correctness.\n\nSaving a result creates an immutable snapshot of the source evidence while keeping a foreign-key link to a real transcript segment. Users can edit only the memory title and personal note; editing never rewrites the transcript.\n\nDeleting a recording cascades through its transcript segments, semantic index, and saved memories. Re-transcription requires explicit confirmation because replacing source segment IDs can invalidate memories tied to the old transcript.\n\nI tested the release on a Ryzen 5 5600H with 14 GiB RAM:\n\n`base` CPU/int8 inference detected English and produced timestamped transcript segments.`git diff --check` passed.\nThe full verification record is here:\n\n[https://github.com/Th-Shivam/Lastwhisper/blob/master/docs/VERIFICATION.md](https://github.com/Th-Shivam/Lastwhisper/blob/master/docs/VERIFICATION.md)\n\nVoice recordings can contain identity, health information, relationships, locations, family history, and moments that were never meant to become somebody else's training or analytics data.\n\nA closed transcription or embedding API would make this archive depend on another company's:\n\nOpen models made a different architecture possible.\n\nAfter the model files are cached, LastWhisper can transcribe and search without uploading the recording or transcript to a hosted AI provider. The user can inspect where every result came from, replace a model, rebuild the index, back up ordinary files and SQLite, or continue using the archive even if an external service disappears.\n\nOpen also made the system more honest. The application records the exact model revision and embedding dimension that produced an index. If that configuration changes, the index can be rebuilt instead of quietly comparing incompatible vectors.\n\nAt the same time, I did not want to misuse the word “offline.” Initial dependency and model downloads require internet access. LastWhisper exposes cache state, supports local-files-only modes, and fails with actionable errors when required weights are unavailable instead of pretending inference succeeded.\n\nI built and release-hardened LastWhisper with meaningful AI-agent assistance through OpenCode. The process included repository audits, migration and concurrency reviews, real-model debugging, privacy hardening, frontend accessibility work, Docker verification, and adversarial release review.\n\nI have not embedded the raw private session transcript because it contains local development paths and operational details that require curation before public sharing. The public engineering trail is preserved in **31 focused commits**, automated tests, the verification report, and the repository's architecture/security documentation.\n\nCommit history:\n\n[https://github.com/Th-Shivam/Lastwhisper/commits/master](https://github.com/Th-Shivam/Lastwhisper/commits/master)\n\nThe most important moment in LastWhisper is not when a similarity score appears.\n\nIt is when someone clicks **Open source**, the recording jumps to the exact timestamp, and the original voice plays again.\n\nThe model does not replace that voice. It does not impersonate it or generate a polished version of what it thinks was said. It helps the listener return to the real evidence—the pause, tone, words, and context that made the memory meaningful in the first place.\n\nThat is the spirit of this project: using a machine not to manufacture a ghost, but to keep a real voice from being lost inside a forgotten audio file.\n\nI am entering LastWhisper for the **overall Hacktoberfest Open-Source AI Challenge: Week 4** prize.\n\nI am not claiming a partner prize category because the core application intentionally uses local open-source components rather than adding a sponsor technology only for eligibility.\n\n**Team submission:** Solo project.\n\n*This submission and implementation were created with meaningful AI assistance. I reviewed the technical claims, code, verification results, and final article, and will set DEV's AI disclosure to `some_ai` before publishing.*", "url": "https://wpnews.pro/news/lastwhisper-search-your-voice", "canonical_source": "https://dev.to/thshivam/lastwhisper-search-your-voice-622", "published_at": "2026-10-30 12:32:48+00:00", "updated_at": "2026-10-30 12:50:46.686302+00:00", "lang": "en", "topics": ["artificial-intelligence", "ai-tools", "natural-language-processing", "ai-products"], "entities": ["LastWhisper", "Whisper", "faster-whisper", "CTranslate2", "sentence-transformers", "FastAPI", "SQLite", "GitHub"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/lastwhisper-search-your-voice", "markdown": "https://wpnews.pro/news/lastwhisper-search-your-voice.md", "text": "https://wpnews.pro/news/lastwhisper-search-your-voice.txt", "jsonld": "https://wpnews.pro/news/lastwhisper-search-your-voice.jsonld"}}