A fast, extensible workbench for event-based data analysis — 2D preview, GPU-accelerated 3D inspection, cross-view linked selection, and a plugin-driven analysis pipeline. Written entirely in Rust.
Load any event stream — live from a camera or replayed from file — and investigate it with simultaneous 2D and 3D views, interactive tables, rich overlays, and per-layer styling. No vendor runtime required.
AugurRS is a general-purpose workbench for event-based data. It works with any timestamped event stream — whether captured live from a camera, replayed from a recording, or loaded from decoded event files (.raw, .csv, .bin, .npy, .h5). You do not need a camera to use AugurRS: open any supported event file and get the full analysis experience.
For live capture, AugurRS currently ships with a direct hardware driver for the Prophesee EVK4 / IMX636 — no Metavision or OpenEB required. Support for additional camera backends is planned. The trait-based camera abstraction in augur-core makes adding new hardware straightforward.
The plugin system turns AugurRS into a programmable analysis and laboratory-workflow surface. Plugins can process the event stream or use the worker-owned control plane to coordinate device owners during camera-less intervals. The plugin template, authoring docs, and community plugins live in the companion augur-plugins repository.
The centerpiece of AugurRS is an interactive investigation workspace where 2D preview, GPU-accelerated 3D point cloud, data tables, and plugin overlays are all linked views of the same underlying data.
Switch between three layouts with toolbar buttons or keyboard shortcuts (1 / 2 / 3):
| Layout | Description |
|---|---|
| 2D only | Full-size event preview with all 2D tools |
| Split 2D + 3D | Side-by-side with a draggable divider |
| 3D only | Full-size GPU-accelerated 3D point cloud |
The 3D view renders event data on a WGPU-backed point cloud with proper depth testing. Controls include orbit, pan, zoom, axis presets (XY / XT / YT), adjustable depth clipping, configurable history range, and point budget.
Click anywhere — a row in a data table, a marker in the 2D preview, or a point in the 3D cloud — and the selection propagates to all other views instantly:
- Table row click highlights the corresponding marker in 2D and point in 3D
- 2D marker click scrolls the linked table and highlights in 3D
- 3D point click updates table and 2D highlight, focuses the 3D camera on the selection
- ROI selection in 2D can be linked to the 3D view (
Lkey), filtering the point cloud spatially with a visible focus volume
Hover effects, selection rings, and auto-scroll keep cross-view coordination fluid.
Plugins publish structured data that the host renders across all views:
- Marker overlays with configurable shapes (point, cross, box, ellipse, diamond, filled circle), per-marker color, size, and optional stable IDs for durable selection tracking
- Interactive tables with stable row identity, coordinate mapping hints, and host-rendered sorting/filtering
- Host view types including compact tables, scatter plots, density maps, line charts, and image views
- 3D scatter layers from table datasets with coordinate column hints — the host projects plugin data into the 3D space automatically
Every data source — raw ON events, raw OFF events, each plugin output — is a layer with independent controls:
- Visibility toggles with colored indicators
- Style presets and color pickers
- The investigation inspector on the right shows stage cards with status metrics, dependency links, stale-parameter warnings, and collapsible settings
During paused replay, changing any plugin or hotpixel parameter triggers an immediate recompute of the current frame. All views update in place — no need to re-run the full recording.
| Key | Action |
|---|---|
1 / 2 / 3 |
Switch to 2D only / Split / 3D only |
L |
Toggle 2D-to-3D ROI linking |
Esc |
Clear selection |
F |
Focus 3D camera on current selection |
Open recorded event files and investigate them with the full workspace:
- Supported formats:
.raw(EVT3),.csv,.bin,.npy, and optional.h5/.hdf5 - Transport controls: play/pause, step forward/backward, speed selection (0.25x–Max), timeline scrubbing
- Timestamp-driven pacing:
1xfollows real event time, not average file throughput - TIFF export: batch export of accumulation frames to 16-bit multi-page TIFF with time-window and ROI controls
- Pixel inspection with mode-aware readout (ON/OFF/Total or Time Surface decay)
- ROI selection, line profile, ruler, rectangle and ellipse annotations
- Histogram-driven brightness/contrast with gamma, auto percentile, manual min/max
- Multiple colormaps: polarity (red-blue), signed count, time surface, fire, ice, and more
- GPU-accelerated rendering via wgpu (Metal, Vulkan, D3D12) with automatic OpenGL fallback
- Scale bar, zoom/crop, enlarged popup preview
AugurRS ships a generic, FFI-based plugin system. Analysis plugins run on decoded frames, raw events, or upstream results and publish through host-rendered views. ABI v6 also provides a worker-owned control tick for semantic device-owner services and narrowly allowlisted recording commands, including camera-less intervals.
Drop a compiled plugin into ~/.augur/plugins/ and the GUI picks it up — no recompilation of the host required.
This repository ships the runtime plugin host and API crates. Plugin implementations are maintained in the companion augur-plugins repository.
Want to write a plugin? See the Plugin Authoring Guide.
- Hotpixel Detection — persistent hotpixel detection with DEM-mask copy
- ROI-Grid Overlay — configurable grid overlay for spatial analysis
- ImageJ/Fiji Bridge — stream live frames to ImageJ for external analysis
- Python Event Ingress — publish NumPy event arrays from
evt3.augurinto the Augur preview and investigation pipeline
For users with a supported camera, AugurRS provides direct, auditable hardware control with no vendor SDK dependency.
| Camera | Sensor | Transport | Status |
|---|---|---|---|
| Prophesee EVK4 | IMX636 | USB 3.0 | Fully supported |
| More backends | — | — | Planned |
- Direct hardware path — Treuzell USB transport + IMX636 register programming
- Backpressured 3-thread pipeline — USB reader, bounded disk writer, lossy preview decoder. Recording never blocks on the UI, never grows unbounded in memory
- Reproducible sessions — every
.rawfile gets a self-describing EVT3 header plus a.tomlsidecar with config, provenance, and timing metadata
All adjustable live, mid-session:
| Control | Description |
|---|---|
| Biases | diff_on, diff_off, fo, hpf, refr — threshold and noise tradeoffs |
| Hardware ROI | Crop the active pixel area at the sensor level to reduce bandwidth |
| DEM pixel mask | 64-slot hardware mask to suppress noisy pixels before they hit the stream |
| STC / Trail filters | Mutually exclusive on-sensor noise filters |
| Acquisition window | Time window for event accumulation |
# CLI — for scripting and automation
augur status
augur record captures/run.raw --duration-s 30
augur analyze captures/run.raw --out analysis/run
# GUI — for live preview and interactive control
augur-guiThe CLI and GUI share the same config types. A TOML file saved from the GUI works directly with the CLI.
Seven crates with explicit, enforced boundaries:
augur-cli ─────────────┐
├──► augur-core (generic camera SDK)
augur-gui ─────────────┼──► augur-prophesee (EVK4/IMX636 driver)
├──► augur-runtime (plugin host, live worker, offline analysis)
├──► augur-plugin-api (plugin FFI contract)
runtime plugins ───────┼──► augur-plugin-types (shared domain types)
└──► host-owned analysis UI in augur-gui
augur-core is a generic camera SDK with a trait-based abstraction. The Prophesee driver (augur-prophesee) is one implementation — additional backends can be added without touching the core or GUI. augur-runtime owns dynamic plugin loading, live worker execution, retained plugin history, and offline analysis. augur-gui owns the investigation workspace and built-in analysis tools.
┌──────────────┐ raw EVT3 ┌──────────────┐ bounded ┌──────────┐
│ USB reader │ ─────────────► │ Disk writer │ ────────► │ .raw file │
└──────────────┘ └──────────────┘ └──────────┘
│
│ lossy (drops frames, never blocks capture)
▼
┌──────────────┐ decoded frame ┌──────────────────────────┐
│ Preview │ ─────────────► │ Plugin host (optional) │
│ decoder │ └──────────────────────────┘
└──────────────┘
The disk writer uses a bounded channel — recording pauses if the OS falls behind rather than growing unbounded. The preview decoder uses lossy delivery — frames are dropped rather than stalling the capture thread. Recording quality is independent of UI or analysis load.
Prebuilt, checksum-verified builds for every release are on the releases page.
| Platform | Download | Install |
|---|---|---|
| macOS | AugurRS-<version>-macos-universal.dmg |
Drag to Applications. On first launch right-click ▸ Open — the build is ad-hoc signed rather than notarized, so Gatekeeper asks once. Universal: runs on Apple Silicon and Intel. |
| Linux | AugurRS-<version>-linux-x86_64.AppImage |
chmod +x and run. No install step, no root. |
| Windows | AugurRS-<version>-windows-x86_64-setup.exe |
Run the setup. Installs per user, so no admin rights are needed, and appears in Add/Remove Programs. |
Terminal-only users can take augur-<version>-<platform>.tar.gz / .zip instead, which carry the
augur CLI and AugurRS binaries plus the example config.
Verify any download against the release's SHA256SUMS:
shasum -a 256 -c SHA256SUMS # macOS
sha256sum -c SHA256SUMS # LinuxUpdates. AugurRS updates itself: Help ▸ Check for updates… in the GUI, or augur update on
the command line. A background check runs at most once a day and can be turned off. Downloads are
verified before anything is replaced, and updating is refused while a recording or analysis run is
active — the running version is written into every recording sidecar. See
In-App Updates.
# Build everything
cargo build --workspace
# Launch the GUI
cargo run -p augur-gui --bin AugurRS
# Open any supported event file via File → Open Replay:
# .raw, .csv, .bin, .npy, or .h5/.hdf5 (with HDF5 feature enabled)
# Then explore with the investigation workspace:
# press 2 for split 2D+3D view, click markers, link ROI with LRequirements: Rust toolchain, Prophesee EVK4 over USB 3.
# Check camera connection
cargo run --bin augur -- status
# Record a 30-second capture
cargo run --bin augur -- record captures/run.raw --duration-s 30
# Launch the live GUI
cargo run -p augur-gui --bin AugurRSTagged binary releases do not include HDF5 support. Use a source build if you need .h5 / .hdf5 replay.
export HDF5_DIR="$(brew --prefix hdf5)" # macOS / Homebrew
./scripts/install-ecf-plugin.sh
export HDF5_PLUGIN_PATH="$HOME/.local/share/hdf5/plugin"
cargo build -p augur-gui --bin AugurRS --features hdf5For the full HDF5 / ECF setup, see HDF5 File Support.
./scripts/build-macos-app.sh --installBuilds AugurRS.app and copies it into /Applications. Add --install-dir "$HOME/Applications" if /Applications needs admin permissions.
Each capture produces two files:
captures/
run.raw ← EVT3 stream with geometry, device identity, software provenance, and pixel pitch
run.toml ← effective configuration plus recording metadata and timing for exact replay
| Platform | Status |
|---|---|
| macOS | Primary — hardware-tested. Universal arm64 + x86_64 builds. |
| Linux | Built, tested, and packaged on every push (x86_64) |
| Windows | Built, tested, and packaged on every push (x86_64) |
Every platform gets a real installer — see Install above and Release Distribution. Optional HDF5 replay remains source-build-only.
Remaining rough edges:
- macOS downloads are ad-hoc signed rather than notarized, so Gatekeeper prompts on first launch. Getting rid of that needs a paid Apple Developer ID.
- Linux ships x86_64 only.
- The plain
.tar.gz/.ziparchives cannot self-update; the DMG, AppImage, and setup can.
| Document | Description |
|---|---|
| Getting Started | Build, connect, first capture or replay |
| Configuration | TOML reference: biases, ROI, mask, filters |
| CLI Reference | Commands and scripting |
| GUI Guide | Investigation workspace, live preview, controls, and plugins |
| Recording Format | EVT3 output and pipeline behavior |
| Performance | Architecture and design rationale |
| Investigation Workspace | Linked 2D/3D views, cross-view selection, layer styling, and inspection state |
| HDF5 File Support | Native HDF5 + ECF plugin setup for .h5 / .hdf5 replay |
| Plugin Authoring Guide | Write your own plugin: FFI host, phases, context bus, host views |
| Dynamic Plugin Loading | Plugin directory layout, manifests, scan/reload workflow |
| Plugin Service Control Plane | ABI v6 runtime roles, frame-independent semantic services, snapshots, and recording receipts |
| GPU Preview Rendering | Dual-backend wgpu/glow preview architecture and benchmark baseline |
| Technical Notes | SDK internals, built-in tools, and feature details |
| Architecture Decisions | ADRs |
See CONTRIBUTING.md, CODE_OF_CONDUCT.md, and SECURITY.md.
Plugin contributions go to the companion augur-plugins repository, which also hosts the plugin template and authoring docs.
