Marigold Archive 讓用戶離線查問家庭錄音
Marigold Archive: ask your family's recordings questions, offline
Pardeep Gir 建立 Marigold Archive,讓家庭錄音可在本機離線轉錄並接受內容提問。它以 faster-whisper 轉錄,再用 multilingual MiniLM、ChromaDB 和 Gemma(透過 Ollama)檢索及生成答案;每個答案附故事、時間戳和錄音原文引句,找不到相關內容時則返回固定句子。
This is a submission for the Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine
What I Built
Marigold Archive is a local app that turns family recordings into something you can ask questions. You drop in audio, it transcribes it, and you ask "What did grandmother say about Diwali morning?" Every answer shows the story, the timestamp, the exact quoted line, and a player that starts at that second.
If the recordings don't contain the answer, it says: "I couldn't find that in the recordings." It never invents a memory.
Día de los Muertos (Day of the Dead) is a Mexican tradition on November 1 and 2, when families remember loved ones who have died. They build an altar with candles, orange marigold flowers and photos, and they tell the person's stories. The belief is that someone is truly gone only when nobody remembers them anymore.
Marigold Archive is built around that idea. The ghost in this machine is a voice, kept alive like a candle on that altar. The app uses a candle, marigold colors, and an "Altar Holdings" panel that counts the stories and the minutes of voice preserved.
Demo
Marigold Archive runs on your own laptop and is not hosted anywhere. These are family voices, so I deliberately did not put them on a server I don't control.
Upload & Transcribe: place a recording on the altar (MP3, WAV, M4A, OGG or FLAC), add a title and narrator, and it is transcribed on the CPU with no internet.
Stories Library: every recording, kept on this device with its transcript and a Review / Edit button.
Code
git clone https://github.com/Pardeep-Gir-404/Marigold-Archive
cd Marigold-Archive
python setup.py
streamlit run app.py
How I Built It
audio -> faster-whisper -> timestamped segments
-> chunks -> multilingual MiniLM -> ChromaDB
-> top matching chunks -> Gemma (Ollama) -> answer + citations
Stack: faster-whisper, Gemma via Ollama, ChromaDB, sentence-transformers, Streamlit. No API keys, no cloud calls, no server.
A small model loves to invent memories.
My first idea was the usual one: retrieve the relevant transcript chunks and tell the model to "answer using the context." The problem is that small local models fill gaps with plausible details. For a family archive that is the worst possible failure, because a made-up memory sounds exactly like a real one.
So the app is strict by design. Gemma only sees the retrieved transcript chunks, it must answer from them alone, and every answer carries the story, timestamp and exact quoted line so I can check it against the audio. If nothing relevant is retrieved, the app returns a fixed sentence, "I couldn't find that in the recordings", instead of letting the model guess.
Transcription needs a human.
Speech-to-text makes mistakes, especially with names, regional words and accents. That is why the Review / Edit page exists: I can open any story, fix the transcript, save, and the story is re-indexed so answers use the corrected text. There is also a "Sync & Re-Index All" button.
What I'd do differently: Whisper does not tell speakers apart, so a question like "what did grandfather say" only works well when each recording has one voice. Speaker labels would be my next step.
Why Does Open Innovation Matter?
These are my family's voices. Sending them to a hosted transcription API means handing a company recordings I can't take back.
- Offline: transcription, search and answers all run on the device. There are no API keys and no cloud calls, so it works with the internet off.
- Swappable: the model is a setting, not a dependency. Because Gemma runs through Ollama, I can try a smaller or larger model without changing the rest of the app.
- Durable: the archive is audio files plus transcripts stored locally. If every tool I used disappeared tomorrow, the stories would still be readable.
- Cost: Rs 0 to run.
The Spirit of It
The first story I tested with was a Diwali memory: grandmother waking before dawn in the village, heating golden ghee in a heavy iron pan, stirring roasted semolina with cardamom, saffron and cashew nuts.
It was a short recording, but asking the archive about it and getting back the exact line with its timestamp felt different from searching a file. The voice was not just stored, it could be asked.
That is the whole point of Marigold Archive. Stories like this usually live only in someone's head, and they disappear with them. This keeps one small candle lit for each.
來源:DEV Community · dev.to

