Skip to main content

Data Streams

LABO records the experiment through data streams — CSV files written during a run. Every stream falls into one of two families based on when it writes a row:

  • Regular streams — one row per render frame (LateUpdate) or per physics tick (FixedUpdate). Row rate is set by the engine's loop, not by what is happening in the experiment. Used for continuous signals that always have a value: position, rotation, gaze, skeletal pose.
  • Irregular streams — one row per trigger. A variable write, an expression detection, a key press, an agent step. No trigger, no row.

Every CSV — regular or irregular — begins with the same shared prefix from LaboExperienceState, so any two files can be joined on FrameNumber or MonotonicExecutionTime. Start with Regular vs Irregular and Timing before reading individual stream pages.

Where to start

I want to...Read this
Understand when LABO writes rowsConcepts → Timing
Align rows across CSVsConcepts → Join keys
Know what columns every stream has in commonConcepts → Column conventions
Find the authoritative per-frame timelineRegular → ExperienceState
Log a key press or button pressIrregular → Input
Do a reaction-time analysisRecipes → Reaction time