TRAMES 1.0.0 — ALPR-avoiding navigation
Navigation that routes around automated licence-plate readers.
TRAMES takes an ordinary navigation request — an address, a route — and adds one
constraint: prefer paths that no ALPR camera can actually see. Cameras are modelled as
directional wedges, not circles. A reader watching northbound traffic says nothing
about the southbound carriageway, and treating it as a circle makes the router detour
around roads nobody is being read on.
Install
TRAMES-1.0.0-arm64-v8a.apk — 209 MB, Android 7.0+, arm64-v8a only
Verify before installing:
sha256 c586dce9b5dfe566419187cb0833856badb8bb8b0848826a06c038e389d1c0cc
Package org.soulstone.trames — installs alongside OsmAnd rather than replacing it.
⚠️ Read this before you trust the build
This APK is signed with the public Android debug key (CN=Android Debug, the
well-known keystores/debug.keystore, password android).
That key is not secret. Anyone can build a modified APK signed with the identical key,
and Android will accept it as an update to this app. The signature proves nothing about
who built it.
For a tool whose users are specifically trying to avoid being tracked, that is a real
weakness and not a formality. Until a proper release key exists:
- Verify the SHA-256 above against a build you make yourself, or
- Build from source:
./setup-resources.sh && cd client && ./trames-build.sh
A properly signed release is the obvious next step and is not done yet.
What works
- Address search and turn-by-turn navigation (inherited from OsmAnd)
- ALPR-avoiding route calculation against the public backend
- Camera map layer, rendered through the GL renderer so markers hold position in 3D
- Berth selector for avoidance strength
- Route exposure readout — how many cameras a given route crosses
Routing is served by https://routing.blackflagintel.com, which is live and has the
camera geometry loaded. v1 is online-only; offline ALPR avoidance is planned for v2.
Known limitations
- The berth slider does not behave consistently between regions. Its usable range is
roughly 0.3 → 0.01 and the dead zone is density-dependent: a setting that does nothing
in a sparse area avoids most cameras in a dense one. A density-adaptive mapping is an
open problem, documented in §7.4 of the paper. - arm64-v8a only. No armeabi-v7a or x86_64 build in this release.
- Camera data is crowdsourced and incomplete in ways that are not random. Absence of
a camera on the map is not evidence of absence on the pole. - The app carries OsmAnd's artwork, which is CC-BY-NC-ND 4.0 and cannot be modified in a
derivative. Replacing it is outstanding work.
The study
The routing behaviour is backed by a measurement study included in this repository:
17,580 real home–work commutes drawn from Census LEHD LODES across 15 states, each routed
twice against 120,838 mapped camera installations.
- 74.8% of American commutes pass at least one licence-plate reader
- 84.6% can be routed to zero exposure, for a median of 1.50 minutes (5.96% overhead)
- Avoidance is cheapest where cameras are densest — grids offer a parallel street, rural
routes often do not - Demographic gradients that look robust nationally do not survive ranking tracts within
their own county; mapped camera density varies 3.9× per capita across the states studied
Paper: research/paper/trames.pdf
Two results in it qualify the headline, and are stated there rather than buried: the
avoidance figure degrades to 56.5% if real camera fields of view are 50% wider than the
60 m assumed (§7.3), and the equity findings cannot be separated from variation in who
maps cameras (§5.5, §7.2).
Licensing
client/ derives from OsmAnd and is GPLv3.
Camera data is from OpenStreetMap (ODbL) via Overpass, the corpus surfaced by
DeFlock.