From 112510515275ef8585e1c9d2fe23c3d113166c6b Mon Sep 17 00:00:00 2001 From: noisedestroyers Date: Sat, 11 Apr 2026 07:37:11 -0400 Subject: [PATCH] update BRAINSTORM --- BRAINSTORM.md | 316 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 210 insertions(+), 106 deletions(-) diff --git a/BRAINSTORM.md b/BRAINSTORM.md index a46ea14..226dc44 100644 --- a/BRAINSTORM.md +++ b/BRAINSTORM.md @@ -1,146 +1,250 @@ # Impakt — Brainstorm -Ideas, feature proposals, and design thoughts collected during development. -Grouped by theme. Checkboxes indicate implementation status. +Ideas, feature proposals, and design thoughts. Organized by user workflow and informed by the competitive landscape survey (see `research/landscape.md`). + +Priority tiers: +- **P0** — Unlocks significant capability or addresses a clear gap vs. commercial tools +- **P1** — Strong quality-of-life improvement for daily use +- **P2** — Nice to have, longer-term, or exploratory + +Where an existing open-source library enables a feature, it's noted with `[lib: name]`. Repos are cloned in `research/repos/`. --- -## Data Import & Channel Intelligence +## The Core Experience -- [ ] **Lazy channel loading** — For tests with 500+ channels, don't load `.dat` files until a channel is first accessed. Load headers eagerly, data lazily. This keeps `Session.open()` fast even for large datasets. -- [ ] **Channel aliasing** — Allow users to define human-friendly aliases for channel codes. e.g., `"head_ax" -> "11HEAD0000ACXA"`. Aliases can live in templates or user config. -- [ ] **Auto-detect signal type from channel code** — Use the measurement code (AC, FO, MO, DC...) to automatically suggest appropriate CFC class, plot axis labels, and unit handling. -- [ ] **Batch loader** — Load an entire directory of tests at once. `Session.open_batch("/tests/series_2024/")` returns a `Series` object with cross-test operations. -- [ ] **Channel search by physical meaning** — "Show me all head accelerations" should work across different test objects (driver, passenger, child dummies). -- [ ] **Delta channel** — Compute the difference between the same channel across two tests. Useful for design iteration comparisons. -- [ ] **NHTSA open data integration** — NHTSA publishes crash test data but in their own proprietary format (UDS), not ISO 13499 MME. No publicly available MME datasets exist (the format is industry-internal; Euro NCAP data is confidential). Build a UDS-to-MME converter or direct UDS reader plugin. NHTSA's NCAP database is at `nhtsa.gov/file-downloads?p=nhtsa/downloads/NCAP/` — the Access DB (`NCAP 6-14-10.mdb`) contains summary results, not time-history data. Contact NHTSA (SCI@dot.gov, 888-327-4236) for time-history channel data access. -- [ ] **Channel metadata editor** — Sometimes `.chn` files have wrong units or missing metadata. Provide a non-destructive override mechanism stored in the session. -- [ ] **Synthetic data generator** — Built into the test suite (`tests/fixtures/generate_mme.py`) for development. Consider exposing this as `impakt.synth` for users who want to prototype templates or test analysis scripts without real test data. +The crash test engineer's workflow is: **receive data -> inspect -> filter -> compute -> score -> report**. Every feature below should make one of those steps faster, more reliable, or more insightful. + +What we learned from the landscape: commercial tools (measX X-Crash, NI DIAdem, Kistler) dominate because they nail this loop end-to-end with zero friction. No open-source web-based tool does this today. That's Impakt's opportunity. + +--- + +## Rendering & Performance + +The most impactful near-term improvements. Large crash test datasets (133+ channels, 10k+ samples each at up to 100kHz) need to render smoothly. + +- [ ] **P0 — Integrate plotly-resampler** — Drop-in wrapper for Plotly figures that handles 110M+ points via LTTB downsampling. Replace `go.Figure()` with `FigureResampler(go.Figure())` in the plot engine. Works natively with Dash. `[lib: plotly-resampler]` +- [ ] **P1 — Progressive rendering** — Show plots immediately with decimated data, refine with full resolution once loaded. Plotly-resampler does this automatically, but the UX should show a loading indicator during refinement. +- [ ] **P1 — Memory-mapped data** — For very large datasets, use `numpy.memmap` to avoid loading everything into RAM. Enables tests with 500+ channels and multi-GB data files. +- [ ] **P1 — Lazy channel loading** — Load `.dat` files only when a channel is first accessed. Load headers eagerly, data lazily. Keeps `Session.open()` fast for large tests. +- [ ] **P2 — Channel cache** — Cache frequently-accessed transformed channels to avoid recomputing CFC filters every time a plot refreshes. +- [ ] **P2 — Parallel criteria computation** — Compute all injury criteria in parallel using `concurrent.futures`. The individual computations are independent. + +--- ## Visualization -- [ ] **Synchronized zoom/pan** — When plotting multiple subplots (e.g., head accel + chest deflection), zoom/pan actions should sync across all subplots. -- [ ] **Waterfall / 3D surface plots** — For tests with many similar channels (e.g., barrier face loads at multiple locations), a 3D surface or waterfall view shows spatial distribution. -- [ ] **Animation mode** — Playback the crash event in time, with a vertical cursor sweeping across all plots simultaneously. Sync with video if available. -- [ ] **Channel comparison sparklines** — In the channel tree sidebar, show tiny inline sparklines next to each channel name so engineers can visually identify signals before selecting them. -- [ ] **Peak annotation** — Auto-annotate the peak value and time on plots. Toggle-able. Shows a marker + text label at the peak. -- [ ] **Statistical overlays** — When viewing multiple tests, show mean +/- 1 sigma envelope, min/max envelope. Useful for repeatability studies. -- [ ] **Color-by-test vs color-by-channel** — When overlaying multiple tests, let the user choose: each test gets a color (channels within a test share the color), or each channel gets a color (tests use line dash variants). -- [ ] **Dark mode** — Engineers often work in labs with varying lighting. A dark theme would be appreciated. -- [ ] **Custom plot layouts** — Allow 2x2, 3x1, 1x3, etc. subplot grids within a single view, each with independent channel selection. -- [ ] **Persistent cursor positions** — When moving between plot views or applying transforms, cursor positions should persist in the session state. +What makes crash test analysis *fast* is the ability to visually scan, compare, and correlate signals. The best commercial tools (measX, DIAdem, Altair HyperGraph) invest heavily here. + +### Multi-signal navigation + +- [ ] **P0 — Synchronized zoom/pan** — When plotting multiple subplots, zoom/pan actions sync across all panes sharing an X axis. Bokeh does this natively with linked ranges; in Plotly/Dash this requires shared `xaxis` config or callback-based sync. This is the single most-requested feature in crash test visualization. +- [ ] **P1 — Channel sparklines** — In the channel grid sidebar, show tiny inline sparklines next to each channel name. Engineers visually identify signals before selecting them. The grid already has Min/Max columns; a 60px-wide sparkline column would be transformative for browsing 100+ channels. +- [ ] **P1 — Peak annotation** — Auto-annotate peak value and time on plots as a togglable Plotly annotation. Shows a marker + text label at the global peak. Optionally annotate at cursor positions too. +- [ ] **P1 — Dark mode** — Engineers often work in labs with varying lighting. A Dash Bootstrap dark theme (DARKLY or CYBORG) is a one-line change in `app.py`. + +### Multi-test comparison + +- [ ] **P0 — Quick comparison mode** — Two tests side-by-side with synchronized cursors. One-click "compare" button. Each test gets its own color family; channels within a test share the hue, differentiated by line dash. This is the most natural workflow after single-test analysis. +- [ ] **P1 — Statistical overlays** — When viewing multiple tests, show mean +/- 1 sigma envelope, min/max envelope. Essential for repeatability studies and fleet testing. +- [ ] **P1 — Delta channel** — Compute the difference between the same channel across two tests. Useful for design iteration comparisons (e.g., "how did the head acceleration change after we modified the airbag?"). +- [ ] **P2 — Color-by-test vs color-by-channel toggle** — Let the user choose: each test gets a color, or each channel gets a color. + +### Advanced visualization + +- [ ] **P1 — Frequency spectrum viewer** — FFT / power spectral density of a channel. Helps diagnose noise, identify resonant frequencies, and verify CFC filter behavior. Show alongside the time-domain plot in a split view. +- [ ] **P2 — Waterfall / 3D surface plots** — For barrier face loads at multiple spatial locations, a waterfall view shows spatial distribution over time. Taipy and Plotly both support 3D surface natively. +- [ ] **P2 — Animation mode** — Playback the crash event in time with a vertical cursor sweeping across all plots. Sync with video if available (see Video Sync below). +- [ ] **P2 — Custom subplot grids** — Allow user-defined subplot grids beyond the current presets. Let users drag-resize panes. + +--- + +## Data Import & Format Support + +Impakt currently reads ISO 13499 MME (real + synthetic). The landscape shows several adjacent formats that would broaden the tool's reach significantly. + +### High-priority formats + +- [ ] **P0 — UDS reader** — NHTSA's proprietary binary format. Required to access the largest public crash test database in the world (NHTSA NCAP). The NHTSA-Tools Fortran source documents the UDS spec thoroughly. Build as a reader plugin. `[ref: NHTSA-Tools]` +- [ ] **P0 — ASAM MDF reader** — The standard for ECU/CAN bus measurement data. Many crash test labs record vehicle bus data alongside instrumentation in MDF format. asammdf is a mature, well-tested library. Add as an optional dependency like TDMS. `[lib: asammdf]` +- [ ] **P1 — CSV/TSV flexible reader** — The current CSV reader is basic. Engineers frequently receive data as CSV exports from other tools with varying column layouts, header conventions, and delimiter styles. A flexible CSV reader with column mapping would cover many edge cases. + +### Medium-priority formats + +- [ ] **P1 — LS-DYNA binout/D3plot** — Simulation results for test-vs-CAE correlation. lasso-python is the maintained Python library for this. Enables overlay of physical test data with simulation predictions — a major workflow in automotive safety development. `[lib: lasso-python]` +- [ ] **P2 — Abaqus ODB** — Another major FEA solver used in safety simulation. +- [ ] **P2 — MADYMO** — Occupant simulation results (TNO format). + +### Data enrichment + +- [ ] **P1 — Channel aliasing** — Allow human-friendly aliases (e.g., `"head_ax" -> "11HEAD0000H3ACXP"`). Aliases stored in templates or user config. Especially useful for teams that have their own naming conventions. +- [ ] **P1 — Channel metadata editor** — Non-destructive override for wrong units or missing metadata in `.chn` files. Overrides stored in the session's `.impakt/` folder. +- [ ] **P1 — Auto-detect signal type from channel code** — Use the measurement code (AC, FO, MO, DC) to automatically suggest CFC class, axis labels, and unit handling. The lookup tables in `channel/lookup.py` already have this data. +- [ ] **P2 — Batch loader** — `Session.open_batch("/tests/series_2024/")` loads an entire directory. Returns a `Series` object with cross-test operations (mean, overlay, delta). +- [ ] **P2 — NHTSA open data integration** — Build a UDS-to-MME converter or direct UDS reader. The NCAP database Access DB contains summary results; contact NHTSA for time-history channel data access. + +--- ## Signal Processing -- [ ] **Frequency spectrum viewer** — FFT / power spectral density of a channel. Helps diagnose noise, identify resonant frequencies, and verify CFC filter behavior. -- [ ] **Integration / differentiation** — Integrate acceleration to get velocity/displacement. Differentiate displacement to get velocity. Track cumulative units. -- [ ] **Cross-correlation** — Find time lag between two channels. Useful for understanding signal propagation through the vehicle structure. -- [ ] **Envelope detection** — Compute the signal envelope (Hilbert transform). Useful for identifying amplitude trends. -- [ ] **Window functions** — Apply Hanning, Hamming, etc. for spectral analysis pre-processing. -- [ ] **Savitzky-Golay filter** — Alternative to CFC for smoothing that better preserves peaks. -- [ ] **Event detection** — Automatically detect impact events from acceleration signals (threshold crossing, change-point detection). Useful for multi-event tests. -- [ ] **Signal quality metrics** — Detect clipping, saturation, dropout, or excessive noise. Flag channels with potential data quality issues. +Currently: CFC filtering, alignment, resultant, trim, resample, math expressions. The landscape shows several gaps. -## Injury Criteria & Protocols +- [ ] **P1 — Integration / differentiation** — Integrate acceleration to get velocity/displacement. Differentiate displacement to get velocity. Track cumulative units (m/s² -> m/s -> m). Fundamental for kinematic analysis. +- [ ] **P1 — Savitzky-Golay filter** — Alternative to CFC for smoothing that better preserves peaks. Useful when the SAE J211 Butterworth roll-off is too aggressive for a specific analysis. +- [ ] **P1 — Event detection** — Automatically detect impact events from acceleration signals (threshold crossing, change-point detection). Useful for multi-event tests (primary impact + rebound). +- [ ] **P2 — Cross-correlation** — Find time lag between two channels. Useful for understanding signal propagation through the vehicle structure. +- [ ] **P2 — Envelope detection** — Hilbert transform for amplitude trends. +- [ ] **P2 — Window functions** — Hanning, Hamming, etc. for spectral analysis pre-processing (depends on FFT viewer). +- [ ] **P2 — Signal quality metrics** — Detect clipping, saturation, dropout, excessive noise. Flag channels with potential data quality issues. Display as badges in the channel grid. -- [ ] **BrIC (Brain Injury Criterion)** — Rotational brain injury metric using angular velocity. Increasingly used in newer protocols. -- [ ] **DAMAGE (Diffuse Axonal Multi-Axis General Evaluation)** — Related to BrIC, uses angular acceleration. -- [ ] **SIMon / GHBMC coupling** — Interface with finite element head models for advanced brain injury assessment. -- [ ] **Thorax Trauma Index (TTI)** — Side impact chest criterion. -- [ ] **Abdominal Peak Force (APF)** — Abdomen criterion for side impact. -- [ ] **Acetabular force** — Pelvis criterion for side impact (SID-IIs, WorldSID). -- [ ] **Pedestrian criteria** — Head Impact Criterion for headform impactors, lower leg bending, upper leg force. -- [ ] **Protocol version management UI** — Visual diff between protocol versions. Show what thresholds changed between e.g. Euro NCAP 2023 vs 2025. -- [ ] **Custom protocol builder** — Let users define their own pass/fail criteria with custom thresholds. Useful for internal OEM targets that are stricter than regulation. -- [ ] **Sensitivity analysis** — "What if" tool: how would the score change if HIC was 50 points lower? Slider-based interactive exploration. -- [ ] **Regulatory compliance check** — Given a test, automatically check all applicable FMVSS / ECE regulation limits and flag any exceedances. +--- -## Templates & Workflow +## Injury Criteria & Protocol Scoring -- [ ] **Template marketplace / sharing** — Allow teams to share templates. Git-based version control for template libraries. Team templates synced via a shared directory or Git repo. -- [ ] **Template inheritance** — A template can extend another template. e.g., "My NCAP template" extends "Euro NCAP 2024" but adds custom corridors and extra plots. -- [ ] **Channel auto-mapping** — When applying a template to a new test, auto-map channel patterns to actual available channels. Handle naming variations across test facilities. -- [ ] **Template validation** — When a template references channel patterns, validate that the current test data has matching channels. Show warnings for missing channels. -- [ ] **Quick comparison mode** — Two tests side-by-side with synchronized cursors. One-click "compare" from the template panel. -- [ ] **Corridor management UI** — Visual editor for creating and editing tolerance corridors. Draw the envelope on a plot, export to CSV. -- [ ] **Session history / undo** — Track a history of actions (transforms applied, cursors moved, channels added) with undo/redo. +Currently: HIC15/36, 3ms clip, Nij, chest deflection, viscous criterion, femur load, tibia index. Euro NCAP, US NCAP, IIHS scoring. The landscape reveals several additional criteria in active use. -## Reports +### Cross-validation (leverage landscape research) -- [ ] **Multi-page reports** — Combine multiple plots + injury summary + protocol rating into a single PDF with automatic table of contents. -- [ ] **Configurable report branding** — Company logo, header/footer text, color scheme. Stored in user config. -- [ ] **Excel export** — Export criteria results and cursor values to Excel, not just PDF. Engineers love spreadsheets. -- [ ] **PowerPoint export** — Generate slides with one plot per slide. Common request in OEM environments. -- [ ] **Automated report narration** — Generate natural-language summary paragraphs: "The head acceleration exceeded the Euro NCAP green threshold at t=0.032s, resulting in a yellow rating for the head region." -- [ ] **Report templates gallery** — Pre-built templates for common submission formats (NHTSA compliance report, Euro NCAP submission, IIHS test report). -- [ ] **Comparison reports** — Automatically generate a report comparing two or more tests, highlighting differences in criteria and ratings. +- [ ] **P0 — Validate injury criteria against reference implementations** — Four independent implementations are now available for comparison: NHTSA-Tools (Fortran, authoritative), pyisomme (Python), PyAvia (CFC filter), and EPFL crash-tests-service-robots. Build a validation test suite that runs Impakt's criteria against these reference outputs for the same input data. `[ref: NHTSA-Tools, pyisomme, pyavia, crash-tests-service-robots]` -## Integration & Automation +### Additional criteria -- [ ] **Jupyter notebook integration** — Impakt objects should display rich output in Jupyter (interactive Plotly plots, HTML tables). Consider `_repr_html_` on key objects. -- [ ] **Watch mode** — Monitor a directory for new test data. When a new test appears (e.g., DAQ export completes), automatically apply a template and generate a report. -- [ ] **CI/CD integration** — `impakt evaluate --protocol euro_ncap --exit-code` returns non-zero if any criterion fails. Useful for automated test validation pipelines. -- [ ] **REST API mode** — Run Impakt as a server with a REST API for integration with other tools (CAE workflows, PLM systems). -- [ ] **Pre/post-processing hooks** — User-defined Python functions that run before/after template application, criteria computation, or report generation. Part of the plugin system. -- [ ] **CAE data import** — Read simulation results (LS-DYNA d3plot binodes, Abaqus ODB) so that test vs. simulation overlay is trivial. -- [ ] **Video sync** — Link high-speed camera footage with channel data. Scrubbing the video moves the time cursor on plots, and vice versa. +- [ ] **P1 — BrIC (Brain Injury Criterion)** — Rotational brain injury metric using angular velocity. Increasingly required in newer Euro NCAP protocols. +- [ ] **P1 — DAMAGE** — Diffuse Axonal Multi-Axis General Evaluation. Related to BrIC, uses angular acceleration. pyisomme includes an implementation. `[ref: pyisomme]` +- [ ] **P1 — Thorax Trauma Index (TTI)** — Side impact chest criterion. Required for US NCAP side impact. +- [ ] **P1 — Pedestrian criteria** — Head Impact Criterion for headform impactors, lower leg bending, upper leg force. Required for Euro NCAP pedestrian rating. +- [ ] **P2 — Abdominal Peak Force (APF)** — Abdomen criterion for side impact. +- [ ] **P2 — Acetabular force** — Pelvis criterion for SID-IIs / WorldSID side impact. +- [ ] **P2 — OLC (Occupant Load Criterion)** — Structural criterion used in Euro NCAP. -## Performance & Scale +### Protocol enhancements -- [ ] **Memory-mapped data** — For very large datasets, use `numpy.memmap` to avoid loading everything into RAM. -- [ ] **Channel cache** — Cache frequently-accessed transformed channels to avoid recomputing CFC filters every time. -- [ ] **Parallel criteria computation** — Compute all injury criteria in parallel using `concurrent.futures`. The individual computations are independent. -- [ ] **Web UI performance** — For 500-channel tests, the channel tree and dropdown become unwieldy. Implement virtualized scrolling and tree expansion. -- [ ] **Progressive rendering** — Show plots immediately with low-resolution data, then refine with full-resolution data once loaded. +- [ ] **P1 — Protocol version management UI** — Visual diff between protocol versions. Show what thresholds changed between e.g. Euro NCAP 2023 vs 2025. The YAML threshold files already version this data. +- [ ] **P1 — Regulatory compliance check** — Given a test, automatically check all applicable FMVSS / ECE regulation limits. Flag exceedances with severity indicators. +- [ ] **P2 — Custom protocol builder** — Let users define pass/fail criteria with custom thresholds. Useful for internal OEM targets stricter than regulation. +- [ ] **P2 — Sensitivity analysis** — "What if" sliders: how would the score change if HIC was 50 points lower? Interactive exploration for design optimization. +- [ ] **P2 — Additional NCAP programs** — J-NCAP (Japan), C-NCAP (China), K-NCAP (Korea), ANCAP (Australia), Latin NCAP. Each as a protocol plugin. + +--- ## Data Quality & Validation -- [ ] **Channel polarity check** — Verify SAE sign convention compliance. Detect if a channel appears to have inverted polarity (e.g., positive compression forces that should be negative). -- [ ] **Sensor sanity checks** — Flag physically impossible values (e.g., head acceleration > 500g, negative femur tension during frontal impact). -- [ ] **Inter-channel consistency** — Check that related channels are consistent (e.g., resultant acceleration is actually sqrt of sum of squares of components). -- [ ] **Time sync verification** — Check that all channels have consistent timing (same sample rate, same trigger point, no time drift). -- [ ] **Missing channel detection** — For a given protocol, check which required channels are missing from the test data and warn the user. +No commercial competitor has strong automated data quality features. This is an opportunity to differentiate. + +- [ ] **P1 — Channel polarity check** — Verify SAE sign convention compliance. Detect inverted polarity (e.g., positive compression forces that should be negative per J211). +- [ ] **P1 — Sensor sanity checks** — Flag physically impossible values (head acceleration > 500g, negative femur tension in frontal impact, displacement > 1m). +- [ ] **P1 — Missing channel detection** — For a given protocol, check which required channels are missing from the test data. Show a completeness score before the user starts analysis. +- [ ] **P2 — Inter-channel consistency** — Verify that resultant acceleration equals sqrt(sum of squares) of components. Detect disagreement between redundant sensors. +- [ ] **P2 — Time sync verification** — Check that all channels have consistent timing (same trigger point, no drift between DAQ systems). +- [ ] **P2 — Data quality dashboard** — Single-page overview showing pass/fail for each quality check across all channels. Color-coded. Exportable. + +--- + +## Templates & Workflow + +The template system is one of Impakt's differentiators. Commercial tools (DIAdem, HyperGraph, Simcenter Testlab) all have template-driven workflows. Impakt should go further. + +- [ ] **P1 — Template inheritance** — A template can extend another. "My NCAP template" extends "Euro NCAP 2024" but adds custom corridors and extra plots. +- [ ] **P1 — Channel auto-mapping** — When applying a template to a new test, auto-map channel patterns to actual available channels. Handle naming variations across test facilities (BASt vs. Calspan vs. Volkswagen conventions). +- [ ] **P1 — Template validation** — When a template references channel patterns, validate that the current test data has matching channels. Show warnings for missing channels with suggested alternatives. +- [ ] **P1 — Session history / undo** — Track a history of actions with undo/redo. Store in `.impakt/` session folder. +- [ ] **P2 — Template sharing** — Git-based version control for template libraries. Team templates synced via shared directory or Git repo. +- [ ] **P2 — Corridor management UI** — Visual editor for creating and editing tolerance corridors. Draw the envelope on a plot, export to CSV. Currently corridors are CSV-upload only. +- [ ] **P2 — Structured corridor format** — Metadata-rich corridor files: source protocol, year, applicable dummy type, confidence level. Bundle official protocol corridors with the tool. + +--- + +## Reports & Export + +Report generation is the final deliverable. This is where Impakt replaces hours of manual Excel/PowerPoint work. + +- [ ] **P0 — Multi-page reports** — Combine multiple plots + injury summary + protocol rating into a single PDF with automatic table of contents. Currently each report type is standalone. +- [ ] **P1 — Excel export** — Export criteria results and cursor values to Excel, not just PDF/CSV. Engineers live in spreadsheets. Use openpyxl or xlsxwriter. +- [ ] **P1 — PowerPoint export** — One plot per slide with metadata. Common request in OEM environments. pyisomme generates PowerPoint — confirms the demand. `[ref: pyisomme uses python-pptx]` +- [ ] **P1 — Configurable report branding** — Company logo, header/footer, color scheme. Stored in `~/.impakt/brand.yaml`. +- [ ] **P1 — Static HTML export** — Bundle all data and Plotly.js into a single self-contained HTML file. Opens in any browser without a Python server. Solves the "share with stakeholders" problem. Plotly's `write_html(include_plotlyjs=True)` does most of the work. +- [ ] **P2 — Report templates gallery** — Pre-built templates for NHTSA compliance, Euro NCAP submission, IIHS test report formats. +- [ ] **P2 — Comparison reports** — Automatically generate a report comparing two or more tests. Highlight differences in criteria and ratings. +- [ ] **P2 — Automated narration** — Generate natural-language summary: "The head acceleration exceeded the Euro NCAP green threshold at t=0.032s, resulting in a yellow rating for the head region." Could leverage an LLM for nuanced interpretation. + +--- + +## Video Synchronization + +Every major commercial competitor (measX, DIAdem, Kistler, FalCon) has video-signal sync. It's the most visible gap in Impakt vs. commercial tools. Engineers watch high-speed camera footage frame-by-frame alongside the data. + +- [ ] **P0 — Video playback linked to time axis** — Load an MP4/AVI alongside test data. Scrubbing the video moves the cursor on plots, and moving the cursor on plots seeks the video. The time offset between video start and DAQ trigger is configurable. +- [ ] **P1 — Multiple camera views** — Crash tests typically have 4-8 high-speed cameras (frontal, side, overhead, onboard). Support tiled video views synced to the same timeline. +- [ ] **P2 — Frame annotation** — Mark specific frames with notes (e.g., "airbag deployment", "head contact with steering wheel"). Export annotated frames. + +Implementation notes: Foxglove and Rerun both demonstrate web-native signal+video sync. Dash can embed HTML5 `