Spaces:
Running on A100
A newer version of the Gradio SDK is available: 6.21.0
title: Orbis 2 — Hierarchical World Model Rollout Demo
emoji: 🚗
colorFrom: indigo
colorTo: gray
sdk: gradio
sdk_version: 5.9.1
app_file: app2.py
pinned: false
license: mit
Orbis 2: A Hierarchical World Model for Driving
Upload a short driving mp4 → the model takes the tail of the clip as context → rolls out several plausible futures → returns them as videos.
This Space runs Orbis 2, the hierarchical L1–L2 model (app2.py). The previous
single-level Orbis 1 demo is still in the repo as app.py; switch app_file above
to serve it instead. A Space runs exactly one entrypoint.
How it works
Orbis 2 splits prediction across two levels of abstraction:
- L2 — abstract predictor. Sees a long, low-rate context window and forecasts a future scene state in latent space (long-horizon dynamics, steering).
- L1 — detail predictor. Conditioned on the L2 forecast, generates fine-grained high-rate frames, so local fidelity stays grounded in long-range context.
A shared tokenizer encodes frames to (and decodes them from) latents.
Pipeline. The uploaded clip is re-encoded to a constant 10 fps — the rollout
script requires the video's native frame rate to be an exact integer multiple of the
L1/L2 sampling rates. It then samples the L1 window at 10 Hz and the L2 window
further back at the frozen L2 predictor's own trained rate (2 Hz), resizing to
288×512. Frames are generated autoregressively; NUM_VIDEOS futures are rolled out
from the same context in a single minibatch, each with independently drawn
initial noise, so they diverge.
Note the clip must be long enough to cover the L2 look-back window — short clips are rejected with an explicit error.
Models
The three checkpoints (~20 GB total) are not in this repo. They live on the Hub
at sud0301/orbis2_test, laid out as:
L1/ config_distill.yaml + checkpoints/last.ckpt # detail predictor
L2/ config.yaml + checkpoints/last.ckpt # abstract predictor (frozen)
tok/ config.yaml + checkpoints/last.ckpt # tokenizer (shared by L1 and L2)
app2.py downloads them at startup into the HF cache and exports
$ORBIS2_MODELS_DIR, which L1's and L2's configs expand to locate their
dependencies (L1→tok, L1→L2, L2→tok). It uses the cache path directly rather than
copying into the Space, so the weights are stored once.
Setup
Persistent storage. Enable it in Space settings so the ~20 GB download lands on
/dataand survives restarts. Without it the cache is ephemeral and the models are re-fetched on every cold start.HF_TOKENsecret. Required whilesud0301/orbis2_testis a private repo — otherwise the startup download 401s. Add it under Settings → Variables and secrets;huggingface_hubpicks it up automatically. Not needed if the model repo is public.Hardware. ZeroGPU works for short rollouts (keep Rollout steps low; the
@spaces.GPUbudget is 300 s). Use an L40S/A100 for long-horizon rollouts.
Environment variables
| Variable | Default | Purpose |
|---|---|---|
ORBIS2_HF_REPO |
sud0301/orbis2_test |
Hub repo holding L1/, L2/, tok/ |
ORBIS2_MODELS_DIR |
./models |
Use a local model tree instead of downloading |
HF_TOKEN |
— | Needed while the model repo is private |
Point ORBIS2_MODELS_DIR at a complete local tree to skip the Hub entirely — useful
for running against a training run on a GPU box.
Controls
- Rollout steps — autoregressive steps. Each emits
num_pred_frames(5) image frames, so the output clip is longer than the step count. - Diffusion steps — flow-matching solver steps per frame.
- Seed (Advanced) —
-1draws a fresh seed each run; set it to reproduce a run. - Eta (Advanced) —
0is the deterministic ODE;>0injects noise per step (SDE).