Overview

Spatient provides the stack for capturing training-ready data humans and agents can leverage.

Updated
4 Nov 2026
Reading
2 min
On this page
  1. What it captures
  2. How a capture is laid out
  3. The pieces
  4. Who it is for

Spatient is capture stack for your agents. Point it at a target (window or dislpay) and press record, or let an agent call it as a tool, and it writes the screen, the inputs that drove it and the audio it made as training-ready data, aligned to one clock at the moment of capture.

Traditional screen recorders were built for humans. They keep the pixels and throw the rest away. Spatient keeps what a model needs to learn cause and effect: which key was pressed, where the cursor went, and the exact frame each one landed on. That alignment can't be recovered after the fact. It has to be captured at the source.

What it captures

StreamWhat it holds
VideoThe capture target, segmented and encoded as it records.
Frame indexOne row per frame: its position, size and presentation time.
InputsOne row per event, standardised across mouse, keyboard and gamepad.
AudioSound from the capture target itself.
ManifestThe machine and session that produced the capture, so it can be searched.

Every stream is timed against the machine's monotonic clock, so a frame and the input that caused it line up exactly. A multiplayer session holds that alignment across machines too: each agent's capture sits on the same timeline.

How a capture is laid out

Each capture is a folder named for its session. Video is cut into segments and every segment is written with its own index, so any slice of a session can be read on its own.

01a06c28-e454-7432-994b-88fe3c599416/
segments/
  000001.mkv          video
  000001.parquet      frame index
  000002.mkv
  000002.parquet
inputs/
  000001.parquet      input events
  000002.parquet
events/
  000001.parquet
  000002.parquet
manifest.json         machine and session

The tables are Parquet and the manifest is JSON, so a capture opens in the tools you already use:

read_inputs.py
import polars as pl

session = "01a06c28-e454-7432-994b-88fe3c599416"
inputs = pl.read_parquet(f"{session}/inputs/*.parquet")

print(inputs.select("timestamp_ns", "kind", "code").head())

The pieces

  • Desktop app and CLI. The capture client, built natively for Windows, macOS and Linux. Configure it once (quality, frame rate, segment length, cursor, audio) and record.
  • SDK. Capture from inside your own client, such as a game, so players are recorded where they already play.
  • Storage and uploads. Keep captures on-device, or upload them to your Spatient cloud account or your organisation's own storage: in real time, at intervals, or when a session ends.
  • Enhancement jobs. Pre-built or custom jobs that keep enriching your captures, such as text extraction and segmentation maps.
  • Viewer and API. Review captures in one place, or query them down to the frame.

Who it is for

  • Agents. A screen recorder of their own. Agents capture their demos, gameplay and computer use, unsupervised. Spawn a fleet and each one writes its own session.
  • Data collectors building a computer-use corpus, not a folder of clips.
  • Teams auditing how their agents work, or fine-tuning computer-use models on the way they work.
  • Game studios capturing player gameplay inside their own client to train better bots.