EVT3 Viewer is a desktop application for exploring EVT 3.0 event-camera recordings. It combines a native Rust decoder with a responsive SolidJS/PixiJS interface for playback, seeking, and visualization.
- Event-heatmap and time-surface representations
- Adjustable event accumulation from 1 ms to 1 second, with manual values down to 0.001 ms
- Configurable time-surface decay
- Representation-aware Matplotlib-style color maps with gradient previews
- Variable playback speed or a fixed effective frame rate
- Timeline scrubbing and playback controls
- Optional loop playback
- Display refresh-rate warnings when the selected rate cannot be presented without dropping frames
- Batched, double-buffered frame streaming with a Web Worker prefetcher
EVT decoding is provided by openevt.
Install the frontend dependencies:
bun installStart the desktop application in development mode:
bun run tauri devUse Open Device, select Raw File Reader, and choose an EVT 3.0 recording. Playback controls appear beneath the visualization, while representation, accumulation, frame-rate, color-map, and looping options are available in the advanced settings panel.
Create a platform-specific production bundle:
bun run tauri buildBuild only the web frontend:
bun run buildBuild the Rust backend:
cargo build --release --manifest-path src-tauri/Cargo.tomlRun the Rust test suite:
cargo test --manifest-path src-tauri/Cargo.tomlType-check and bundle the frontend:
bun run buildThe Tauri backend opens and decodes recordings with openevt, renders RGBA
frames, and exposes buffered frame batches through a custom URI protocol. The
frontend prefetches up to two batches in a Web Worker and transfers their
buffers to the main thread, where PixiJS uploads frames without blocking on
network requests.
src/
├── features/player/ playback state, controls, settings, and streaming
├── components/ shared interface components
└── lib/ Tauri command adapters
src-tauri/src/
├── commands.rs file, playback, rendering, and pacing commands
├── image.rs heatmap and time-surface generation
├── protocol.rs batched frame-stream protocol
├── state.rs shared player and double-buffer state
└── utils.rs monitor refresh-rate detection
For debug builds, set EVT3_OPEN_DEVTOOLS to open the webview developer tools
when the application starts:
EVT3_OPEN_DEVTOOLS=1 bun run tauri dev