Skip to content

About

Open event-camera recordings (Prophesee / IDS EVT3 .raw), inspect them as pictures, then send a dense stack over the WETTER Viewer Contract to DONNER or BLITZ

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Repository files navigation

Event reader

Release License Python Platform

v1.2.0 — open EVT3 recordings, build a picture stack, stream it to BLITZ or DONNER.

Event reader GUI

Event reader opens Prophesee / IDS EVT3 .raw files, lets you scrub and shape a time window, then builds a dense picture stack you can send over the WETTER Viewer Contract (same Socket.IO + HTTP as WOLKE). BLITZ and DONNER connect as Stream clients — 2D and 3D on one cube.

Part of the WETTER framework:

Raw Data → DAMPF → KEIM → WOLKE → BLITZ

flowchart TD
  load[Load RAW] --> fullOv[Full-file overview]
  fullOv --> scrub[Scrub plus yellow band]
  scrub --> restag[Rebuild band at Δt]
  restag --> filt[Filters before vs after]
  restag -.-> fullRec[Full recording]
  fullRec -.-> fullOv
  filt --> crop[Crop plus spatial bin]
  crop --> out[Send to BLITZ or DONNER or save NumPy]
Loading

Features

  • Drop a .raw, scrub a coarse overview, set the yellow band, Rebuild (O) at the send Δt.
  • Crop, spatial bin, optional noise filters (before / after side by side).
  • Send as chooses what the cube holds — states, counts, or occupancy — with a matching preview legend.
  • Build pictures and send, or Save as NumPy… (same bytes).
  • Send bar: comfort thresholds (2 GiB / 1000 pictures), dense voxel count T × H × W, playhead sync with connected viewers.
  • Faster open on large recordings (compiled bin + light uint8 preview); optional Timing log.

Internally the reader always bins ON and OFF counts (uint16). Send as is a view of those planes — switching it does not re-bin.

flowchart TD
  raw["RAW EventStore t x y p"]
  bin["Bin Δt crop spatial-bin filter"]
  off["off_counts uint16"]
  on["on_counts uint16"]
  view["Send as"]
  preview["Local preview"]
  cube["Cube"]
  states["States: uint8 0 85 170 255"]
  activity["Counts: uint16 ON+OFF"]
  occ["Occupancy: uint8 binary 0/255"]
  out["BLITZ or DONNER Stream or .npy"]

  raw --> bin --> off
  bin --> on
  off --> view
  on --> view
  view --> preview
  view --> cube
  cube --> states --> out
  cube --> activity --> out
  cube --> occ --> out
Loading

Download

One-file binaries (~140 MB, Qt + NumPy + Numba):

  • Windows: EventReader.exe
  • Ubuntu / Linux: EventReader

from GitHub Releases — current: 1.2.0.

Run the binary (optional path to a .raw). On Windows a console window stays open for logs.

Use with BLITZ or DONNER

Nothing is sent until you click Build pictures and send. Status and the comfort bar live in panel 3 — Send or save.

  1. Open a .raw (drop it, Open RAW…, or pass the path). Left = unfiltered, right = after filters. Dropping a folder loads the first .raw in it.
  2. Scrub with the playhead or the wheel. Time is seconds from the first event in this file.
  3. Zoom time with Ctrl+wheel or right-drag. Full recording / Esc restores the full-file overview.
  4. Drag the yellow band to the send range (writes a 1-2-5 Δt, ~150 pictures). Typing Δt updates the plan only; Rebuild (O) and send re-bin.
  5. Crop (M) if needed, then Apply crop.
  6. Panel 2: Δt, spatial bin, Send as, optional 8-bit / Normalize, optional noise filters.
  7. Panel 3: send, or Save as NumPy…. In BLITZ → Stream, or DONNER Source → Count → Stream: http://127.0.0.1:5055, token evt. DONNER wants Send as counts.
  8. After a send, scrubbing in BLITZ or DONNER moves the white playhead here, and the reverse works inside the last-sent window.

Black pixels are measured zero. The plot is event count in the yellow probe box. The comfort bar turns yellow above 2 GiB or 1000 pictures, red at 8 GiB or 2000 (still allowed with confirm); send only blocks when the wire would not fit in free RAM.

Send as Preview Cube
states (default) red / green / yellow uint8 0 / 85 / 170 / 255
counts Inferno uint16 activity (ON+OFF)
occupancy black / white uint8 0 or 255
Option Event reader BLITZ File tab on Connect
8-bit optional, default off applied if checked
Normalize optional, default off applied if checked
Grayscale always (cube is 1 channel) applied if checked
Gzip opt-in, default off —
Crop Crop (M) then Apply crop load-dialog ROI (not Stream ingest)
Spatial bin 1×1 / 2×2 / 4×4 / 8×8 —
Noise filter 1-pixel live; neighbour on tick / Rebuild / send —

Do not turn 8-bit on in both places unless you want two quantizations.

From source

uv sync
uv run evt-sidecar path/to/recording.raw

Optional: --host, --port, --token (defaults 127.0.0.1, 5055, evt).

Headless export:

uv run evt-sidecar recording.raw --export-npy out.npy --dt-ms 1 --representation states --spatial-bin 2

Tests: uv run pytest -q

Build binaries

PyInstaller one-file — build Windows on Windows, Linux on Linux:

uv sync --group dev
uv run pyinstaller EventReader.spec --noconfirm --clean

On Ubuntu: sudo apt-get install -y libgl1 libglx-mesa0 libxcb-cursor0 libegl1 (or ./scripts/build.sh).

GitHub Actions Build Event reader (workflow_dispatch, or a build* tag such as build-v1.2.0) publishes the binaries on the Release.

License: GPL-3.0-or-later. Agents: docs/llm-brief.md. Backlog: BACKLOG.md.

About

Open event-camera recordings (Prophesee / IDS EVT3 .raw), inspect them as pictures, then send a dense stack over the WETTER Viewer Contract to DONNER or BLITZ

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages