The voices you don't want to lose
Your grandmother on her childhood school, thirty-eight minutes of it. You remember one line, about Rosie by the bakery. Type bakery. You're there in three seconds.
Organised your way, shared with the people it belongs to, and searchable inside everything you have ever recorded.
The recordings that matter most are the ones with no second copy. Your child's first words, a long conversation with your father, a song your grandmother used to sing — and just as much the interview you will have to cite, a whole course of lectures, or the ideas you dictated in the car.
They deserve a place of their own, organised the way you organise things, on hardware you control. What they usually get is a folder, and an audio file you cannot skim is an audio file nobody ever opens again.
Upload in the browser, or import a folder from the command line. The original is kept exactly as it arrived.
Resonand doesn't transcribe. When you ask, it sends the audio to the engine you choose: a server on your own network, or a hosted one.
One search across every recording. Click a result and it plays from that second.
Most tools in this space began with one question — I have this file, transcribe it — and grew around the answer. Resonand began with the archive: the transcript is how you find a moment, and the original is what you keep. Change engines, or leave, and everything goes with you.
Your grandmother on her childhood school, thirty-eight minutes of it. You remember one line, about Rosie by the bakery. Type bakery. You're there in three seconds.
Three days of a conference, recorded from the back of the hall. Find where somebody said that attention is not a resource, with a timestamp you can cite.
Six minutes walking home, mostly traffic, and one note worth keeping: ask, then shut up for a bit. Search finds it again.
Every Tuesday until the concert, in a library the choir shares with you. Type altos and hear the entry that came in late.
Minutes for anybody who missed a meeting, shared by the neighbours' association. Search parking and hear what was decided: as in March, nothing.
Lectures, soundscapes and birdsong, dialect fieldwork, spoken diaries.
Audio leaves your instance only when somebody asks for a transcription, and only for the endpoint it's set up with. In the interface, you see where it goes before it's sent.
Point it at a server on your own network and nothing leaves at all.
Who's responsible. Whoever runs an instance is the data controller, and decides what gets recorded, who it's shared with and which services it touches. Laws on recording conversations differ by country, and checking yours is up to you.

One query across every transcript in your archive, not inside one file at a time. Every result carries a timestamp and plays from that exact second.
Libraries, categories and cross-cutting tags. Built for hundreds of hours, not for one work session.
Real accounts for the people you share an archive with, and sharing at library level, with permissions resolved on every single read.
Always timestamped segments, never a wall of text — that is what lets the transcript follow along as it plays, and a click on any line jump there.
A documented HTTP API, with the web interface as just another client of it.
One container, one volume, SQLite inside. Docker on amd64 or arm64: a Raspberry Pi will do.
docker compose up -d.
resonand check-transcription: it uses a tone, never your audio.
Engines. Any OpenAI-compatible server that returns timed segments, such as
faster-whisper on your own network or Groq. Not OpenAI's gpt-4o-transcribe
models, which return no timestamps.
Backups. resonand backup copies the database while it runs;
restic or Borg takes the originals, and resonand fsck checks a restore.
Upgrades. The tag is pinned and the database migrates itself. Back up first: the way back is a restore.
services:
resonand:
image: ghcr.io/resonand-app/resonand:0.2.0
restart: unless-stopped
ports:
# Localhost only: put your reverse proxy in front for TLS.
- "127.0.0.1:8000:8000"
volumes:
- resonand-data:/data
environment:
# openssl rand -hex 32
RESONAND_SECRET_KEY: ""
# Where transcription happens. It must end in /v1.
# RESONAND_TRANSCRIPTION_BASE_URL: http://10.0.0.5:8000/v1
volumes:
resonand-data: Resonand is built by one person, with the help of LLMs. Every decision is still mine.
More transcription engines, transcript editing and an MCP server. No dates, and the rest is on the roadmap.
Issues, security reports and code are welcome. Open an issue before a large change.
It's AGPL-3.0 with no CLA, it's documented, and one command exports everything in a readable format. Nobody gets stranded, and nobody can take it closed.