BuildAI
The standard API for egocentric data. $1/hr.
Quickstart
pip install buildai-data
from buildai import BuildAI
client = BuildAI(api_key="build_data_xxxx")
client.download(hours=10, output_dir="./data")
That's it. Ten shards download to ./data/. Each shard is one hour of egocentric video with frame-synced IMU data.
What you get
Each shard is a tar file containing 20 three-minute clips:
shard-000001.tar
├── 000001.mp4 # H.265, 1080p, 30fps, no audio
├── 000001.imu.npy # (5400, 6) float32, frame-synced
├── 000002.mp4
├── 000002.imu.npy
└── ... # 20 clips total
Video: H.265, 1080p, 30fps, no audio. Three minutes per clip.
IMU: NumPy array, shape (5400, 6), float32. Columns: [acc_x, acc_y, acc_z, gyro_x, gyro_y, gyro_z]. Row N = frame N (30 fps x 180 seconds = 5400 frames). Units: accelerometer in m/s2, gyroscope in rad/s.
Shard size: ~2 GB per shard, ~1 hour of footage, 20 clips.
Shards are standard WebDataset format. If you already have a WebDataset pipeline, point it at the downloaded tars directly.
Download
from buildai import BuildAI
client = BuildAI(api_key="build_data_xxxx")
# Download 100 hours of data
client.download(hours=100, output_dir="/data/buildai/")
# Download more - you'll get new shards you haven't seen before
client.download(hours=1000, output_dir="/data/buildai/")
Every call gets new shards. You never receive the same shard twice. Shards are downloaded sequentially. Every researcher gets the same sequence.
For a named research grant, pass the dataset from your award onboarding email:
client.download(
dataset="buildai-research-100k",
grant="jhu-egocentric-2026",
hours=100,
output_dir="/data/buildai-research/",
)
Granted downloads are bounded by the award's expiry, hour cap, and frozen
logical-hour inventory. Each hour is materialized as a directory containing 20
.mp4 / .imu.txt pairs. Opaque proxy URLs expire after one hour; Build AI
bucket, factory/worker, and source-filename identities are never shared with
the researcher. Granted hours are not billed to the researcher's account. The
SDK checks both the byte size and MD5 of every video and IMU file before
acknowledging the hour.
Download the source-free Parquet index independently when a dataframe is the more convenient starting point:
client.download_manifest(
dataset="buildai-research-100k",
grant="jhu-egocentric-2026",
output_path="./buildai-research-100k.parquet",
)
Downloads resume on failure. If a shard already exists locally and the checksum matches, it's skipped. For a granted download, the SDK keeps the same server reservation until every allocated hour is acknowledged and raises an error on any incomplete page or failed acknowledgement, so batch jobs cannot silently treat a partial transfer as success. Re-run the same call with the same output directory to resume it.
| Parameter | Default | Description |
|---|---|---|
hours |
required | Number of one-hour units to download |
output_dir |
./buildai-data |
Where to save shard tars or granted hour directories |
dataset |
None | Named dataset grant, when provided by Build AI |
grant |
None | Isolated research-grant tenant slug from onboarding |
workers |
8 | Parallel download threads |
verify_checksum |
True | SHA-256 verification after download |
Visualize
from buildai import BuildAI
BuildAI.visualize(source="/data/buildai/")
Opens a local web viewer in your browser. Shows a grid of all clips across your downloaded shards. Click any clip to watch the video with accelerometer and gyroscope data graphed below, time-synced.
No data is uploaded. Everything runs locally. Press Ctrl+C to stop.
No API key needed. visualize is a static method that works on any directory of shard tars.
Pricing
$1 per hour. Billed monthly. No minimum, no commitment.
API key
Get your API key at build.ai. You can also set it via environment variable:
export BUILDAI_API_KEY=build_data_xxxx
# Picks up BUILDAI_API_KEY automatically
client = BuildAI()
Account
info = client.account
print(info["total_hours"])
print(info["total_spent_usd"])
print(info["shards_remaining"])
Requirements
- Python 3.10+
- httpx (HTTP client)
- numpy (IMU data)
Metadata
Release files for buildai-data 0.4.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| buildai_data-0.4.2.tar.gz | 173.2 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| buildai_data-0.4.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 196.1 kB
Release files / buildai_data-0.4.2.tar.gz
| Download URL | buildai_data-0.4.2.tar.gz |
|---|---|
| Size | 173.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
34c18887eaa178084dbe3139ceb356326ecdec4fccae19c72d3e174df491086e
|
|
BLAKE2b-256 checksum How to use checksums |
32036569e21e78eaf615230adda3383e7d2d5bdafb41d1c76626ad9434e2f8fe
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Release files / buildai_data-0.4.2-py3-none-any.whl
| Download URL | buildai_data-0.4.2-py3-none-any.whl |
|---|---|
| Size | 22.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cb8002323e4ed4bb269c4060fb2742e119a45680b83cbd593d7492ce166abd0c
|
|
BLAKE2b-256 checksum How to use checksums |
cb92b2f58a66b7d2b88f321ce9757a95056c8249d5fbf54005e2cc40b2d5510d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Security for buildai-data 0.4.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.