NodeLab is a standalone, single-file, in-browser tool for pairing ShotMarker targets with chronograph strings and running node-confidence analysis — fully locally.
No installs. No cloud. No accounts. Your data stays on your machine.
- Live (GitHub Pages): https://mrimp.github.io/NodeLab/
- Offline: download
NodeLab_LATEST.htmlfrom this repo and double-click (Chrome/Edge recommended).
- Offline hardening: runtime blocks accidental network calls (fetch/XHR/WebSocket) and logs attempts.
- Offline Self-Test panel: confirms no external URLs, network APIs are blocked, and storage is working.
- Portable mode: export/import a single bundle that includes session data plus NodeLab settings.
- Load ShotMarker file(s)
- Load chrono file(s)
- Step 3: Pair each target to exactly one chrono string
- Run Analysis
- Export JSON snapshot (filename includes ShotMarker name + timestamp)
- Imports ShotMarker targets and identifies scored shots (sighters excluded from scoring)
- Loads chronograph files and maps them to targets via Step 3 pairing
- Produces ranked results with a confidence badge that explains without dictating
- Exports a JSON snapshot:
NodeLab_<SessionOrShotMarkerName>_<YYYY-MM-DD>_<HHMM>.json
These are representative UI screens. If you fork/customize the UI, update these.
Some behaviors are browser + security-model specific (especially under file://).
See: docs/BROWSER_NOTES.md
Open Offline reliability → Run Offline Self-Test. It checks for external URLs, confirms network APIs are blocked, and verifies storage.
Use Offline reliability → Export portable bundle to export:
- Session data (targets, chrono strings, pairings, results)
- NodeLab settings stored in
localStorage
Import it later with Import portable bundle.
NodeLab runs entirely in your browser. All parsing and analysis runs locally.
When opening an issue, include:
- what file types you loaded (ShotMarker + chrono)
- the on-screen warning/error text
- a screenshot of Step 3 pairing + results
NodeLab exports analysis results as versioned JSON snapshots for use with companion tools (e.g., BarrelTracker).
The export contract is defined here: ➡️ docs/SNAPSHOT_SPEC.md
Semantic versioning, tagging flow, and a release checklist: ➡️ docs/RELEASE.md