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 rows | Concepts → Timing |
| Align rows across CSVs | Concepts → Join keys |
| Know what columns every stream has in common | Concepts → Column conventions |
| Find the authoritative per-frame timeline | Regular → ExperienceState |
| Log a key press or button press | Irregular → Input |
| Do a reaction-time analysis | Recipes → Reaction time |