.. SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
.. SPDX-License-Identifier: Apache-2.0
..
.. Licensed under the Apache License, Version 2.0 (the "License");
.. you may not use this file except in compliance with the License.
.. You may obtain a copy of the License at
..
.. http://www.apache.org/licenses/LICENSE-2.0
..
.. Unless required by applicable law or agreed to in writing, software
.. distributed under the License is distributed on an "AS IS" BASIS,
.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
.. See the License for the specific language governing permissions and
.. limitations under the License.

SIL-Wheel
=========

SIL-Wheel is a research system for searching, annotating, curating, and
evaluating video data at scale. It is designed for model development workflows
in which data curation, annotation, benchmarking, and evaluation must work
together rather than live in disconnected tools.

For large-scale video model development, progress depends not only on having
more data, but on being able to quickly find, validate, and evaluate the right
data. Wheel organizes these workflows around a shared clip-centric
system, allowing users to move seamlessly from finding data, to
validating or labeling it, to measuring model performance on that data, and
finally to using those findings to guide the next round of data collection or
benchmark design. This closed-loop workflow is central to how Wheel is intended
to be used.

Wheel is intended for researchers and engineers developing video-centric models
who need to search large datasets, curate targeted slices, annotate examples,
and evaluate models on the resulting data.

A typical workflow in Wheel is: search for a scenario of interest, curate or
label the resulting clips, turn the slice into a benchmark or training set,
evaluate models on that slice, and use the results to guide the next round of
curation, model development and benchmark design.

The main differences between SIL-Wheel and other data tools are:

  - **Built for research iteration, not just data throughput**: Most data tools
    focus on operational workflows such as data loading and preprocessing.
    Wheel is designed to help users identify failure modes, construct targeted
    data slices, and improve models.
  - **Extensible within a stable framework**: Wheel makes it easy to add new
    retrieval, labeling, and evaluation capabilities without rebuilding the
    system. It is more flexible than rigid products, while remaining more
    coherent than a loose collection of scripts.
  - **Unified loop instead of disconnected tools**: Search, annotation,
    curation, benchmarking, and analysis all happen within the same system.
    This makes the full loop from data discovery to model evaluation faster and
    more systematic.
  - **Model evaluation is a first-class part of the system**: Wheel does not
    stop at data discovery. Retrieved or curated slices can directly become
    benchmarks or leaderboard subsets for systematic model evaluation.

Getting Started
---------------

SIL-Wheel goes from a fresh checkout to a fully-loaded UI with a single setup
script. Each script runs the complete preprocessing pipeline (video
compression, captions, caption and video embeddings, trajectories, and FAISS
indexes) and launches the server with every search modality populated. Two
public datasets work out of the box.

Prerequisites: the ``wheel`` conda env (see the README), ``ffmpeg``, and a CUDA
GPU (developed on a single RTX 4090) with ~15 GB of free disk. On a smaller or
absent GPU, pass ``--skip-cosmos``, ``--skip-captions``,
``--skip-caption-embeddings``, and/or ``--skip-visual-embeddings``; the server
still boots and those modalities just return empty results.

`nuScenes <https://github.com/nv-tlabs/sil-wheel/tree/main/examples/getting-started-nuscenes>`__ (public mini split, no dataset access required):

.. code-block:: bash

   # Download the mini split and run every preprocessing stage into ./wheel-data
   python examples/getting-started-nuscenes/setup_nuscenes.py \
       --workdir ./wheel-data --admin-password admin

   # Start the server from the config.yaml the setup script just wrote
   python scripts/launch_server.py wheel-data/config.yaml

`Physical AI Autonomous Vehicles <https://github.com/nv-tlabs/sil-wheel/tree/main/examples/getting-started-physical-ai-autonomous-vehicles>`__ (NVIDIA's dataset, streamed from HuggingFace):

.. code-block:: bash

   python examples/getting-started-physical-ai-autonomous-vehicles/setup_physical_ai.py \
       --workdir ./wheel-data-physical-ai \
       --camera camera_front_wide_120fov \
       --max-clips 500 \
       --admin-password admin

   # Start the server from the config.yaml the setup script just wrote
   python scripts/launch_server.py wheel-data-physical-ai/config.yaml

``--max-clips`` names a clip budget and pulls whole chunks from 0 until it is
met. Use ``--chunks`` instead to name the chunks yourself. The two cannot be
combined.

Open the printed URL and log in (the setup script creates an ``admin`` /
``admin`` user by default). See :doc:`deployment` for the full walkthrough.

.. raw:: html

   <video width="100%" controls style="margin-bottom: 1em;">
     <source src="_static/videos/physical_ai_demo.mp4" type="video/mp4">
   </video>

Key Capabilities
----------------

**Multimodal Search**
   Wheel supports composable retrieval across multiple modalities, making it
   possible to surface complex scenarios that no single query could express.
   Available retrieval modes include keyword search over captions, semantic
   retrieval using text-to-video embeddings conditioned on either text or
   video, frame-level visual matching conditioned on text or images, search
   based on ego-trajectory shape or statistics such as curvature or jerk, and
   structured metadata filters. See :doc:`search/index`.

**Annotation and Auto-labeling**
   Wheel supports per-clip annotation directly from the browser, making it
   possible to build high-quality datasets efficiently. Users can annotate the
   timing of an event as well as its value when the annotation is numeric.
   Users can also auto-label an entire retrieved slice in one click, manage
   labels at scale through rename, merge, delete, and mass-label operations,
   and upload annotations from external sources. See :doc:`annotation`.

**Slice-based Evaluation**
   Wheel supports project-specific leaderboards for computing metrics on
   selected data slices. It currently supports evaluation workflows for video
   generative models, VLMs, and driving policies. Retrieved results can be
   turned directly into benchmarks, and models can be evaluated on arbitrary
   slices of data because the same search APIs are exposed within evaluation.
   Users can upload leaderboards for different model families and evaluate all
   models in a leaderboard on any slice of data. In addition, Wheel provides
   an Arena that supports anonymous pairwise preference comparisons with
   Glicko-2 scoring. See :doc:`evaluation/index`.

**Natural-language agent**
   Wheel includes a standalone agent that translates plain-English queries
   into composed Wheel searches. This enables hard-example mining and
   failure-driven data collection without manual filter configuration. See
   :doc:`agent`.

**Power Features**
   Wheel supports multi-step workflows that combine search, annotation,
   classifier training, and evaluation into iterative loops. These include
   classifier bootstrapping to scale labels from a small number of examples to
   millions of clips, hard-example mining from leaderboard results, and
   failure-driven data collection. See :doc:`power_features`.

Usage
-----

After running the setup above, open the URL the server prints (by default
``http://127.0.0.1:8012/``) and log in with the admin account the setup script
created. Teams running a shared deployment can instead point users at that
server, where new accounts require admin approval.

Once logged in, users can search the video dataset using any combination of
search modes, inspect clips together with captions, trajectories, bird's-eye-
view visualizations, and annotations, label clips manually or auto-label an
entire result set, and evaluate model performance on arbitrary data slices
through the leaderboard.

.. figure:: /_static/images/wheel_overview.png
   :alt: Four clip cards each stacking the video, a metrics time series, a bird's-eye lane diagram and an ego trajectory plot

   The main interface with the metrics and BEV display options enabled, so each
   result shows its driving signals alongside the video.

The current search state is encoded in the URL hash. As a result, copying the
URL preserves all active search modes, filters, and parameters, making it easy
to bookmark a search or share it with a colleague. See :doc:`url_parameters`
for the full URL structure and the parameter that corresponds to each search
mode.

To run Wheel on your own dataset or to develop and test new features, see
:doc:`deployment`. It runs comfortably on a single desktop GPU (the reference
deployment uses one NVIDIA 4090), so it does not require expensive
infrastructure.

For scripting against Wheel from notebooks or batch jobs,
the same search pipeline is exposed through Python clients: a local
``WheelClient`` that runs the pipeline in-process and a remote
``WheelHTTPClient`` that talks to a running server. See
:doc:`programmatic_api`.

.. toctree::
   :maxdepth: 2
   :caption: Contents

   overview
   tutorials
   architecture
   search/index
   annotation
   evaluation/index
   agent
   power_features
   url_parameters
   programmatic_api
   deployment
   docs_assistant
