An advanced, privacy-focused audio recording and AI transcription suite. It captures microphone and system audio independently and generates high-accuracy meeting transcripts with precise speaker attribution — locally via whisper.cpp or in the cloud via the ElevenLabs Scribe API.
- 🚀 Quick Start
- 🐧 Platform Compatibility & Downloads
- ✨ Features
- 🏗️ Architecture & Project Structure
- 🗣️ How Speaker Diarization Works
- 🎛️ User Interface & Tabs
- ⚙️ Technical Highlights
- 🧪 Testing & Quality Assurance
- 📦 Automated Release Build
- 📄 License & FOSS Status
No Python installation or terminal setup required!
- Download the latest release package for your operating system from the Releases Page:
- Windows (x64):
AudioTranscriber-<version>-windows-x64.zip - Linux (x64):
AudioTranscriber-<version>-linux-x64.tar.gz - macOS (Apple Silicon):
AudioTranscriber-<version>-macos-arm64.zip
- Windows (x64):
- Extract the archive to any folder.
- Launch
AudioTranscriber.exe(Windows),./AudioTranscriber(Linux), orAudioTranscriber.app(macOS).
🍎 Intel Macs: the released macOS build is Apple Silicon only. On an Intel Mac, run from source (Option B) or build locally with
python build_release.py, which produces amacos-x64archive.
- Clone the repository and install the Python dependencies:
git clone https://github.com/SecretLUL/Audio-Transcriber.git cd Audio-Transcriber pip install -r requirements.txt - Launch the application:
- Windows (no console): Double-click
Start-Recorder.vbs - Terminal / Cross-platform: Run
python main.py
- Windows (no console): Double-click
💡 Note:
whisper.cppbinaries and GGML models are automatically fetched on demand to thebin/directory on first launch.
| Operating System | Pre-built Executable | Running from Source | Audio Capture Backend |
|---|---|---|---|
| Windows 10 / 11 (x64) | ✅ Supported (.exe in .zip) |
✅ Supported | Native WASAPI Loopback (pyaudiowpatch) |
| Linux (Ubuntu, Debian, Arch, etc.) | ✅ Supported (.tar.gz) |
✅ Supported | PulseAudio / PipeWire Monitor (pyaudio) |
| macOS (Intel & Apple Silicon M1-M4) | ✅ Supported (.zip) |
✅ Supported | CoreAudio + BlackHole Loopback |
🤖 Automated CI/CD Pipeline: GitHub Actions automatically compiles and packages standalone releases for Windows, Linux, and macOS on every release tag (
v*).
- 🎤 Dual-Track Capture: Separate recording of your voice (microphone) and other participants (system audio).
- 📁 Audio File Upload & Transcription: Upload and transcribe any local audio file (
.wav,.mp3,.m4a,.flac,.ogg,.aac,.wma,.mp4,.webm,.opus, etc.). - 📂 Custom Output Directory: Choose any target folder on your system for saving output
.wavaudio files and.txttranscripts. - 🗂️ Tabbed Interface: Modern tabbed layout dividing controls cleanly into Recorder, Settings, and Transcript.
- 🗣️ Smart Speaker Diarization: Exact speaker tagging (
[You]vs[Participant]) via track-relative level comparison. - 🤖 Offline Local AI: Integrated
whisper.cppengine with automatic GGML model downloads (Tiny to Large-v3). - ☁️ Cloud API Acceleration: Optional ElevenLabs Scribe v2 integration with token-level timestamp alignment.
- ⚡ Real-Time Live Preview: Streaming live transcription while recording without cutting off closing audio.
- 🎛️ DAW-Grade VUMeters: Custom hand-drawn peak/RMS meters with dynamic dB readouts and gain sliders (-20 dB to +20 dB).
- 🔒 Encrypted Secret Storage: ElevenLabs API keys are encrypted via Windows DPAPI or secure user-scoped storage.
- 🎨 Modern Dark Interface: Custom Tkinter
Canvasdesign system with zero external UI framework dependencies. - 🆓 100% Free & Open Source: Released under the permissive MIT License.
Audio-Transcriber/
├── main.py Entry point for python / pythonw launch
├── Start-Recorder.vbs Windows double-click launcher
├── build_release.py Automated PyInstaller standalone build & zip packaging
├── requirements.txt Core dependencies (pyaudiowpatch, soundfile, scipy, numpy, Pillow)
├── LICENSE MIT License (100% FOSS)
├── README.md Project documentation
├── audio_transcriber/ Main application package
│ ├── paths.py Central path resolution & filename sanitization
│ ├── config.py Typed & versioned settings (Schema v2)
│ ├── secretstore.py DPAPI Windows key encryption
│ ├── events.py Thread-safe UI event bridge & pump
│ ├── diarize.py Speaker merging, bleed & hallucination filter
│ ├── pipeline.py Post-processing workflow & live preview engine
│ ├── audio/ Audio processing module
│ │ ├── devices.py WASAPI / PulseAudio enumeration & loopback matching
│ │ ├── capture.py Multi-device audio capture & disk streaming
│ │ ├── dsp.py Active channel downmix & 16 kHz polyphase resampling
│ │ └── loader.py Universal audio file loader with soundfile & FFmpeg fallback
│ ├── transcribe/ AI Transcription engines
│ │ ├── base.py Shared backend interface & timestamp parsers
│ │ ├── binaries.py Atomic model & binary downloader
│ │ ├── whispercpp.py Local whisper.cpp CLI subprocess runner
│ │ └── elevenlabs.py Cloud ElevenLabs Scribe API runner
│ └── ui/ Interface module
│ ├── theme.py Color tokens & dark ttk clam styles
│ ├── widgets.py Custom Canvas Cards, Sliders, Switches & Transcript
│ └── app.py Main Tkinter window controller
└── legacy/ Archived single-file implementation
Instead of downmixing audio upfront and estimating speakers probabilistically, both audio channels are captured and transcribed independently. Speaker attribution is then determined deterministically in diarize.py:
- Crosstalk / Bleed Filtering: Speaker audio bleeding into the microphone is filtered using relative track energy levels (independent of gain sliders).
- Hallucination Prevention: Audio segments with no signal energy on their source track are automatically dropped.
- Duplicate Resolution: Identical sentences detected on both tracks are merged, giving priority to the clearer audio source.
- 🎙️ Recorder Tab: Audio device selection, gain sliders (-20.0 dB to +20.0 dB), real-time gained VUMeters, file naming, Upload file button, and Start/Stop recording (
F5). - ⚙️ Settings Tab:
- Transcription Engine: Model selection (Tiny to Large-v3), Language choice (Auto-detect + 100+ languages), and ElevenLabs API key.
- Output Directory: Target folder selector for
.wavaudio files and.txttranscripts with Browse... and Reset buttons. - Processing Switches:
- ⚡ Live preview: Real-time streaming transcription during active recording.
- 🎛️ Separate tracks: Dual-channel capture mode (Microphone + System Audio).
- 🎙️ VAD: Voice Activity Detection pre-filtering (Silero VAD).
- 💾 Keep raw tracks: Preserves unmixed separate microphone and system audio
.wavfiles for post-processing in DAWs/NLEs (e.g. Audacity, Premiere Pro).
- 📄 Transcript Tab: Full transcript viewer with Copy, Save (export as
.txt), and Clear toolbar buttons.
⌨️ Global Hotkey: Press
F5at any time to start or stop recording instantly.
- WASAPI / PulseAudio Loopback: Native system audio capture guarantees zero-loss recording.
- Universal Audio Loader: Reads native audio formats via
soundfilewith an automaticFFmpegfallback for M4A, AAC, WMA, MP4, WebM, and Opus files. - High-DPI & WQHD Display Scaling: Native Windows High-DPI awareness (
SetProcessDpiAwareness(2)) and dynamic scaling for WQHD (1440p) and 4K displays. - Voice Activity Detection (VAD): Optional Silero VAD (
ggml-silero-vad.bin) pre-filtering. When enabled, it strips silence before feeding audio to Whisper. It is disabled by default to preserve precise sentence timestamps essential for speaker diarization;diarize.pyfilters pause hallucinations using track-relative RMS energy instead. - Polyphase Resampling: High-quality 16 kHz Mono resampling via
scipy.signal.resample_poly. - Atomic File Operations: Safe binary downloads and atomic settings updates prevent file corruption.
- Vulkan / GPU Notice: By default, GPU flags (
-ng) fall back to CPU execution to prevent driver crashes on unsupported hardware. Compatible builds can enable GPU acceleration viaallow_gpu.
The project includes an extensive automated test suite covering all modules:
python run_tests.py- 128+ Unit Tests:
- 🎵 Audio & DSP: Resampling, downmixing, active channel detection, RMS metering, and universal audio file loading (FFmpeg fallback).
- 🗣️ Diarization: Speaker attribution, crosstalk filtering, and overlap deduplication.
- 🔒 Security & Config: Windows DPAPI encryption roundtrips, secret storage, and schema migrations.
- 🖥️ GUI & Lifecycle: Widget geometries, high-DPI scaling, tabbed layout, gain slider meter reactivity, and window teardown handlers.
To build a standalone executable and release archive locally using PyInstaller:
python build_release.pyThe build runs on Windows, Linux and macOS and names the archive after the
current platform and version, e.g. AudioTranscriber-v1.2.0-windows-x64.zip.
The version is resolved in this order:
- An explicit argument —
python build_release.py v1.2.0 - The
RELEASE_VERSIONenvironment variable (the CI sets this from the tag) - The git tag pointing at
HEAD v0.0.0-devas a fallback
Before archiving, the script verifies that every module the app imports at startup actually made it into the bundle and fails the build otherwise.
The output executable and archive are saved in the dist/ directory.
This project is 100% Free and Open Source Software (FOSS) released under the permissive MIT License.
MIT License - Copyright (c) 2026 SecretLUL
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so.
You are free to use, modify, distribute, and integrate this software in personal or commercial projects.