A small all-client-side web app that scans a public openpilot route for invalid
liveCalibration messages.
Open the GitHub Pages app or view the repo at ophwug/op-calibration-reading-tool.
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 read calibration values. If it finds invalid
calibration, it reports that message plus the valid calibration seen immediately
before it when available. If no invalid calibration is found, it reports the
earliest valid calibration as an all-clear.
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-calibration-reading-tool project page, the app is built
with the Vite base path /op-calibration-reading-tool/, so the live URL is
https://ophwug.github.io/op-calibration-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.
- Paste it into the input at the top of the page, then choose Quick look or Full scan.
Accepted inputs look like:
5beb9b58bd12b691|0000010a--a51155e496
5beb9b58bd12b691/0000010a--a51155e496/1
https://connect.comma.ai/5beb9b58bd12b691/0000010a--a51155e496/90/105
A single trailing number selects that segment for Quick look. A trailing start/end pair from a clipped Connect URL is ignored. Full scan always scans the entire route.
You can turn Public access off again after reading the route.
Replacing an existing mount? Start by searching YouTube for dashcam mount removal instructions. A generic guide is usually sufficient; examples may inject isopropyl alcohol under the adhesive with a syringe, use a heat gun, use fishing line, etc.
After removal, completely clean the old adhesive from the windshield with alcohol pads and let the glass dry. Once the old mount is off, check whether you still have the spare mount that came with your comma device. If not, you can buy a replacement mount from comma. To reuse the existing mount instead, also remove its old adhesive, clean it with alcohol pads, and let it dry. Then cut a fresh sheet of 3M VHB adhesive to fit and apply it to the mount. For installation, find videos on properly mounting a comma device. The community-made mount installation templates repo can help position comma three, comma 3x, and comma four mounts before attaching one to the windshield. These templates are not official comma.ai templates.
Still having issues? When asking for help, share a photo taken from the back seat that shows the device, mount, and windshield together.
- Quick look: stop at the first valid calibration and show which device tolerance bucket was used, plus the pitch/yaw landing visualization. This is best for quickly checking where the mounted device calibration landed.
- Full scan: scan uploaded qlogs first, fall back to rlogs only when qlogs are unavailable, and check the route for invalid calibration. If invalid calibration appears, report the invalid message and the valid calibration immediately before it when available. This is best for debugging routes where calibration changed or went bad mid-drive.
As of the current openpilot master code checked on 2026-05-13, calibration is
considered valid after at least 5 valid calibration blocks and when pitch/yaw are
inside:
- tici / comma 3 and tizi / comma 3x: pitch
-5.20°to9.74°, yaw-3.96°to3.96° - mici / comma four: pitch
-8.20°to12.74°, yaw-3.96°to3.96°
The openpilot device settings text rounds the tici / comma 3 and tizi / comma
3x case to within 4° left/right and within 5° up or 9° down.
npm test
npm run test:smoke
npm run buildtest:smoke uses the public demo route from op-replay-clipper, so it needs
network access.