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