Record and transcribe Teams, Zoom, and Google Meet calls locally with AI-powered speaker identification. Open-source alternative to Evaer, Otter.ai, and Fireflies. Offline speech-to-text using Whisper — no cloud, no subscriptions.
50
stars
233
commits
Python
primary language
Aug 30, 2026
updated
Record, transcribe, and identify speakers from your calls — all locally on your machine. Free and open-source alternative to Evaer, Otter.ai, and Fireflies.
TalkTrack is a Windows desktop app for recording and transcribing Microsoft Teams calls, Zoom meetings, Google Meet sessions, and any other audio app. It uses Faster Whisper for local speech-to-text and pyannote.audio for speaker identification. Everything runs offline — no cloud services, no subscriptions, no data leaves your PC.

~/.talktrack/talktrack.log with crash dialoggit clone https://github.com/ObscureAintSecure/TalkTrack.git
cd TalkTrack
Just double-click start.bat. On first launch it sets up an isolated environment and installs dependencies automatically — no manual steps needed.
Note: dependencies are installed into a project-local virtual environment (
.venv), not your global Python. This keeps heavy packages like PyTorch and pyannote.audio from polluting or upgrading packages in your system Python.
If uv is installed, start.bat uses it automatically. You can also drive it directly:
uv sync # create .venv and install pinned dependencies from uv.lock
uv run python main.py
uv sync is reproducible (it installs the exact versions in uv.lock) and fast. By default it installs CPU PyTorch, which works on any machine.
If you have an NVIDIA GPU, install the CUDA build of PyTorch for much faster transcription and diarization. CPU and GPU builds are mutually exclusive extras — pick one:
uv sync --extra cuda # CUDA 12.6 build (NVIDIA GPU)
# CPU is the default; uv sync --extra cpu pins the CPU build explicitly
Without uv:
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu126
Confirm it worked in Help > System Status (GPU Acceleration should read "detected with CUDA 12.6"), then set Compute Device to CUDA in Settings.
Windows note: if
uv sync --extra cudafails withfailed to rename ... Access is denied (os error 5), antivirus is locking the large download in uv's cache. Retry, runuv cache cleanfirst, or add%LOCALAPPDATA%\uv\cacheto your antivirus exclusions. The plain-pip command above sidesteps it.
If uv isn't installed, start.bat falls back to a local .venv created with Python's built-in venv + pip. To do it manually:
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
python main.py
requirements.txtis kept in sync withpyproject.tomlfor users who prefer plain pip.
On first run TalkTrack offers to add a Start Menu shortcut (also available any time via Help > Add to Start Menu). The shortcut targets the project's .venv interpreter and carries the app icon, so Windows shows the correct taskbar icon. Launch from that shortcut, then right-click the running taskbar icon and choose Pin to taskbar if you want it pinned.
For troubleshooting, use start_debug.bat which shows a console window with log output.
For multi-speaker identification (speaker 1, speaker 2, etc...), TalkTrack uses pyannote.audio which requires a free HuggingFace account. On first launch, a setup wizard walks you through the steps:
Without this setup, TalkTrack still works — it just labels speakers as "You" and "Remote" based on audio channels.
Windows 11: Select specific apps (Teams, Chrome, etc.) in the app picker to capture only their audio.
Windows 10: Captures all system audio via WASAPI loopback.
TalkTrack uses Faster Whisper, a CTranslate2-optimized version of OpenAI's Whisper model. Everything runs locally — no audio is sent to any server.
combined_audio.wav used for transcription.combined_audio.wav and produces timestamped text segments. VAD (Voice Activity Detection) filtering skips silence automatically.transcript.json and speaker_names.json in the recording directory.Choose a model in Settings > Transcription based on your speed/accuracy needs:
| Model | Size | Speed | Accuracy | VRAM (GPU) |
|---|---|---|---|---|
tiny | ~75 MB | Fastest | Basic | ~1 GB |
base | ~145 MB | Fast | Good | ~1 GB |
small | ~480 MB | Moderate | Better | ~2 GB |
medium | ~1.5 GB | Slow | Great | ~5 GB |
large-v3 | ~3 GB | Slowest | Best | ~10 GB |
large-v3-turbo | ~1.6 GB | Fast | Near-best | ~6 GB |
Models are downloaded automatically on first use and cached locally. No internet is needed after the initial download.
int8 quantization) — works on any machine, no extra setup. Good enough for most use cases.float16) — significantly faster if you have an NVIDIA GPU with CUDA installed. Select "CUDA (NVIDIA GPU)" in Settings > Transcription > Compute Device.TalkTrack automatically detects your GPU and CUDA availability in the System Status panel (Help > System Status) and shows guidance if CUDA isn't properly configured.
By default, Whisper auto-detects the spoken language. You can set a specific language in Settings > Transcription > Language (e.g., en, es, de) to improve accuracy and speed if you know what language will be spoken.
Speaker diarization identifies who is speaking at each point in the transcript. TalkTrack offers two modes:
Works out of the box. Compares audio energy between your microphone track and the system/app audio track to label each segment as "You" or "Remote". Best for 1-on-1 calls.
Uses the pyannote.audio neural pipeline to identify individual speakers (SPEAKER_00, SPEAKER_01, etc.). Works for any number of participants. Requires a free HuggingFace account — see Speaker Diarization setup above.
You can optionally set min/max speaker counts in Settings to help the model when you know how many people are on the call.
After diarization, use the Speaker Name Panel in the transcript viewer to map generic labels (SPEAKER_00) to real names. Names are saved per recording and included in exports.
TalkTrack integrates with AI providers to generate meeting summaries, extract action items, and chat with your transcripts. AI features are entirely optional — the core recording and transcription works without them.
| Provider | Models | Package |
|---|---|---|
| Claude (Anthropic) | claude-sonnet-4-6, claude-haiku-4-5, claude-opus-4-6 | anthropic |
| OpenAI | gpt-4o, gpt-4o-mini, gpt-4-turbo, gpt-3.5-turbo | openai |
| Grok (xAI) | grok-3, grok-3-mini, grok-2 | openai |
| Google Gemini | gemini-2.5-flash, gemini-2.5-pro, gemini-2.0-flash | google-generativeai |
| Mistral | mistral-large-latest, mistral-medium, mistral-small | mistralai |
| Groq (groq.com) | openai/gpt-oss-120b, openai/gpt-oss-20b, qwen/qwen3.6-27b | groq |
| Local | Any GGUF model via llama-cpp-python | llama-cpp-python |
SDK packages are installed automatically when you select a provider — no need to install them manually. Configure your provider and API key in Settings > AI.
To pre-install a provider (e.g. for offline setup), use the optional extras:
uv sync --extra claude # or: openai, grok, gemini, mistral, groq, local, all-ai
# without uv: pip install ".[claude]"
| Format | Description |
|---|---|
| TXT | Plain text with timestamps and speaker labels |
| SRT | Subtitle format, compatible with video players |
| JSON | Structured data with all segment metadata |
All exports include speaker names if assigned.
Access via the gear icon or Edit > Settings:
| Setting | Options | Default |
|---|---|---|
| Whisper Model | tiny, base, small, medium, large-v3, large-v3-turbo | small |
| Compute Device | CPU, CUDA (NVIDIA GPU) | CPU |
| Language | Auto-detect, or specify (en, es, etc.) | Auto-detect |
| Sample Rate | 16000, 22050, 44100, 48000 Hz | 16000 |
| Output Format | WAV, MP3 (requires FFmpeg) | WAV |
| Capture Mode | Per-app (Win11) or System Audio | Auto-detected |
| Diarization | Enabled/Disabled, min/max speakers | Disabled |
| AI Provider | None, Claude, OpenAI, Grok, Gemini, Mistral, Groq, Local | None |
| AI Model | Provider-specific model list | Varies |
| Min Recording Length | Discard recordings shorter than N seconds | 5s |
| Auto-Record | Start recording when selected app joins a call | Off |
| Hidden Devices | Filter out unwanted audio devices by keyword | None |
TalkTrack/
main.py # Entry point, logging, crash handling
start.bat # Launcher (uv-first, .venv isolation, pip fallback)
start_debug.bat # Debug launcher with console output
requirements.txt # Dependencies
resources/
style.qss # Dark theme stylesheet
talktrack.ico # App icon (multi-size)
arrow_up.png, arrow_down.png # QSpinBox arrow icons
build_ico.py # Rebuild .ico from source PNGs
TT_icon_*.png # Icon source files (32-512px)
TT_logo_*.png # Logo files for branding
app/
main_window.py # Main window + orchestration
audio/
segment_player.py # Audio clip playback
recording/
audio_capture.py # WASAPI capture (system + per-app)
process_audio_capture.py # Win11 per-process capture
recorder.py # Recording state machine
transcription/
transcriber.py # Faster Whisper integration
diarizer.py # Speaker diarization (pyannote)
ai/ # AI provider integrations (6 providers)
ui/ # All UI components
utils/ # Config, device enumeration, helpers
tests/ # Unit tests
recordings/ # Output directory
python -m pytest tests/ -v
| Component | Library |
|---|---|
| GUI | PyQt6 |
| Audio Capture | sounddevice, WASAPI, comtypes |
| Transcription | faster-whisper |
| Speaker Diarization | pyannote.audio 4.0 |
| AI Providers | anthropic, openai, google-generativeai, mistralai, groq (on-demand) |
| Deep Learning | PyTorch |
| Audio Processing | scipy, pydub, soundfile, numpy |
| Windows Integration | pywin32, pycaw, comtypes |
MIT — see LICENSE.
Python
99.5%
Record and transcribe Teams, Zoom, and Google Meet calls locally with AI-powered speaker identification. Open-source alternative to Evaer, Otter.ai, and Fireflies. Offline speech-to-text using Whisper — no cloud, no subscriptions.
50
stars
233
commits
Python
primary language
Aug 30, 2026
updated
Record, transcribe, and identify speakers from your calls — all locally on your machine. Free and open-source alternative to Evaer, Otter.ai, and Fireflies.
TalkTrack is a Windows desktop app for recording and transcribing Microsoft Teams calls, Zoom meetings, Google Meet sessions, and any other audio app. It uses Faster Whisper for local speech-to-text and pyannote.audio for speaker identification. Everything runs offline — no cloud services, no subscriptions, no data leaves your PC.

~/.talktrack/talktrack.log with crash dialoggit clone https://github.com/ObscureAintSecure/TalkTrack.git
cd TalkTrack
Just double-click start.bat. On first launch it sets up an isolated environment and installs dependencies automatically — no manual steps needed.
Note: dependencies are installed into a project-local virtual environment (
.venv), not your global Python. This keeps heavy packages like PyTorch and pyannote.audio from polluting or upgrading packages in your system Python.
If uv is installed, start.bat uses it automatically. You can also drive it directly:
uv sync # create .venv and install pinned dependencies from uv.lock
uv run python main.py
uv sync is reproducible (it installs the exact versions in uv.lock) and fast. By default it installs CPU PyTorch, which works on any machine.
If you have an NVIDIA GPU, install the CUDA build of PyTorch for much faster transcription and diarization. CPU and GPU builds are mutually exclusive extras — pick one:
uv sync --extra cuda # CUDA 12.6 build (NVIDIA GPU)
# CPU is the default; uv sync --extra cpu pins the CPU build explicitly
Without uv:
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu126
Confirm it worked in Help > System Status (GPU Acceleration should read "detected with CUDA 12.6"), then set Compute Device to CUDA in Settings.
Windows note: if
uv sync --extra cudafails withfailed to rename ... Access is denied (os error 5), antivirus is locking the large download in uv's cache. Retry, runuv cache cleanfirst, or add%LOCALAPPDATA%\uv\cacheto your antivirus exclusions. The plain-pip command above sidesteps it.
If uv isn't installed, start.bat falls back to a local .venv created with Python's built-in venv + pip. To do it manually:
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
python main.py
requirements.txtis kept in sync withpyproject.tomlfor users who prefer plain pip.
On first run TalkTrack offers to add a Start Menu shortcut (also available any time via Help > Add to Start Menu). The shortcut targets the project's .venv interpreter and carries the app icon, so Windows shows the correct taskbar icon. Launch from that shortcut, then right-click the running taskbar icon and choose Pin to taskbar if you want it pinned.
For troubleshooting, use start_debug.bat which shows a console window with log output.
For multi-speaker identification (speaker 1, speaker 2, etc...), TalkTrack uses pyannote.audio which requires a free HuggingFace account. On first launch, a setup wizard walks you through the steps:
Without this setup, TalkTrack still works — it just labels speakers as "You" and "Remote" based on audio channels.
Windows 11: Select specific apps (Teams, Chrome, etc.) in the app picker to capture only their audio.
Windows 10: Captures all system audio via WASAPI loopback.
TalkTrack uses Faster Whisper, a CTranslate2-optimized version of OpenAI's Whisper model. Everything runs locally — no audio is sent to any server.
combined_audio.wav used for transcription.combined_audio.wav and produces timestamped text segments. VAD (Voice Activity Detection) filtering skips silence automatically.transcript.json and speaker_names.json in the recording directory.Choose a model in Settings > Transcription based on your speed/accuracy needs:
| Model | Size | Speed | Accuracy | VRAM (GPU) |
|---|---|---|---|---|
tiny | ~75 MB | Fastest | Basic | ~1 GB |
base | ~145 MB | Fast | Good | ~1 GB |
small | ~480 MB | Moderate | Better | ~2 GB |
medium | ~1.5 GB | Slow | Great | ~5 GB |
large-v3 | ~3 GB | Slowest | Best | ~10 GB |
large-v3-turbo | ~1.6 GB | Fast | Near-best | ~6 GB |
Models are downloaded automatically on first use and cached locally. No internet is needed after the initial download.
int8 quantization) — works on any machine, no extra setup. Good enough for most use cases.float16) — significantly faster if you have an NVIDIA GPU with CUDA installed. Select "CUDA (NVIDIA GPU)" in Settings > Transcription > Compute Device.TalkTrack automatically detects your GPU and CUDA availability in the System Status panel (Help > System Status) and shows guidance if CUDA isn't properly configured.
By default, Whisper auto-detects the spoken language. You can set a specific language in Settings > Transcription > Language (e.g., en, es, de) to improve accuracy and speed if you know what language will be spoken.
Speaker diarization identifies who is speaking at each point in the transcript. TalkTrack offers two modes:
Works out of the box. Compares audio energy between your microphone track and the system/app audio track to label each segment as "You" or "Remote". Best for 1-on-1 calls.
Uses the pyannote.audio neural pipeline to identify individual speakers (SPEAKER_00, SPEAKER_01, etc.). Works for any number of participants. Requires a free HuggingFace account — see Speaker Diarization setup above.
You can optionally set min/max speaker counts in Settings to help the model when you know how many people are on the call.
After diarization, use the Speaker Name Panel in the transcript viewer to map generic labels (SPEAKER_00) to real names. Names are saved per recording and included in exports.
TalkTrack integrates with AI providers to generate meeting summaries, extract action items, and chat with your transcripts. AI features are entirely optional — the core recording and transcription works without them.
| Provider | Models | Package |
|---|---|---|
| Claude (Anthropic) | claude-sonnet-4-6, claude-haiku-4-5, claude-opus-4-6 | anthropic |
| OpenAI | gpt-4o, gpt-4o-mini, gpt-4-turbo, gpt-3.5-turbo | openai |
| Grok (xAI) | grok-3, grok-3-mini, grok-2 | openai |
| Google Gemini | gemini-2.5-flash, gemini-2.5-pro, gemini-2.0-flash | google-generativeai |
| Mistral | mistral-large-latest, mistral-medium, mistral-small | mistralai |
| Groq (groq.com) | openai/gpt-oss-120b, openai/gpt-oss-20b, qwen/qwen3.6-27b | groq |
| Local | Any GGUF model via llama-cpp-python | llama-cpp-python |
SDK packages are installed automatically when you select a provider — no need to install them manually. Configure your provider and API key in Settings > AI.
To pre-install a provider (e.g. for offline setup), use the optional extras:
uv sync --extra claude # or: openai, grok, gemini, mistral, groq, local, all-ai
# without uv: pip install ".[claude]"
| Format | Description |
|---|---|
| TXT | Plain text with timestamps and speaker labels |
| SRT | Subtitle format, compatible with video players |
| JSON | Structured data with all segment metadata |
All exports include speaker names if assigned.
Access via the gear icon or Edit > Settings:
| Setting | Options | Default |
|---|---|---|
| Whisper Model | tiny, base, small, medium, large-v3, large-v3-turbo | small |
| Compute Device | CPU, CUDA (NVIDIA GPU) | CPU |
| Language | Auto-detect, or specify (en, es, etc.) | Auto-detect |
| Sample Rate | 16000, 22050, 44100, 48000 Hz | 16000 |
| Output Format | WAV, MP3 (requires FFmpeg) | WAV |
| Capture Mode | Per-app (Win11) or System Audio | Auto-detected |
| Diarization | Enabled/Disabled, min/max speakers | Disabled |
| AI Provider | None, Claude, OpenAI, Grok, Gemini, Mistral, Groq, Local | None |
| AI Model | Provider-specific model list | Varies |
| Min Recording Length | Discard recordings shorter than N seconds | 5s |
| Auto-Record | Start recording when selected app joins a call | Off |
| Hidden Devices | Filter out unwanted audio devices by keyword | None |
TalkTrack/
main.py # Entry point, logging, crash handling
start.bat # Launcher (uv-first, .venv isolation, pip fallback)
start_debug.bat # Debug launcher with console output
requirements.txt # Dependencies
resources/
style.qss # Dark theme stylesheet
talktrack.ico # App icon (multi-size)
arrow_up.png, arrow_down.png # QSpinBox arrow icons
build_ico.py # Rebuild .ico from source PNGs
TT_icon_*.png # Icon source files (32-512px)
TT_logo_*.png # Logo files for branding
app/
main_window.py # Main window + orchestration
audio/
segment_player.py # Audio clip playback
recording/
audio_capture.py # WASAPI capture (system + per-app)
process_audio_capture.py # Win11 per-process capture
recorder.py # Recording state machine
transcription/
transcriber.py # Faster Whisper integration
diarizer.py # Speaker diarization (pyannote)
ai/ # AI provider integrations (6 providers)
ui/ # All UI components
utils/ # Config, device enumeration, helpers
tests/ # Unit tests
recordings/ # Output directory
python -m pytest tests/ -v
| Component | Library |
|---|---|
| GUI | PyQt6 |
| Audio Capture | sounddevice, WASAPI, comtypes |
| Transcription | faster-whisper |
| Speaker Diarization | pyannote.audio 4.0 |
| AI Providers | anthropic, openai, google-generativeai, mistralai, groq (on-demand) |
| Deep Learning | PyTorch |
| Audio Processing | scipy, pydub, soundfile, numpy |
| Windows Integration | pywin32, pycaw, comtypes |
MIT — see LICENSE.
Python
99.5%