Personal project · Open source · 2026
transcribe
Audio and video transcription in the terminal, local and offline: interactive picker, timestamps and subtitles. Open source.
My role
Idea, interface design, development and open-source release, with Claude Code as a pair programmer.
Stack
- Python
- faster-whisper
- Whisper
- ffmpeg
- questionary
- Rich
- pytest
- GitHub Actions
The problem
Turning a voice note or a recorded class into text usually means uploading it to a cloud service. transcribe does it on your own computer: pick the files from a menu (or pass them as arguments) and get the text, with timestamps or .srt subtitles if you want them. Nothing leaves the machine.
Highlights
- 01Interactive picker: your Downloads newest first, with duration and age; type to filter, multi-select and search the whole machine (home folder + mounted drives) with fd.
- 02Fast without a GPU: Whisper's small model transcribes about 10× faster than real time on a laptop CPU; a 30-second voice note takes ~3 s.
- 03GPU only when it really works: before using it, it checks that the CUDA libraries load, and if it fails mid-way it carries on with the CPU instead of crashing.
- 04Reads any format through ffmpeg (voice notes, mp3, the audio of a video), which also avoids a version clash between faster-whisper and PyAV.
- 05Spanish or English interface following the system, output to screen, .txt and .srt, 29 tests with a fake model and GitHub Actions CI on three Python versions.
What I learned
- → 01A bigger model does not always fix the mistake: the large model missed the same fast-spoken word, so I kept the small one instead of downloading extra gigabytes.
- → 02A visible GPU is not a usable GPU: on my laptop the model loaded on the GPU and only failed when transcribing, because a library was missing.
- → 03Using the interface like a user finds what tests miss: driving it from tmux exposed a search-filter bug that no test covered.
Posts about this project
Next project
rOS →