<pclass="text-sm text-slate-600">Drag & drop your <kbd>.json</kbd> and <kbd>.mp4</kbd> files onto the window, or use the <kbd>Load JSON</kbd> / <kbd>Load Video</kbd> buttons.</p>
<h3>Load Files</h3>
<pclass="text-sm text-slate-600">Drag & drop your <kbd>.json</kbd> and <kbd>.mp4</kbd> files onto
the window, or use the <kbd>Load JSON</kbd> / <kbd>Load Video</kbd> buttons.</p>
</div>
<divclass="flow-arrow self-center">➔</div>
<divclass="flow-step flex-1">
<spanclass="text-3xl">2️⃣</span>
<h3class="mt-2">Play & Sync</h3>
<pclass="text-sm text-slate-600">Press <kbd>Play</kbd> (or <kbd>Spacebar</kbd>). The app automatically syncs the radar data to the video based on their timestamps.</p>
<h3>Play & Sync</h3>
<pclass="text-sm text-slate-600">Press <kbd>Play</kbd> (or <kbd>Spacebar</kbd>). The app
automatically syncs the radar data to the video based on their timestamps.</p>
</div>
<divclass="flow-arrow self-center">➔</div>
<divclass="flow-step flex-1">
<spanclass="text-3xl">3️⃣</span>
<h3class="mt-2">Explore & Analyze</h3>
<pclass="text-sm text-slate-600">Use the timeline, sidebar (<kbd>M</kbd>), zoom (<kbd>G</kbd>), and Data Explorer (<kbd>I</kbd>) to analyze the synchronized data.</p>
<h3>Explore & Analyze</h3>
<pclass="text-sm text-slate-600">Use the timeline, sidebar (<kbd>M</kbd>), zoom (<kbd>G</kbd>), and
Data Explorer (<kbd>I</kbd>) to analyze the synchronized data.</p>
- Timeline slider (Click, drag, or <kbd>Scroll Wheel</kbd> to seek)<br>
- Playback <kbd>Speed</kbd> slider
</p>
</div>
@ -267,7 +433,9 @@
<h3>File Loading & Caching</h3>
</div>
<pclass="text-sm text-slate-600 mt-2">
Load <kbd>.json</kbd> and <kbd>.mp4</kbd> files via <strong>Drag & Drop</strong> anywhere on the page or by using the <kbd>Load</kbd> buttons. Files are cached in `IndexedDB` for instant reloads.
Load <kbd>.json</kbd> and <kbd>.mp4</kbd> files via <strong>Drag & Drop</strong> anywhere on the
page or by using the <kbd>Load</kbd> buttons. Files are cached in `IndexedDB` for instant
reloads.
</p>
</div>
@ -278,7 +446,9 @@
<h3>High-Precision Sync</h3>
</div>
<pclass="text-sm text-slate-600 mt-2">
The app uses a `performance.now()` master clock to drive playback, correcting any video drift. The <strong>time offset</strong> is automatically calculated from filenames (e.g., `fHist_...` and `WIN_...`).
The app uses a `performance.now()` master clock to drive playback, correcting any video drift.
The <strong>time offset</strong> is automatically calculated from filenames (e.g., `fHist_...`
and `WIN_...`).
</p>
</div>
@ -289,7 +459,8 @@
<h3>Advanced Timeline Control</h3>
</div>
<pclass="text-sm text-slate-600 mt-2">
Click or drag the timeline to seek. You can also hover your <strong>mouse wheel</strong> over the slider to seek frame-by-frame (slow scroll) or scrub quickly (fast scroll).
Click or drag the timeline to seek. You can also hover your <strong>mouse wheel</strong> over
the slider to seek frame-by-frame (slow scroll) or scrub quickly (fast scroll).
(<kbd>D</kbd>), <strong>Predicted Pos</strong> (<kbd>P</kbd>), <strong>Covariance</strong>, and
<strong>Confirmed Tracks</strong>.
<br><strong>Color Modes:</strong> Switch between SNR (<kbd>1</kbd>), Cluster (<kbd>2</kbd>),
Inlier (<kbd>3</kbd>), or Stationary (<kbd>4</kbd>).
<br><strong>TTC Colors:</strong> Customize the Time-to-Collision (TTC) risk colors.
</p>
</div>
@ -313,7 +487,9 @@
<h3>"GOD MODE" Zoom (<kbd>G</kbd>)</h3>
</div>
<pclass="text-sm text-slate-600 mt-2">
Activates a separate, high-fidelity p5.js canvas that follows your mouse, showing a <strong>magnified view</strong>. Hover over points/tracks to see a detailed tooltip. Use the <strong>mouse wheel</strong> while in this mode to zoom in/out.
Activates a separate, high-fidelity p5.js canvas that follows your mouse, showing a
<strong>magnified view</strong>. Hover over points/tracks to see a detailed tooltip. Use the
<strong>mouse wheel</strong> while in this mode to zoom in/out.
</p>
</div>
@ -338,7 +514,9 @@
<h3>CAN Speed Integration</h3>
</div>
<pclass="text-sm text-slate-600 mt-2">
The <kbd>Load CAN</kbd> button has been removed. The visualizer now expects CAN speed data (<code>canVehSpeed_kmph</code>) to be included <strong>directly within the main JSON file</strong>, associated with each radar frame.
The <kbd>Load CAN</kbd> button has been removed. The visualizer now expects CAN speed data
(<code>canVehSpeed_kmph</code>) to be included <strong>directly within the main JSON
file</strong>, associated with each radar frame.
</p>
</div>
@ -349,7 +527,9 @@
<h3>Session Management</h3>
</div>
<pclass="text-sm text-slate-600 mt-2">
<kbd>Save Session</kbd> downloads a <kbd>.json</kbd> file with your current file names, offset, and all UI toggle states. <kbd>Load Session</kbd> restores this state (requires files to be cached).
<kbd>Save Session</kbd> downloads a <kbd>.json</kbd> file with your current file names, offset,
and all UI toggle states. <kbd>Load Session</kbd> restores this state (requires files to be
cached).
</p>
</div>
@ -360,7 +540,8 @@
<h3>Web Worker Parsing</h3>
</div>
<pclass="text-sm text-slate-600 mt-2">
Large JSON files are parsed in a background <strong>Web Worker</strong> using a streaming parser. This prevents the UI from freezing and shows a real-time progress bar.
Large JSON files are parsed in a background <strong>Web Worker</strong> using a streaming
parser. This prevents the UI from freezing and shows a real-time progress bar.
</p>
</div>
@ -454,23 +635,28 @@
<!-- Setup Guide -->
<divclass="bg-white rounded-lg shadow-md p-6">
<h3class="mb-4">Local Setup Guide</h3>
<pclass="text-sm text-slate-600 mb-4">The app must be run from a local server due to browser security rules for modules.</p>
<pclass="text-sm text-slate-600 mb-4">The app must be run from a local server due to browser
<spanclass="text-sm text-slate-600">If the `.bat` fails, run <kbd>python_check.bat</kbd> to diagnose, or manually run `python -m http.server 8000` in the `steps` folder.</span>
<spanclass="text-sm text-slate-600">If the `.bat` fails, run <kbd>python_check.bat</kbd> to
diagnose, or manually run `python -m http.server 8000` in the `steps` folder.</span>