01 / Inputs

Load the matching activity files

Private VM storage · browser-side analysis

Analysis archive

Uploads are explicit. The selected MP4 remains local for playback; its retained copy is stored separately.

Source files stay local until you sign in and choose an upload action.

Sign in to view retained analysis runs.
Load local files to inspect source coverage and telemetry.

Elevation comparison

Ascent by source

Paired comparison: load both activities to assess shared coverage.

Garmin TCX

Raw-sample ascent
—
1-second median ascent
—

Source not loaded.

RaceBox CSV

Raw-sample ascent
—
1-second median ascent
—

Source not loaded.

Paired difference requires both sources and independently verified timing.

Each source's ascent uses its own recorded coverage; the totals are not a synchronized comparison when their windows differ. The difference below uses only the verified shared interval, not the standalone totals above. Raw-sample ascent sums positive changes when distance advances (or is unavailable); filtered ascent uses median altitude in each 1-second bin. RaceBox distance is integrated from speed. Gaps over 2.5 seconds are omitted. The RaceBox − Garmin difference is withheld until independent timing residuals pass this POC's ≤100 ms gate. Neither grade estimate is ground truth; RaceBox altitude datum and absolute accuracy are unverified.

04 / Terrain mesh

LiDAR terrain and recorded position

Deferred to save resources
data/fusion/racebox-lap-1-lidar-terrain-trail-200mm.stl 38,544,084 bytes · SHA-256 25a38a63b89aa2e4f79c0767164b07e715850f847c73066eabeb228f9a3f5ff6 EPSG:3071 local easting/northing on X/Y, centered at the footprint origin; Z is up from the 0 in base plane · inches · 7.87 × 7.87 in footprint · 3× terrain relief · 0.12 in base · 0.04 in raised trail
No activity
Terrain is not loaded on startup to reduce memory and GPU use. Load it from the repository when needed.
No mesh loaded Measured bounds will appear after verification.

Load terrain to enable the verified Garmin terrain cursor.

02 / Video

Visual event selection

Waiting for video
Choose a local video file to begin. Repository video is not loaded automatically.

SYNC LOCKED · video telemetry is withheld until independent timing evidence passes the 100 ms gate and remains limited to the validated anchor span.

HUD telemetry channels

Toggle source-backed metrics for the HUD. Duplicate Ride HUD readings use dedicated widgets; gyroscope channels start unchecked.

Estimated max HR Enter age
Heart-rate bands: Z1 50–60%, Z2 60–70%, Z3 70–80%, Z4 80–90%, Z5 90–100% of max HR. Values below 50% count as Z1 and above 100% as Z5. Age-based estimates are approximate.
How to work with overlay data
  1. Load a video and telemetry from the same ride in 01 / Inputs. For another ride, add new video-to-Garmin anchors; do not reuse the current mapping unless the saved source identity matches. Video telemetry remains locked until the same event is paired independently in both timelines and residuals pass the 100 ms gate. A matcher candidate alone is not accepted.
  2. Use the checkboxes above to select available HUD channels and choose a layout below. The Ride HUD shows source-backed values, power-zone time using the default 250 W FTP, heart-rate-zone time using the age-based max-HR estimate (220 − age by default or Tanaka), and the upcoming Garmin elevation profile. Enter an age above before heart-rate zones can be calculated. When selected and synchronized, the HUD also shows lean angle, color-zoned integer Garmin and RaceBox grades side by side, gear, cadence, satellite, breathing-rate, and heart-rate widgets. Display units are switched globally above. Gyroscope channels start unchecked. The comparison in 01 / Inputs compares raw and 1-second median ascent over the shared timestamp interval; gaps over 2.5 seconds are omitted. The Garmin and RaceBox grade comparison in 03 / Garmin timeline uses centered 10-second windows, but both grade and ascent results stay hidden until independent Garmin↔RaceBox timing evidence passes 100 ms. Neither device grade is treated as ground truth. RaceBox grade uses 1-second median altitude and distance integrated from speed. Both source pairings are provisional until independently verified. The separate Grade over time widget then plots each source's actual grade percentage—not their difference—over the preceding 60 seconds of verified coverage. The metric rows below show each metric's name, value, unit, and chart of observed samples without interpolation.
  3. To add a field in code, parse it and document its evidence in web/src/telemetry.js, map its label and color in web/src/main.js, and add specialized visuals in web/src/hud-chart.js only when needed. Update tools/hud-server-render.js if it should also appear in the offline FFmpeg render, then add parser tests. Keep inferred units and unverified semantics explicit.

Power-zone time, selected source-backed values, ride totals, and upcoming terrain.

The worker draws charts locally; video decode and HUD text stay in the browser.

Load the mapped 10-minute excerpt to enable the 5-second renderer comparison.
59.94 fps source frame step
0:00.000

03 / Garmin timeline

Activity position and metrics

Waiting for TCX
No activity
Garmin RaceBox Current position
RaceBox CSV cross-check Speed and Lap unavailable Waiting for timestamped RaceBox data

SYNC NOT VERIFIED · UTC/GPS proximity is diagnostic only; paired RaceBox values require independent residuals ≤100 ms and are limited to verified coverage.

SYNC LOCKED · Pair the same visible event independently in video and Garmin; one anchor cannot verify timing.

    Grade comparison

    Garmin vs RaceBox

    Independent estimates · neither source is ground truth

    Garmin Grade —
    RaceBox Grade —
    RaceBox − Garmin —

    Grade comparison is locked until Garmin↔RaceBox synchronization is independently verified to ≤100 ms for the displayed interval.

    Actual grade (%)

    Grade over time

    Previous 60 seconds · current cursor at 0 s

    Garmin Grade RaceBox Grade Power (W)

    Grade uses the left percentage axis; power is red on the right watt axis.

    Metric display objects

    One row per metric

    Name · value · unit · 60 s source-sample chart.

    POC boundaries

    Open validation gates