Releases: EvanBoyar/talk-spotter
Release list
Talk Spotter 2.1.0-rc1 (experimental)
Release candidate built from the experimental-refactor branch. Not merged to main yet.
Highlights
- RTL-SDR DSP rebuilt (
lib/dsp.py): polyphase decimation (~2x less CPU at 960 kS/s — matters on Raspberry Pi), proper instant-attack/slow-release AGC for SSB/AM replacing per-chunk peak normalization, fixed deviation-referenced scaling for FM, anti-alias filtering on the AM/FM paths, stateful DC blocking, and a comfort-noise dither that measurably improves Vosk recognition. - Validated end-to-end against Vosk (real speech, modulated and demodulated, strong and weak signals): recognition ≥ 2.0.2 in all six scenarios; weak AM 5% → 79%, weak FM 88% → 94% F1.
- Thread-safety fixes: command parser locking (no more double-post risk), network posting moved off the audio thread, sources join worker threads before closing devices (fixes potential crash on exit).
- Dead code removed, POTA/SOTA posting deduplicated, 60+ new tests, new
tools/validate_demod_e2e.pyregression gate.
The .deb below is built by CI from this tag.
v2.0.2
What's New
- CI test gate: Release workflow now runs all unit tests before building .deb packages
--versionflag:python talk_spotter.py --versionprints the current version- Central version constant:
lib/version.pyis the single source of truth; SOTA User-Agent now stays in sync - SOTA spotter tests: 18 new unit tests covering OAuth token storage/refresh and spot posting
- Updated CLAUDE.md: Reflects the
lib/,sources/,spotters/,tests/layout from 2.0.1
v2.0.1
Codebase Reorganization
Reorganized the project into a clean package structure:
lib/— core library modules (command_parser,grammar,transcription)spotters/— network posting clients (dx_cluster,pota_spotter,sota_spotter)tests/— all unit testssources/— audio source classes (unchanged)
Other changes
- Removed obsolete standalone scripts (
kiwi_stream.py,rtl_stream.py), superseded bysources/ - Updated debian packaging for new directory layout
No functional changes — all 148 tests pass.
v2.0.0
What's New
- Add transceiver audio source with Hamlib CAT control via rigctld
- Add KiwiSDR auto-reconnect with exponential backoff (
max_retries,retry_delayconfig options) - Add unit tests for grammar, DX cluster, POTA spotter, and transceiver modules
- Fix duplicate words in Vosk grammar vocabulary
- Remove unused imports and deleted sound_card source
v1.1.3
What's new
- Local config overrides: Create
config.local.yamlto override any settings without modifying the trackedconfig.yaml. Deep-merged at startup, gitignored by default. - Default KiwiSDR host changed to
ssi.proxy.kiwisdr.comso the developer's personal server isn't the out-of-box default.
v1.1.2
What's Changed
- Unit tests: 81 tests covering command parser happy paths, unhappy paths, edge cases, timeouts, and frequency parsing
- Vosk finalization fix: Force-flush Vosk when partial text is stable for 2 seconds — fixes grammar-constrained mode where Vosk recognizes words but never commits them as final results, which was causing "cancel" and other commands to be ignored
- Memory fixes:
raw_textno longer grows unboundedly in idle state; audio buffer switched tobytearrayfor in-place operations - Callsign slashes: "slash" and "stroke" now produce
/in callsigns (e.g., VP2E/W1AW, W1AW/VP2/P) - Removed keyword highlighting: Redundant feature from early development, now that the command parser handles all voice command recognition
v1.1.0
Voice command parser rewrite
The command parser has been significantly improved. The biggest user-facing change is that fields can now be spoken in any order — "frequency ... call ... end" works just as well as the original "call ... frequency ... end".
New features
- Any field order: callsign and frequency (and optional network) can be spoken in any sequence after the wake phrase
- "callsign" / "call sign": accepted as alternatives to "call"
- "cancel": say this at any point after the wake phrase to abort the command and return to idle without posting anything
- Compound number words: "twenty eight decimal five" now correctly parses as 28.5 MHz; previously tens+units combinations like "twenty eight" were misread as "208"
- Repeated keywords override: saying "call" (or any field keyword) a second time discards the earlier attempt and uses only what follows the second occurrence
Timeout improvements
- Idle timeout (10s): auto-finalizes after ~10 seconds of silence following the last spoken words, rather than counting from the wake phrase
- Session timeout (60s): hard cap from wake phrase as a safety net
Bug fixes
- NATO phonetic X-ray ("x-ray") now detected correctly in callsigns — Vosk splits it into two tokens ("x" and "ray") which are now merged before lookup
v1.0.1
Talk Spotter is now considered stable and out of beta. This is a quick patch release fixing one specific issue discovered after 1.0.0.
Fix
NATO phonetic X-ray was never detected. Vosk transcribes "x-ray" as two separate tokens (x and ray) rather than the hyphenated form. The grammar constraint also couldn't include "x-ray" due to the hyphen being invalid in Vosk grammar tokens. As a result, any callsign containing the letter X was silently dropped.
The fix adds "x ray" as a recognized two-word phrase in the Vosk grammar and merges x + ray bigrams into xray before the NATO alphabet lookup in the parser.
v1.0.0
Out of beta! This is the real one!
What's new
- Grammar-constrained recognition: Vosk is now constrained to command vocabulary (NATO phonetics, number words, keywords) by default, significantly reducing false positives from background radio noise. Use
--no-grammarto disable. - Spotting always enabled: The
--spot-modeflag has been removed — spot posting is now on by default. Use--no-postto suppress posting for testing. - "complete" terminator: Added "complete" as an alternative to "end" for finishing a voice command.
- Voice command parsing fixes:
- Entire commands spoken in one breath now parse correctly (callsign no longer absorbs frequency words)
- Premature timeouts from partial results being fed to the command parser are fixed
- Frequency spoken in the same utterance as "end"/"complete" is now correctly captured
v0.2.0
What's New
- Add POTA spot posting support
- Add SOTA spot posting support with OAuth authentication
- Fix RTL-SDR freezing by separating read and process threads
- Add slow AGC to smooth audio level variations
- Add DC offset removal to FM demodulator
- Add second model path option to config
- Enhance error handling in SOTA authentication