Is there a train at Locust?
connecting
Loading...
Connecting to scanner feed
At the crossing? Help verify:
Detectors scan passing trains and broadcast on railroad radio. We listen for those broadcasts to estimate when a train will reach the trail.
Trail crossing
Railroad detector
  • Waiting for audio...
What is this?
A real-time status page for the Schuylkill River Trail crossings at Locust Street and Race Street on Schuylkill Banks. These at-grade crossings have automated gates that close when CSX freight trains pass through, blocking the trail.
How does it detect trains?
CSX has defect detectors along their tracks that scan passing trains for mechanical problems. When a train passes a detector, it broadcasts a voice announcement on railroad radio frequency 160.230 MHz — something like "CSX detector milepost 6.4, track one, no defects, total axle 404."

A volunteer streams this frequency online via Broadcastify. This app taps into that stream, uses AI speech recognition (Whisper) to transcribe the announcements, and parses out the milepost to estimate when the train will reach the trail crossings.
Where are the detectors?
The trail crossings are at roughly milepost BAK 0.3–0.5. Nearby detectors:

From the south:
Collingdale (MP 6.4) — ~6 mi away, ~14 min warning

From the north:
Laurel Hill (MP 3.1) — ~4 mi, ~10 min
Zoo (MP 2.3) — ~3 mi, ~7 min
Belmont (MP 1.1) — ~2 mi, ~5 min
Field (MP 0.1) — ~0.5 mi, ~1 min

Switch to the Map tab to see these locations.
How accurate is the ETA?
It's a rough estimate based on typical freight train speed through urban Philadelphia (~25 mph). Actual speed varies — trains may slow down, speed up, or stop. Treat the ETA as a general heads-up, not a precise countdown.
What does the gate mean?
The crossing gate visual shows the estimated state of the trail:

Gate up (Clear): No train activity detected recently. Go ahead!
Gate down + flashing lights (Train): Train detected and approaching or at the crossing.
Gate halfway + slow flash (Caution): Recent detection — train may still be in the area.
Gate up, dim lights (Unknown): System starting up or scanner feed disconnected.
Can it miss a train?
Yes. This is not a guarantee the crossing is open. It can miss trains if:

• The Broadcastify scanner feed goes offline
• The speech recognition doesn't catch the announcement
• A train enters between detector locations
• Radio interference or poor audio quality

Always look and listen at the crossing regardless of what this page says.
How can I help?
If you're at or near the crossing, tap Train here or All clear in the status card above. Your report helps validate the automated detection and gives other users more confidence in the current status.

Reports are anonymous, rate-limited to one per 10 minutes, and expire after 20 minutes. They show up in the Log tab alongside scanner transcriptions.
What's in the Log tab?
A combined feed of everything happening: scanner audio transcriptions (dispatcher calls, crew chatter, detector announcements) and user reports from the crowd buttons. Items highlighted in red are detector matches or train reports, and green items are user-confirmed all-clear reports. Scroll down to load older entries.
How is this built?
The app listens to a live railroad scanner stream via Broadcastify, decodes audio with FFmpeg, filters for speech using WebRTC VAD, transcribes with faster-whisper, then parses for defect detector announcements. Runs on a small cloud server.

Source on GitHub