Altar Archive: A Voice Recording Becomes a Memorial Card
What I Built Altar Archive is a local, CPU only tool that turns a voice recording into a printable memorial card an ofrenda for the digital age. You drop in an audio file. It transcribes every word the person said, br
What I Built
Altar Archive is a local, CPU only tool that turns a voice recording into a printable memorial card an ofrenda for the digital age.
You drop in an audio file. It transcribes every word the person said, breaks it into lines, and shows you the lines on screen. You tap the ones that feel right to keep. A small open-source AI called TabPFN learns from your choices and picks five more lines it thinks you'd want β lines you never even marked. The result is a single printable HTML file: five things they actually said, with the timestamps of when they said them, framed like a memorial card.
The audio never leaves your machine.
Inspiration
The theme was "Ghost in the Machine." Most people read that as: build something spooky, generate something eerie.
I read it differently.
In Yoruba and across West Africa, the dead are not gone they are present, in the stories people tell, the words they leave behind. The ofrenda tradition from DΓa de Muertos captures the same idea: you build a table for someone who is absent, and their presence fills it.
The ghost in this machine is not generated. It is retrieved. The voice was already recorded. The words were already said. The machine just listens carefully enough to find the ones worth keeping.
That felt more honest than hallucinating a ghost.
How I Built It
The pipeline has five stages:
| Stage | What it does |
|---|---|
| Hear |
faster-whisper transcribes the audio on CPU β no cloud, no GPU |
| Describe | 14 text features extracted per line (speed, pauses, position, emotional keywords) |
| Choose | You label ~10 lines keep/skip; TabPFN ranks the rest |
| Shape |
card.py renders a self-contained HTML file with inline SVG art |
| Speak | Optional ElevenLabs narration (sends card text only, not audio) |
On top of that I built a local Flask web UI three screens: upload, choose lines, see the card. Plain HTML, no frameworks, binds to 127.0.0.1 only.
The leave-one-out check is honest: for each label I gave, the model fits on everything else and predicts that one. That number however it comes out is what appears on the card footer. No rounding up.
What I Learned
I learned that honesty is a design decision.
Every number on the card is computed by the code. The LOO agreement score is printed exactly as calculated. The footer says whether TabPFN or the fallback model was used. If the prose paragraph failed validation and a template was substituted, that is recorded too.
I also learned that a busy painting and readable text cannot share the same space. The card art is an oil-style painting of a ghost holding marigolds. I spent more time than I expected on the layout β getting the text on a separate paper panel, keeping contrast at AA, making it print cleanly on A5 than on any single pipeline stage.
And I learned that faster-whisper on a CPU with 8 GB RAM and no GPU is genuinely fast enough to feel alive.
Challenges
TabPFN on CPU. The licence probe fires at fit time, not import time. I had to wrap the fit call, not the import, and make the fallback seamless.
Short recordings. If the audio has fewer than 14 segments, the pipeline fails gracefully with a plain message: "I could only find 9 separate lines in this recording. A recording of about 1 to 2 minutes with pauses between sentences works best." Getting that message right took longer than expected
Honesty under pressure. When the demo showed "18/20 agreed," I went back and checked. Human labels gave 13/18. I changed the number. A hackathon is not worth a false claim.
Demo: https://youtu.be/GcSZPIslutg?si=QYmbuQoFPiIHGO4S
Code: https://github.com/Sayo-codes/altar-archive
Open-source AI tools like TabPFN and faster-whisper made this possible on a regular laptop with no GPU and no subscription. A closed tool would have sent the audio to a server. An open one let me guarantee it never leaves the machine. That guarantee is not a feature it is the point. When the recording is someone's last words, where the audio goes is not a small question. Open innovation meant I could answer it honestly.
devchallenge. #hf26challenge
Originally published by Dev.to AI. Aggregated on AIWithGhost for educational purposes β full credit and traffic to the original publisher.