A real-time mapping system for radio calls.
Ingests calls from SDRTrunk, TrunkRecorder, or any rdio-scanner compatible endpoint, then:
- Transcribes audio (local or cloud AI)
- Extracts and geocodes locations
- Displays calls on an interactive map with playback and Discord integration
- Admin-restricted marker editing โ Map marker editing now locked behind admin user when authentication is enabled
- Purge calls from map โ New admin-only feature to remove calls by talkgroup category and time range, includes undo button to restore accidentally purged calls
- Full one-command integration (no multiple terminals)
- Auto-generated API keys & admin users
- Improved AI summaries & Ask AI features
- New S3 audio storage option
- OpenAI transcription prompting โ configure custom prompts in
.envto fineโtune transcription behavior - Two-tone detection โ powered by icad-tone-detection.
- Detects fire/EMS tones in radio calls
- Optionally restrict address extraction to toned calls only, or combine tone + address detection for greater accuracy
- ICAD Transcribe integration โ thanks to TheGreatCodeholio/icad_transcribe for providing advanced radio-optimized transcription support
- One-command startup:
node bot.js - Automatic setup: database, API keys, talkgroups, admin accounts
- Integrated services: Discord bot + webserver run together
- Real-time calls displayed on a Leaflet map
- Marker clustering, heatmaps, day/night/satellite views
- Call details with transcript + audio playback
- Call filtering and marker editing (admin-restricted when auth enabled)
- Call purging: Admin-only bulk removal with undo functionality
- Local:
faster-whisper(CPU or NVIDIA GPU) - Remote: via speaches or custom servers
- OpenAI Whisper API with support for custom prompts
- ICAD Transcribe for radio-optimized results
- Address extraction + geocoding (Google Maps or LocationIQ)
- AI summaries of recent transmissions
- "Ask AI" chat about call history
- Optional twoโtone detection for toned call filtering
- Auto-post transcriptions by talkgroup
- Keyword alerts
- AI summaries with refresh buttons
- Optional: live audio in voice channels
- Optional user authentication
- Auto-generated API keys
- Secure session management
- Admin-only controls for sensitive operations
Supports Windows 10/11 and Debian/Ubuntu Linux.
Installation scripts handle dependencies, configuration, and setup.
- SDRTrunk, TrunkRecorder, or rdio-scanner configured
- Talkgroup export from RadioReference (Premium subscription recommended)
- API key for Google Maps or LocationIQ
- (Optional) NVIDIA GPU for local transcription
- (Optional) Discord Bot application
- (Optional) Remote transcription server (e.g., speaches or ICAD)
# Linux
sudo bash linux_install_scanner_map.sh
# Windows (PowerShell as Admin)
.\install_scanner_map.ps1Then:
cd scanner-map
source .venv/bin/activate # Linux
node bot.jsAll main settings are in .env. Key options:
DISCORD_TOKENโ your bot tokenMaps_API_KEY/LOCATIONIQ_API_KEYโ geocoding providerMAPPED_TALK_GROUPSโ talkgroups to monitorTRANSCRIPTION_MODEโlocal,remote,openai, oricadSTORAGE_MODEโlocalors3OPENAI_PROMPTโ (if using OpenAI) provide a custom transcription promptENABLE_TONE_DETECTIONโ enable/disable twoโtone detection
Other files to edit:
public/config.jsโ map defaults (center, zoom, icons, etc.)data/apikeys.jsonโ auto-generated on first run
- SDRTrunk: Configure Streaming โ Rdio Scanner endpoint
- TrunkRecorder: Add an
uploadServerentry pointing tohttp://<server>:<port>/api/call-upload - rdio-scanner downstream: Add server + API key
- OS: Windows 10/11 or Debian/Ubuntu
- CPU: Modern multi-core
- RAM: 16GB+ recommended
- GPU: (Optional) NVIDIA CUDA (8GB+ VRAM recommended)
- Storage: SSD (5โ10GB for models + audio)
- Logs:
combined.loganderror.log - Check
.envvalues (especially API keys and modes) - Verify dependencies: Node, Python, FFmpeg, CUDA (if using GPU)
- Ensure correct geocoding.js (Google vs LocationIQ)
Pull requests and issue reports are welcome.
- Open a GitHub Issue
- Contact poisonednumber on Discord