Spatient logo
SPATIENT

Spatial capture for your agents., data lovers. and data collectors.

Capture training-ready data at the click of a button.

Get Started

Available on

The Problem

Traditional screen recorders were built for humans, not agents.

So we built the infrastructure & tooling for capturing training ready data at the click of a button or the call of a tool .

Configure once, press record, and instantly capture rich, extensible data you and your agents can leverage.

Not just an MP4.

PRODUCT

Spatient Desktop

Desktop capture client that turns any capture into clean, synchronized, training-ready data at the click of a button.

Download Now
SPATIENTmaugz0mCAPTURETARGETCONFIGPARTYSESSIONSELECT DISPLAY (1)Target Display?Built-in Retina Display —NameBuilt-in Retina DisplayDimensions3456 × 2234Origin(0, 0)ID#1PRIMARYBUILT-INSELECT WINDOW (18)Target Window?Zed — 3456×2168ProcessZedTitlespatient — HeroPanel.tsxPID77901Dimensions3456 × 2168Handle#39142READY

Spatient CLI

Prefer the terminal? Use our CLI for a lightweight, powerful alternative built for power users and AI agents.

TERMINALzsh$spatient windows list4821 Cyberpunk 20773307 Google Chrome1190 Terminal$spatient capture start \ --window 4821 \ --config profile1.tomlSession Started: 01a06c28-e454-7432-994b-88fe3c599416$spatient capture stop

Spatient SDK

Integrate capture directly into your product. Our headless daemon records in the background, driven by our SDK.

your appyour CLIyour harnessSPATIENTDSDK / gRPCvideoinputsaudiocustom

Spatient Viewer

Desktop app for opening your captures and exploring all of their data, down to the individual frame.

SPATIENT VIEWER01a06c28-e454-7432-994b-88fe3c5994164 segmentsSEGMENTS · 4seg 0300 frseg 1300 frseg 2300 frseg 3300 frFRAMES · 300PRESENTATION_TIME_NSIDX387,649,396,869,762112387,649,413,536,429113387,649,430,203,096114387,649,446,869,763115387,649,463,536,430116387,649,480,203,097117387,649,496,869,764118387,649,513,536,431119387,649,530,203,098120387,649,546,869,765121PrevNextINPUTS · 92TIMESTAMP_NSKINDDATA387,649,448,088,427MouseMove640.3, 808.8387,649,450,275,875KeyDownW387,649,454,781,353MouseMove639.2, 812.3387,649,462,502,771MouseMove638.7, 816.7387,649,470,972,218MouseMove637.6, 825.5

Spatient-FPS-20

A preview dataset of 20 hours of first-person shooter gameplay, captured by the Spatient client.

Coming soon on Hugging Face

SPATIENT-FPS-2020 h

DATA COLLECTED

Learn More

What's collected

We capture the foundational per-frame data every model needs, then let you enhance and extend it via jobs and plugins.

Measured on the machine, at the frame it happened on.

Video

segments/000001.mkv

The picture, encoded whole within a segment.

5 seconds at 5 frames a second is 25 frames per segment.

Agent readableHuman viewable

Frame index

segments/000001.parquet

One row per frame, describing its position, size and presentation time.

  • video_frame_indexu64
  • frame_sequenceu64
  • presentation_time_nsu64 ns
  • content_widthu32
  • content_heightu32
  • content_xf64?
  • content_yf64?
  • scale_factorf64?
  • content_scalef64?

Input

inputs/000001.parquet

One row per event standardised to support mouse, keyboard and gamepad events.

  • timestamp_nsu64 ns
  • sourcestr
  • kindstr
  • device_idu32?
  • codeu32?
  • pos_xf64?
  • pos_yf64?
  • delta_xf64?
  • delta_yf64?
  • raw_delta_xf64?
  • raw_delta_yf64?
  • continuousbool?
  • scroll_phaseu32?
  • momentum_phaseu32?
  • valuef64?

Multiplayer Capture

Working or playing as a team? Capture as one, with your whole team's frames and inputs in perfect sync.

  1. 1
    Join a party

    Join a party and inherit its capture configuration.

  2. 2
    Ready up

    Press record to ready up. Capture waits for the whole party.

  3. 3
    Capture in sync

    Once everyone is ready, the party starts together on one clock.

Every manifest in the party shares its party_capture_id and details like party_capture_start_time, so you can line up what everyone saw at the same moment:

manifest.json

# agent-01"session_id": "01a1174c-9df8-7f32-ab8d-c2c7c215cb17","party_capture_id": "01a11749-2c0e-7d51-8a3f-6b9e0d4c7a28","party_capture_start_time": "2026-10-07T16:57:40.649812Z", # agent-02"session_id": "01a1174d-03b1-7c94-b6e2-1f5a8d3c9e04","party_capture_id": "01a11749-2c0e-7d51-8a3f-6b9e0d4c7a28","party_capture_start_time": "2026-10-07T16:57:40.649812Z",

Capture Manifest

Each capture generates a detailed manifest describing the session, making it indexable and searchable.

Manifest
  • schema_version"1.0.0"
  • session_id"01a1174c-9df8-7f32-ab8d-c2c7c215cb17"
  • started_at"2026-10-07T16:57:40.649812Z"
  • monotonic_clock_ns878314747315333
  • stopped_at"2026-10-07T17:00:03.242880Z"
  • state"stopped"

A real session, captured on a MacBook. Nothing here is invented.

Your manifest can also be augmented with your own data:

plugin.py

# Tag each manifest on start with your backends user/rig identifiercapture.manifest.on_session_start(lambda s: s.attach("user.id", read_user_id())) # Tag session on stop with all earned rewards for this capturecapture.manifest.on_session_stop(lambda s: s.attach("rewards.earned", read_rig())) # Update rewards progress on mid-capture manifest refreshcapture.manifest.on_refresh(lambda s: s.attach("rewards.progress", read_rig()))

01Capture

Frames, inputs and audio, aligned at the source.

  • Our client records training ready data at capture time. Segmented and encoded for performance and efficiency.

  • Visuals, audio and inputs all temporally aligned to the machine's monotonic clock. Each frame encoded with the cause and effect.

  • Capture from multiple agents simultaneously, with each agent's capture aligned to the same timeline across machines.

  • One size rarely fits all. Tweak quality, FPS, segment length, cursor, audio and more to capture exactly what you need.

  • We gate our capture so nothing outside the capture target is ever recorded, so record and multi-task without worrying.

Recording
      • 000001.mkv7.1 MB
      • 000001.parquet9.4 KB
      • 000002.mkv3.7 MB
      • 000002.parquet4.9 KB
      • 000001.parquet11.6 KB
      • 000002.parquet5.6 KB
      • 000001.parquet3.2 KB
      • 000002.parquet1.8 KB
    • manifest.json12 KB

Modular and extensible build up of synced video and input data captured in realtime.

02Data

Everything you capture, queryable and enrichable.

  • Bucket storage with a powerful indexing layer on top, turning your captures into data queryable down to the frame.

  • Your captured data kept on-device or streamed to a storage backend in realtime, at intervals, every few megabytes or on session end, whatever works best.

  • Run periodic pre-built or custom enhancement jobs over your data so it keeps getting richer e.g. segmentation maps, text extraction, etc.

  • Access your data on your terms. Use our SDKs, APIs, or Viewer to tap into your information wherever and however you need it.

  • Explore your data-rich captures in our custom viewer, so you can analyse and review all your captures in one place.

03Scale

One machine, or a whole network of them.

  • We support every major platform and wrestle with their native capture APIs, so you can capture anywhere.

  • Know and understand your capturers for improved sourcing and attribution of your data back to your capturers.

  • We handle the storage, warehousing, temporal indexing and how you reach it all at scale, so you can focus on capturing.

  • Let us handle the storage complexities: performance, security and efficiency so you focus on capturing, or handle it yourself.

USE CASES

For Agents

Agents now have their own native screen recorder. They capture their demos, gameplay and computer use, unsupervised. Spawn a fleet and every one of them writes its own session.

Fleet4 recording
  • agent-01demo capture00:04:12
  • agent-02cyberpunk 207700:11:47
  • agent-03computer-use01:02:33
  • agent-04cyberpunk 207700:00:58

For Everyone Else

  • Data Collectors

    Building a data rich computer-use corpus, not just a folder of clips.

  • Auditing

    Capture how your agent works, audit it then use the data to improve it.

  • Game Studios

    Capture rich player gameplay within your game client to train better AI bots.

  • Teams

    Fine tune computer-use models on the way you and your team work.

GET STARTED

Choose your path

There's plenty of ways to get started, choose the one that works best for you or explore our SDK integration.

  1. Available on windows, apple, linux

    Private beta. Downloads open soon.

    Contact us for access
  2. Launch the desktop client and authenticate through your chosen OAuth provider.

  3. If you want to edit the default configurations, head over to the Settings panel, set your desired configuration and save your new profile.

  4. Select your display and window targets from the selector. Then it's as simple as pressing Start.

  5. End the recording by clicking the Stop button in the desktop app or the overlay.

Alternative route

SDK Integration

Run our headless capture daemon locally and embed capture logic into any app, game, or harness via our SDK or gRPC.

Read DocsSDKs for Rust, Python, Unity, Unreal Engine

FREQUENTLY ASKED QUESTIONS

Questions?

Feel free to to reach out and ask any questions.

Have any question? Get in touch.