A small all-client-side web app that scans a public openpilot route for fingerprint debugging evidence.
It fetches comma's public route file list, downloads qlogs first when available,
falls back to rlogs, supports .zst and .bz2, decompresses in the browser, and
decodes just enough Cap'n Proto to summarize:
CarParams, including the selectedcarFingerprint, fingerprint source, mode flags, redacted VIN, andcarFw- firmware versions as Python
bytesliterals andFW_VERSIONS-style snippets for opendbc/openpilot firmware files - startup and recognition events such as
carUnrecognizedanddashcamMode - compact CAN evidence grouped by bus/source, address, message length, count, and first/last segment
The report shows debugging options separately for stock openpilot and SunnyPilot's SunnyLink/car selector path. When a route does not fingerprint, it also mentions hardcoded-fp as non-prescriptive fork context. Firmware evidence is copy-pastable for human debugging.
npm install
npm run devOpen the local URL printed by Vite.
Use these settings:
- Build command:
npm run build - Build output directory:
dist - Node version: current LTS or newer
No server-side function is required.
This repo includes a GitHub Actions workflow at .github/workflows/pages.yml.
Pushes to main build the app and deploy dist to GitHub Pages.
For the ophwug/op-fingerprint-reading-tool project page, the app is built
with the Vite base path /op-fingerprint-reading-tool/, so the expected URL is:
https://ophwug.github.io/op-fingerprint-reading-tool/
- Open comma Connect and select the drive.
- Open More info and turn on Public access.
- Copy either the browser URL or the route name.
- If you are submitting a pull request, set the route to Preserved in comma Connect so reviewers can access it later.
Accepted inputs look like:
5beb9b58bd12b691|0000010a--a51155e496
https://connect.comma.ai/5beb9b58bd12b691/0000010a--a51155e496/90/105
You can turn Public access off again after reading the route.
The app runs in the browser and does not store route data. VIN is redacted in the visible report by default. Firmware bytes are intentionally public in the debugging report because they are core fingerprint evidence.
npm test
npm run test:smoke
npm run buildtest:smoke uses the public demo route from op-replay-clipper, so it needs
network access.