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.
Metadata
Release files for VoiceRecon 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| voicerecon-0.1.2.tar.gz | 37.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| voicerecon-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 75.4 kB
Release files / voicerecon-0.1.2.tar.gz
| Download URL | voicerecon-0.1.2.tar.gz |
|---|---|
| Size | 37.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fb7ac8c7d2b150584c40f879080c3cb0a20aac5c4c05ed973f027dd42ed0f9b6
|
|
BLAKE2b-256 checksum How to use checksums |
b22d956d789dd159f3915b47b7e6a21f324989d68d70ac6cd27e65c2c7ffb3e1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 15, 2026.
Transparency logRelease files / voicerecon-0.1.2-py3-none-any.whl
| Download URL | voicerecon-0.1.2-py3-none-any.whl |
|---|---|
| Size | 37.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c2ce251791fe90fd3f98a776d118695aba60a1904b02f605ac27ae877b055886
|
|
BLAKE2b-256 checksum How to use checksums |
d6382d1a5bf55bdd300229db2cac4e052c027128ee4bb6329d72f704fdb5765b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 15, 2026.
Transparency log