VoiceRecon
Capture microphone + system audio, transcribe each utterance locally with Whisper, and optionally send each completed segment to an AI with a scenario preset (translate, interview help, lecture notes, and so on).
Sibling of ScreenRecon — same design philosophy (long-running desktop tool, local-first, Telegram delivery), applied to speech instead of screen regions.
Status: alpha. MVP is Windows-first; macOS works if you install BlackHole; Linux works via PulseAudio / PipeWire monitor sources.
What it does
Two modes, picked at launch:
- Transcript-only (default — no flag). Writes a plain-text transcript file under your save directory. Nothing goes to the cloud. Useful for recording meetings you want to search later.
- AI-per-segment (
--listen <preset>). Same transcript, plus each completed utterance is sent to Claude with a preset-specific system prompt; the response goes to Telegram.
Both modes segment audio when either:
- silence exceeds the configured threshold (
speech_silence_seconds, default 1.5 s), or - the other speaker starts talking (immediate cut).
Install
pip install voicerecon
Requires Python 3.10+. Depends on PyTorch (pulled in transitively by silero-vad), so expect a substantial install. First run also downloads the Whisper model into your Hugging Face cache; subsequent runs use it directly.
macOS extra step: BlackHole
macOS does not expose system audio to third-party apps. To capture the other party's voice in a meeting:
- Install BlackHole 2ch (free, ~30 s install).
- Open Audio MIDI Setup, create a Multi-Output Device that includes both your speakers and BlackHole, and set it as your system output. This lets you hear audio while also routing it to BlackHole.
- Run
voicerecon --show-devicesto confirmBlackHole 2chappears. - Run
voicerecon --configureand enterBlackHole 2chwhen asked for the loopback device.
Usage
# One-time setup
voicerecon --configure
# Transcript-only listening
voicerecon
# Listen and translate the other party's speech into Chinese
voicerecon --listen translate
# See what presets exist
voicerecon --presets
# See what audio devices are visible
voicerecon --show-devices
# Print current config (credentials masked)
voicerecon --show
Built-in AI presets
| Preset | Filter | Context | Purpose |
|---|---|---|---|
translate |
them | current | translate the other party's speech into Chinese |
interview_candidate |
them | current | analyze the interviewer's question, outline an answer |
interview_recruiter |
them | last 5 min | evaluate the candidate's answer, suggest a follow-up |
lecture |
them | last 5 min | extract the key concept from a lecture excerpt |
speaking |
me | current | give feedback on your own spoken sentence |
debate |
them | last 3 min | suggest counter-arguments |
sales |
them | current | identify customer need and suggest a talking point |
- Filter —
them(system audio only),me(mic only), orboth. Segments from ignored streams are dropped, not sent. - Context —
currentsends only the segment that just finished.window:<seconds>sends every segment within that many seconds behind it.
Config file
~/.config/voicerecon/config.json on Linux/macOS, %APPDATA%\voicerecon\config.json on Windows (technically $XDG_CONFIG_HOME/voicerecon/ if set).
{
"save_dir": "~/VoiceRecon",
"speech_silence_seconds": 1.5,
"whisper_model_size": "small",
"input_device": "",
"loopback_device": "",
"model": "claude-haiku-4-5",
"anthropic_api_key": "",
"telegram_bot_token": "",
"telegram_chat_id": ""
}
The three credential fields are only required when using --listen <preset>. Transcript-only mode works with them all empty.
Transcript file format
One file per session, named transcript-YYYYMMDD-HHMMSS.txt, one line per completed utterance:
[12:03:15] [them]: 我们下周的发布还是按原计划吗?
[12:03:22] [me]: 应该没问题,但要看 CI 是不是绿的。
Development
git clone https://github.com/kaizhengnz/VoiceRecon
cd VoiceRecon
pip install -e ".[dev]"
pytest
License
Apache 2.0.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file voicerecon-0.1.2.tar.gz.
File metadata
- Download URL: voicerecon-0.1.2.tar.gz
- Upload date:
- Size: 37.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fb7ac8c7d2b150584c40f879080c3cb0a20aac5c4c05ed973f027dd42ed0f9b6
|
|
| MD5 |
8972e778f8a5cb00e08cdc48795be73d
|
|
| BLAKE2b-256 |
b22d956d789dd159f3915b47b7e6a21f324989d68d70ac6cd27e65c2c7ffb3e1
|
Provenance
The following attestation bundles were made for voicerecon-0.1.2.tar.gz:
Publisher:
release_auto.yml on kaizhengnz/VoiceRecon
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
voicerecon-0.1.2.tar.gz -
Subject digest:
fb7ac8c7d2b150584c40f879080c3cb0a20aac5c4c05ed973f027dd42ed0f9b6 - Sigstore transparency entry: 2471804843
- Sigstore integration time:
-
Permalink:
kaizhengnz/VoiceRecon@90a8f2c35312d90dd846f45231c85e3d8ed3b821 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/kaizhengnz
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release_auto.yml@90a8f2c35312d90dd846f45231c85e3d8ed3b821 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file voicerecon-0.1.2-py3-none-any.whl.
File metadata
- Download URL: voicerecon-0.1.2-py3-none-any.whl
- Upload date:
- Size: 37.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c2ce251791fe90fd3f98a776d118695aba60a1904b02f605ac27ae877b055886
|
|
| MD5 |
c54f136ed8059a0792d6cb901a6bc4f7
|
|
| BLAKE2b-256 |
d6382d1a5bf55bdd300229db2cac4e052c027128ee4bb6329d72f704fdb5765b
|
Provenance
The following attestation bundles were made for voicerecon-0.1.2-py3-none-any.whl:
Publisher:
release_auto.yml on kaizhengnz/VoiceRecon
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
voicerecon-0.1.2-py3-none-any.whl -
Subject digest:
c2ce251791fe90fd3f98a776d118695aba60a1904b02f605ac27ae877b055886 - Sigstore transparency entry: 2471804962
- Sigstore integration time:
-
Permalink:
kaizhengnz/VoiceRecon@90a8f2c35312d90dd846f45231c85e3d8ed3b821 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/kaizhengnz
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release_auto.yml@90a8f2c35312d90dd846f45231c85e3d8ed3b821 -
Trigger Event:
workflow_dispatch
-
Statement type: