ScannerPacific logo

🎓 Farewell, Berkeley! 🌟

As of December 15, 2023, my Berkeley journey has come to an end. After graduating from UC Berkeley, I’ve moved back to Los Angeles. Thank you for the support—Berkeley will always have a special place in my heart.

Want to keep up with my work? Follow my LA account, @ScannerPacific on X (Twitter).

📚 Explore the Berkeley Collection

Records, photos, transcripts, videos, and more from the archive.

📰 Raw OIS Footage

Berkeley PD Fatal Officer Involved Shooting — September 21, 2023

Details are in this YouTube video.

Berkeley PD Fatal Officer Involved Shooting — November 6, 2023

Details are in this YouTube video.

Oakland PD OIS — Armed Carjacking Suspect — February 17, 2023

Details are in this YouTube video.

Hayward PD Fatal Officer Involved Shooting — September 6, 2023

Details are in this YouTube video.

🔧 System Technical Insights

The @ScanBerkeley radio + transcription stack combined four open-source tools with lightweight hardware.

  1. Trunk-Recorder: Recorded each individual transmission on Berkeley talkgroups.
  2. Rdio-Scanner: Played transmissions live and let listeners customize channels.
  3. Trunk-Transcribe: Pushed recorded audio through OpenAI Whisper, producing text.
  4. crimeisdown-v3 (heavily modified): Displayed transcriptions on a site with historical review.

Each transmission was saved as its own file—so listeners could click exactly what they wanted to hear.

Hardware Components

  1. SDRs: Three Nooelec RTL-SDR v5 bundles (link) for RF capture.
  2. Raspberry Pi 4: Ran Trunk-Recorder and Rdio-Scanner (link).

A stronger desktop is recommended for very heavy voice activity. The stack ran behind an NGINX proxy for API + site hosting.

Hosted Frequencies

DEC HEX Mode Alpha Tag Description Tag Group Priority
2105839DBerkeley FD1Fire Dispatch 1Fire DispatchBerkeley1
210683aDBerkeley FD2Fire Dispatch 2Fire DispatchBerkeley1
2112840DBerkeley FD EmerFire EmergencyEmergency OpsBerkeley1
2671a6fDACFD Command 11Command 11 - BerkeleyFire-TacAlameda County Fire1
2672a70DACFD Command 12Command 12 - BerkeleyFire-TacAlameda County Fire1
2691a83DACFD Tac 31Tac 31 - BerkeleyFire-TacAlameda County Fire1
2692a84DACFD Tac 32Tac 32 - BerkeleyFire-TacAlameda County Fire1
2711a97DACFD Tac 51Tac 51 - BerkeleyFire-TacAlameda County Fire1
2712a98DACFD Tac 52Tac 52 - BerkeleyFire-TacAlameda County Fire1
3105c21TBerkeley PD1Police DispatchLaw DispatchBerkeley1
3106c22TBerkeley PD2Police Ch 2Law TacBerkeley1
3108c24TBerkeley PD4Police Ch 4Law TacBerkeley1
3110c26TBerkeley PD6Police Investigations 1Law TacBerkeley1
3605e15TUCB PD1 DSPPolice DispatchLaw DispatchUC Berkeley1
3606e16DUCB PD2Police Ch 2Law TacUC Berkeley1
3608e18DUCB PD4 ENFPolice EnforcementLaw TacUC Berkeley1
3609e19DUCB PD5POLICE TACLaw TacUC Berkeley1

Note: BPD3 (RB1), BPD5, BPD7, and UCPD6 were not available due to encryption.

Transcribe System Overview

The transcription + historical site ran on a DigitalOcean droplet (Docker), ~$35/mo. Audio was stored on AWS S3 (~$2/mo). Whisper transcription cost ~$50+/mo (can be run locally with a GPU).

Real-time alerts to phone + Slack triggered on matched phrases—super handy for quickly tuning to priority incidents.

System notification example

All configuration files (with keys redacted) and the customized transcription site are public here:

Software Configuration Files (GitHub)