# Attribution & licensing **istrain-public is licensed GPLv3** (see [`LICENSE`](LICENSE)). This choice follows the strongest dependency: the EOT decoder validates frames against **PyEOT**, which is GPLv3. ## Third-party code vendored here - **`scripts/eot/PyEOT/`** — [PyEOT by Eric Reuter](https://github.com/ereuter/PyEOT), the open-source End-of-Train / FFSK decoder (packet parser + BCH check) and its demo recording. **GPLv3**, its `LICENSE` kept intact in that directory. Our `scripts/eot/eot_scan.py` calls into it at runtime for frame-sync and validity checking; the two-pass adaptive front-end (drift-tolerant tone tracking + fuzzy sync) is our addition. ## The shoulders this stands on The tools and communities credited in the dashboard's **With Thanks** panel are the real foundation — RTL-SDR Blog and the osmocom rtl-sdr tools, RTLSDR-Airband, faster-whisper / OpenAI Whisper, FFmpeg, NumPy, Docker + Dockge, and the railfan frequency communities (RadioReference, Railroad-Frequencies.com, the regional railfan sites) that publish the channel plans that make any of this findable. See `dashboard/index.html` for the full list with links. ## Note for the person who forked this If you'd rather license your own build permissively (MIT/BSD), you can — **but not while PyEOT is vendored and imported.** Swap in your own FFSK frame parser + BCH check (the spec is public — 1200-baud FFSK, the SigidWiki EOTD page documents it), drop `scripts/eot/PyEOT/`, and the GPL obligation goes with it. Everything else here is original work.