Gameplay data for world models and frontier AI.

Build datasets that connect what a model sees with the actions and game state behind it. iliAD captures gameplay video, camera pose, player inputs and engine signals on a shared frame index for world-model training and evaluation.

Inspect a capture, then scope the titles, mechanics, modalities and volume your team needs.

Capture support: Unreal Engine 5.6 and newer · Unity 6 LTS and newer.

Explore a sample

Pre-HUD RGB · Post-HUD RGB · Depth · Surface normals

new hours per week
10k
new hours per week
frames per week
≈2.16bn
frames per week
visual streams
4
visual streams
input records per week
≈6.5bn
input records per week

Weekly capture target. Frames estimated at 60 FPS; input volume extrapolated from the Parkour Race evaluation capture. Input rates vary by title.

Evaluate a sample

Internal test capture · Recorded 2026-10-16T16:57:17.852Z · click a view to enlarge it

Explore Parkour Race frame by frame. View RGB, depth and surface normals alongside camera pose, player inputs and engine events, then download the telemetry to test the joins in your own pipeline.

Parkour Race test capture:
capture
1
capture
frames
…
frames
visual streams
…
visual streams
input records
…
input records
Post-HUDNot included in this sample
00:00.00 / 00:00.02
Frame 0 / 0
No audio

Loading telemetry…

Keys: Space play/pause · ← → step a frame · Shift+← → one second · F full screen · Esc all views

Loading telemetry…

What's captured

Visual, action and state data on one frame index.

Evaluate the signals your training pipeline needs, from rendered observations and geometry to player inputs and engine-recorded events.

This sample documents pre-HUD RGB, depth and normals. Post-HUD RGB is part of the proposed four-stream offering and isn't included in this capture. No audio is included.

Pre-HUD RGB1920×1080 source · H.264
Rendered observations after tonemapping, before FXAA and HUD overlays. Inspect scene content without the game interface.
Depth960×540 source · 16-bit log · lossless FFV1
Per-pixel planar depth with a documented conversion to centimetres. Use the lossless source for geometry supervision and reprojection checks.
Surface normals960×540 source · 10-bit · world space · lossless FFV1
World-space surface orientation from the engine's G-buffer, paired with the corresponding RGB and depth frames.
Camera posePer frame · recorded position, rotation, FOV and intrinsics
Per-frame position, rotation, field of view and intrinsics. Relate image observations to camera motion and the game coordinate system.
Player inputsRaw keys, clicks, mouse deltas · per-frame key mask
Raw keyboard and mouse records, capture timestamps and the first frame each input can affect. Per-frame held-key masks provide the input state alongside each observation.
Enhanced Input actionsMovement, look and jump · mapped control values
Engine-mapped action values for movement, jumping and look controls. Inspect the control signals the game receives after input mapping.
Game state and eventsMovement mode, velocity, walk speed, crouch · engine events
Engine-recorded jumps, landings, movement modes, velocity and character state. Inspect the state and event labels alongside each frame.

Dataset guide

Parkour Race capture

Review the session schema, file structure, frame joins and QA before integrating the data into your evaluation pipeline.

Status
Internal test capture
Recorded
2026-10-16T16:57:17.852Z
Session
…
Schema
…

01

Overview

The selected gameplay session and its available video, input, camera, state and event records.

Parkour and traversal across … shared frame positions. RGB, depth and surface normals are paired with camera pose, the values behind movement, look and jump controls, and recorded character-state changes. Inputs and engine events let you inspect what happened alongside each observation.

Project and map
unavailable
Engine
unavailable
Recorded
2026-10-16T16:57:17.852Z
Capture and preparation tooling
unavailable
Rights
Not supplied for this sample. The displayed package grants no training or redistribution rights.

Loading manifest provenance.

02

Get started

Download the telemetry tables and inspect the frame joins in Python.

  1. 1. Download the telemetry sample

    Original converter-produced tables supplied with the capture. The ZIP contains the unchanged source manifest, original converter QA, the preparation report, notes and three Parquet tables.

    Download telemetry-sample.zip (≈518 KiB)
    • Session manifest · JSON · supplied capture manifest; streams, clock and documented conventions
    • QA report · JSON · preparation validation, not a converter certificate
    • Preparation report · JSON · preview preparation and table provenance, separate from source QA

    The lossless depth and normals files and the full-resolution RGB aren't hosted here. Ask if you need them for evaluation.

  2. 2. Unzip it

    manifest.json · unchanged source manifest · qa.json · original converter report · preparation.json · web preparation report · PREPARATION.txt · preparation notes · tables/frames.parquet · original converter table · tables/input_raw.parquet · original converter table · tables/events.parquet · original converter table

  3. 3. Read the first rows

    With pyarrow and pandas installed, this reads the frames table.

    first_rows.py
    import pyarrow.parquet as pq
    
    frames = pq.read_table("tables/frames.parquet").to_pandas()
    print(len(frames), "frames")                     # …
    print(frames[["frame_idx", "t_ns", "cam_pos_x", "cam_pos_y", "cam_pos_z"]].head())
    Full example: read all three tables and join them on frame
    quickstart.py
    import pyarrow.parquet as pq
    
    frames = pq.read_table("tables/frames.parquet").to_pandas()
    inputs = pq.read_table("tables/input_raw.parquet").to_pandas()
    events = pq.read_table("tables/events.parquet").to_pandas()
    
    print(len(frames), "frames")                     # …
    print(frames[["frame_idx", "t_ns", "cam_pos_x", "cam_pos_y", "cam_pos_z"]].head())
    
    # Join observations by frame index, never elapsed time.
    # Preserve source boundary events N; these have no matching frame row.
    aligned_events = events.merge(frames[["frame_idx", "t_ns"]],
        on="frame_idx", how="left", suffixes=("_event", "_frame"))
    aligned_inputs = inputs.merge(frames[["frame_idx"]],
        left_on="frame_next", right_on="frame_idx", how="left")
    print(aligned_events.head(), aligned_inputs.head(), sep="\n")

03

File structure

Supplied source files and the separate evaluation package for the selected sample.

session_…/
session_…/

Supplied source files
manifest.json · original capture manifest, unchanged
qa.json · original converter report
depth/depth.mkv · supplied source media
normals/normals.mkv · supplied source media
video/prehud.mp4 · supplied source media
raw/frames.jsonl · supplied raw telemetry
raw/input_raw.jsonl · supplied raw telemetry
raw/events.jsonl · supplied raw telemetry
raw/streams.jsonl · supplied raw telemetry
tables/events.parquet · original converter table
tables/frames.parquet · original converter table
tables/input_raw.parquet · original converter table

Evaluation package
manifest.json · unchanged source manifest
qa.json · original converter report
preparation.json · web preparation report
PREPARATION.txt · preparation notes
tables/frames.parquet · original converter table
tables/input_raw.parquet · original converter table
tables/events.parquet · original converter table

04

Data reference

How frames and timestamps relate, how to decode the visual streams and what a real record looks like.

Join on frame, never on time.

Media frame N is frames[N], or frame_idx = N in Parquet. Events carry the frame they happened on. Inputs carry frame_next, the first frame they could affect.

Frame alignment and playback time

Every stream shares the same frame index. This preview plays at 60 FPS; the original capture timestamps preserve the game's timing. Use frame numbers to match video with telemetry.

Media time
The preview video's clock: … frames at a constant 60 FPS, so … seconds.
Capture time
The game's own clock, which ran for … seconds because real frames weren't evenly spaced.

From a media timestamp:

N = floor(mediaTime × 60)

Don't seek video by capture time, and don't scale by the duration ratio.

Decoding and conventions

Use the selected manifest's documented stream encodings, decode formulas and coordinate conventions. Unspecified conventions are unavailable.

The videos on this page are downscaled, lossy previews. The depth preview shows the log codes as greyscale, so it's a picture of depth rather than depth values. Use the lossless source files for anything numerical.

Real records

Available records exactly as they appear in the selected sample. Use the arrow keys to move between tabs.

Loading records…

05

Capture quality and validation

Review the evidence behind the observations, geometry and actions your model will learn from.

Source capture checks

Loading the source converter report…

Preview preparation

Loading preview preparation checks… Separate preparation checks verify preview frame counts and source mapping. The original manifest, converter QA and Parquet tables remain unchanged. At missing RGB positions, the preview holds the previous recorded image; availability flags and hold provenance retain the distinction.

How it was captured

An engine plugin records viewport images, camera pose, player inputs, mapped actions and available state and events on a shared frame index. Depth and surface normals are captured from the engine's rendering buffers. The supplied manifest documents the stream encodings, camera conventions and coordinate system.

Sample scope

  • One Parkour Race evaluation capture.
  • No audio or post-HUD RGB in this sample.
  • Downscaled, lossy web previews; use original visual files for numerical work.
  • Missing RGB captures are explicit in source availability and preview hold provenance.
  • Not supplied for this sample. The displayed package grants no training or redistribution rights.

Dataset requirements

Scope the dataset your team needs.

Tell us what your model needs to observe and do. We'll scope the titles, mechanics, signals, target hours and delivery schedule around your requirements.

For data partners and brokers, include any redistribution or sublicensing requirements.

FAQ

Questions about acquiring iliAD data

From evaluating a sample to scoping a recurring dataset.