Skip to main content
An export starts from selected events, not from every event in a Studio. Use Deep Search for a reviewed shortlist, or an exact taxonomy filter when you need every event already labeled with a value. Neither method proves that every occurrence in the source footage was detected.
include(matches) selects only the events returned by Deep Search, up to top_k. A capped query is not exhaustive. If you need all events already labeled robot_action=grasp, discover that field in taxonomy_schema(studio.id) and use:
The SDK fetches all exact-filter pages for that selection. The field and value above are examples; use your own Studio’s schema. An export requires at least one selected event.

Remove unwanted events or videos

Selections are immutable: each call returns a new selection. Removing one event leaves its sibling events from the same video selected; removing a video ID removes every currently selected event from that video.
You can re-include a previously excluded event. To resolve a text query on the server, use include(query="...") or exclude(query="..."); the SDK rejects query resolution if the deep reranker capped its results. Snapshot, caption, and legacy inline events cannot be exported as MCAP events; include() raises an error for them. Choose externalized events from the results instead.

What downloads

job.download(path) returns a dictionary containing output_dir, files, and manifest. The manifest is returned in memory; the downloaded directory has files such as:
The manifest’s selection lists event and video IDs retained after source revalidation; skipped_selection lists IDs no longer available. Its coverage contains a status per video, including failed session builds. events.jsonl retains normalized event IDs, source video and analysis IDs, timestamps, descriptions, and structured output when available. The download includes source media files alongside MCAP sessions for successfully built videos; source media is not merely a URL in the manifest. The SDK checks downloaded file sizes and SHA-256 hashes when provided. Compare selection.count() with the manifest’s selection, skipped_selection, and coverage before treating the export as complete. An index row alone is not proof that its video’s MCAP session built: inspect coverage for status="included".

Limits and recovery

The export request accepts at most 5,000 video IDs and 50,000 event IDs. It requires an eligible paid, sponsored, or enterprise plan, an API key with write or datasets:write scope, and an enabled export service. The job may finish as completed_with_gaps if some selected items were skipped or sessions failed. Source changes between selection and export can produce such gaps. If job.wait() times out, keep job.id and call job.refresh() or job.wait() again; do not start a duplicate job solely because the local wait timed out. If a job fails, inspect its error, correct the source or selection, and submit a new export. Signed download URLs expire; use client.refresh_dataset_export_urls(job.id) before retrying a download with expired URLs.