factcircuit
FactCircuit는 불변 출처와 단계별 검증, 제한된 검색, 재현 가능한 평가를 제공하는 감사 가능한 주장·증거 검증 루프입니다
라즈베리파이와 레이더 센서를 이용해 로컬 속도 모니터링을 구현하고, PDF로 시청에 제출할 수 있는 오픈소스 소프트웨어입니다
Open-source software that turns a Raspberry Pi and a radar sensor into a local speed monitor. Aim it at your street, then take a PDF to City Hall instead of a hunch. Radar today. LiDAR research previe
데이터Go · SwiftGitHub @banshee-data온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
citizen radar for slow streets 🛜 tracking velocity, not identity
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Measure velocity, not identity
velocity.report measures what traffic does on a street, so the people who live there can make their case with evidence rather than being asked to bring louder anecdotes. Radar and LiDAR measure speed and movement: no cameras, no licence plates, and no person is identified, tracked, or recorded. The data belongs to the community that collected it.
░░░░░░ ░░░░░░
░░░░░ ░░░░░░░░░░░ ░░░░░ :::. ░░░░░░░░░░ ░░░░░░░░░░░ ░░░░░ :::.
░▒▒▒▒▒░░░░▒▒▒▒▒▒▒▒▒▒▒░░░░▒▒▒▒▒ .:. ▒▒▒▒▒▒▒▒▒▒░░░░▒▒▒▒▒▒▒▒▒▒▒░░░░▒▒▒▒▒ .:.
░░▒▓▓▓▓▓▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒ .::.::: : ▓▓▓▓▓▓▓▓▓▓▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒ .::.:.: :
▒▒▓. . ▓▓▓▓████ ... . ▓▓▓▓ :....:::::. ▓▓▓. . ▓▓▓▓████ ... . ▓▓▓▓ :.::..::::
▓▓█ ..::████████ :.::: ████ :: : : . ::▓▓▓ ..::████████ :.::: ████ :: :: : ::
:.: : ::████:.:: : ::: ████ .: : . ... :.: ::::████:.:: : ::: ████ .::: .:::.
.:: . . ::.: . . . .:: . . ::.: :::: . .
. . .
▄▀▀▀▀▀▀▄
▄▄█▄▄▄ ▄▄▌
▌▐▀▀▀█ ▌
▀▀▀▀▀▀█████▀▀▀▀▀▀▀▀▀█▀▀█▀▐▀ ▄▄▀▀█▀▀▀▀▀▀▀█▀▀██▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
▄▄▄▀▀▀░░ ░ ░ ░▒▓▄▄▀ ▄▄▀▀ ▄▓▀▀▀ ░▐▌ ▀▀▄▄▀▀▄▄▓▒ ▒ ░ ░ ░ ░ ░ ░
░ ░░ ░ ░ ▒ ▄▄▀▀▄▄▀▀▄▄▄▄▓░ ░▄ ░█ ▀▀▄▄▀▀▄▄ ▒ ░ ░ ░ ░ ░ ░
░ ░ ▒▄▄▀▀▄▄▀▀ ▀▄▀█░ ▄▄▀█▀░░ ░█ ▀▀▄▄▀▀▄▄ ▒ ░ ░ ░
░░ ▒▄▄▀▀▄▄▀▀ █▀▀▓▀▀▌ ▐▌░ ░░▒▌ ▀▀▄▄▀▀▄▄ ░ ░ ░ ░ ░
▄▄▀▀▄▄▀▀ ▓ ▓ ▌ █▀▀▀▀▀▀█ ▀▀▄▄▀▀▄▄ ▒░ ▒
▄▄▀▀ ▓▀▀▓▀▀▌ ▐▌░ ░ ▐▌ ▀▀▄▄▀▀▄▄ ░ ▒
▓__▓__▌ █░ █▄░ ▐▌ ▀▀▄▄▀▀▄▄ ░
▓ ▓ ▌ █░ ▐▌ █░ █ ▀▀▄▄▀▀▄▄
▄▄▄ ▄▄▄▄▄▄ ▄▄▄▄ ▓ ▓ ▌▒▒▒▒▒ ▒▒▒▒ ▄▄▄▄▄ ▄▄▄▄ ▄▄▄▄▄ ▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄
█▀ ▄█████▀ ▄████▀ ▄████ ████ ████ ██████ ▀███▄ ▀████▄ ▀████▄ ▀██████▄
▄█████▀ ▄████▀ ▄████▀ ▄████ █████ ██████ ▀███▄ ▀████▄ █████▄ ▀██████
█████▀ ▄█████ ▄████▀ █████ █████ ██████ ████▄ █████ ▀█████▄ ▀████
████▀ ▄█████ ▄█████ ████▀ ▀████▄ ██████ ████▄ ▀████▄ ▀█████ ▀██
██▀ ▄█████▀ ▄█████ ▄████ █████ ██████ ▀████▄ ▀█████ ▀█████▄ ▀
▀ ▄█████▀ ▄█████▀ █████ ██████ ██████ ▀████▄ █████▄ ▀█████▄
░██ ░██ ░██ ░██
░██ ░██ ░██
░██ ░██ ░██ ░██████ ░██░████ ░████████ ░██░████████ ░████████ ░██
░██ ░████ ░██ ░██ ░███ ░██ ░██ ░██░██ ░██ ░██ ░██ ░██
░██░██ ░██░██ ░███████ ░██ ░██ ░██ ░██░██ ░██ ░██ ░██ ░██
░████ ░████ ░██ ░██ ░██ ░██ ░██ ░██░██ ░██ ░██ ░███
░███ ░███ ░█████░██ ░██ ░██ ░██ ░██░██ ░██ ░█████░██ ░██
░██
░███████
This is alpha software. It works. It is tested. It is not yet hardened. No authentication, no access control: an exposed instance will serve its data to anyone who asks and the PDF endpoint will fill up a hard drive if someone keeps clicking "Generate Report". Deploy on a private network or a dedicated VLAN with its own storage budget (or better yet, dedicated hardware like a Raspberry Pi). Do not point it at the open internet and hope for the best: hope is not a security architecture. See BACKLOG.md for current priorities.
Communities trying to make their streets safer face a familiar problem: everyone has an opinion about how fast cars go, but nobody has evidence. Council meetings run on anecdote. Speed surveys cost thousands and arrive months late. Meanwhile, someone's child is still crossing that road while motorists zip by.
velocity.report exists to close the gap between feeling unsafe and proving it.
A radar measures vehicle speeds. The logged data stays on a local device in someone's house. The reports are professional enough for a planning committee.
Evidence over opinion. Privacy over convenience. Community ownership over cloud dependency.
The system is built to measure traffic speed and protect vulnerable road users. That defines what we log, what we store, and what we report.
The software does not collect, store, or expose anything that identifies an individual or a specific vehicle. No licence plates. No faces. No make or model. Object classification tracks road user types: pedestrian, cyclist, car, bus. Not people. Not plates.
The measurement data stays on a local device. Reports are generated locally. Remote map and prior requests, such as OpenStreetMap tile downloads or Overpass lookups, are optional operator actions and must be explicit, disableable, and documented. They are not telemetry and must not send PII, vehicle data, or raw sensor captures. If personal data reaches a log, a response body, or an export, that is a bug, please report it.
See TENETS.md for the full set of non-negotiable principles.
Clarendon Avenue runs past an elementary school in San Francisco, designated a high injury road for years. Parents worried about vehicle speeds and whether the city's planned repaving would actually help.
When the city announced a quick-build to repave Clarendon, the Banshee team ran a baseline speed survey in June 2025 and sent the results to the city engineering team ahead of their October planning meeting. The city repaved in December 2025. A second survey in January 2026 showed what parents feared: speeds had climbed, not fallen. The repaving, funded to improve safety, had made the school run more dangerous.
The team presented the findings at a San Francisco City Hall street safety hearing in January 2026. The full PDF is available at banshee-data.com.
| Metric | Period 1 | Period 2 | Change |
|---|---|---|---|
| P50 speed | 30.54 mph | 33.02 mph | +8.1% |
| P85 speed | 36.94 mph | 38.70 mph | +4.8% |
| P98 speed | 43.05 mph | 44.21 mph | +2.7% |
| Max speed | 53.52 mph | 53.82 mph | +0.6% |
| Vehicle count | 3,460 | 2,455 |
| Component | What it does |
|---|---|
| Go server | Collects radar speed data and LiDAR point clouds, stores both in SQLite, serves the API -> cmd/, internal/ |
| PDF reports | Turns speed data into professional PDF reports with charts, statistics, and proper formatting. Go + Typst -> internal/report/ |
| Web frontend | Data visualisation and interactive charts for recorded speed data. Svelte + TypeScript -> web/ |
| macOS visualiser | Native 3D LiDAR point cloud viewer with object tracking, replay, debug overlays, and point-cloud annotation for building reference datasets. macOS/Metal -> tools/visualiser-macos/ |
Requires Go 1.26+, Node.js 20.19+, and pnpm 10+ for the web and Eleventy docs builds. See CONTRIBUTING.md for full prerequisites.
git clone [email protected]:banshee-data/velocity.report.git
cd velocity.report
make build-web
make build-radar-local
The build produces velocity-report-local. Start it without a connected sensor:
./velocity-report-local --disable-radar --listen :8080
The server creates a new SQLite database if one does not exist.
Open localhost:8080 to see the dashboard.
Use --db-path to point at an existing database elsewhere.
┌──────────────────┐ ┌──────────────────────────┐ ┌──────────────────┐
│ Sensors │────►│ velocity.report Server │◄───►│ SQLite Database │
│ (Radar / LiDAR) │ │ (Go) │ │ (sensor_data.db) │
└──────────────────┘ └──────────────────────────┘ └──────────────────┘
│ │
HTTP :80 │ │ gRPC :50051
│ │
┌──────────────┴─┐ │
│ │ │
▼ ▼ ▼
┌──────────────┐ ┌──────────────────┐ ┌─────────────────────┐
│ Web Frontend │ │ PDF reports │ │ VelocityVisualiser │
│ (Svelte) │ │ (Go + Typst) │ │ (macOS/Metal, gRPC) │
└──────────────┘ └──────────────────┘ └─────────────────────┘
The web frontend connects to the Go server over HTTP (port 80 on the Pi image, 8080 in local dev). The macOS visualiser uses gRPC (:50051) for streaming point cloud data. For the full architecture see ARCHITECTURE.md. Sensor fusion plans live in VISION.md.
Every contribution needs three commands:
make format # auto-fix all formatting (Go, Python, Web)
make lint # check formatting, code quality, and repo hygiene
make test # run all test suites
These are the core quality checks for local development and CI, but pull requests may also run additional repository or documentation checks.
Check out docs/plans and BACKLOG.md for any work that catches your eye.
See CONTRIBUTING.md for dev environment setup, coding standards, and pull request workflow. All make targets are documented in COMMANDS.md.
Use the decision-review workflow to prepare open project, schema, maths, and research questions, discuss them by voice, and carry confirmed decisions through technical review and downstream updates in a PR.
Codebase breakdown, hatched area denotes code not covered by tests
The Go server runs as a systemd service on Raspberry Pi. See public_html/src/guides/setup.md for the complete setup guide.
The LiDAR pipeline already runs a full perception stack: DBSCAN spatial clustering, Kalman-filtered multi-object tracking with state and covariance estimation, and rule-based classification across eight object types (car, truck, bus, pedestrian, cyclist, motorcyclist, bird, and general dynamic). Radar provides independent Doppler-accurate speed. Today, both run in parallel.
The October near-edge campaign report records the completed geometry, duration, timing, and diagnostic comparisons. It recommends retaining the production medoid tracker: the candidate breaches update cost at all 29 cases and geometry at nine, while physical accuracy and Pi performance remain unverified.
The next stage fuses them into a single scene: cross-sensor track handoff using Mahalanobis-distance gating, Bayesian evidence accumulation for persistent geometry, and canonical object refinement via streaming statistics. A lorry clipping a corner at 35 mph tells a different story to a bicycle at the same speed; radar captures the speed regardless, and fusion adds the geometry to tell the two apart. Geometry kept about the physical structure around the road is measured spatial data at a stated time, not a plan or survey: see geometry priors: data purpose.
The full plan is in docs/plans/lidar-l7-scene-plan.md and VISION.md.
Native Metal renderer for live and recorded LiDAR data, with 96% bandwidth reduction through background caching and foreground-only streaming. Requires macOS 15+ and a Mac with Metal support.
make dev-mac
Open the LiDAR Status page at localhost:8080/app/lidar/status to replay captured point cloud data (.pcap files). See tools/visualiser-macos/README.md for controls and camera navigation. Signed GitHub release DMGs use Developer ID Application signing and Apple notarisation; see the macOS signing guide for the local and CI release setup.
Join the Discord to discuss the project, get help, and help make streets safer.
Apache License 2.0. See LICENSE.
LiDAR evaluation windows are clips. The API uses
/api/lidar/clips and clip_id; ordered capture rows supply each clip’s paths.