Skip to content

Repository files navigation

openpilot invalid calibration scanner

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.

Run locally

npm install
npm run dev

Open the local URL printed by Vite.

Deploy on Cloudflare Pages

Use these settings:

  • Build command: npm run build
  • Build output directory: dist
  • Node version: current LTS or newer

No server-side function is required.

Deploy on GitHub Pages

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/.

Getting a usable route

  1. Open comma Connect and select the drive.
  2. Open More info and turn on Public access.
  3. Copy either the browser URL or the route name.
  4. 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.

Related tools

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.

Scan modes

  • 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.

Current calibration tolerances

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° to 9.74°, yaw -3.96° to 3.96°
  • mici / comma four: pitch -8.20° to 12.74°, yaw -3.96° to 3.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.

Useful commands

npm test
npm run test:smoke
npm run build

test:smoke uses the public demo route from op-replay-clipper, so it needs network access.

About

Client-side openpilot route tool for quick calibration checks and invalid calibration scans

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages