Dataset card · PermaVid-sourced · static-scene multi-trajectory video

78 real Unreal-Engine scenes, twenty diverse camera paths each.

A curated corpus of 1,527 photorealistic video clips drawn from PermaVid. Each Unreal-Engine environment supplies dozens of real captured camera trajectories; we keep the twenty most diverse per scene by farthest-point sampling, standardised to PermaVid’s exact training pose convention. Every clip carries ground-truth per-frame camera poses, intrinsics and depth — the long-horizon 1000-frame path is the raw asset.

scenes
78
UE environments
clips
1,527
≈ 20 trajectories / scene
frames
1.53M
1000 per clip
footage
21.2 h
50 s per clip @ 20 fps
resolution
832×480
90° pinhole · fx=fy=416
poses
bit-exact
world→camera, GT depth

Companion to the AI2-THOR–rendered spear_scene_dataset (150 scenes). SPEAR itself would not build on this cluster, so this version curates real PermaVid trajectories rather than rendering new ones — same 832×480 / 90° intrinsic, co-trainable.

at a glance

One frame from every scene

The middle frame of each scene’s first curated clip — a single sweep across the whole corpus.

one preview frame per scene
01

Composition

Every scene is tagged with one of six coarse types. Clips are unevenly distributed because scenes differ in how many trajectory episodes PermaVid captured.

scene types

Clips per scene type

UrbanNatureInteriorHistoricalIndustrialOther
0.00 200 400 Urban 379 clips · 19 scenes Nature 362 clips · 19 scenes Interior 286 clips · 15 scenes Historical 240 clips · 12 scenes Industrial 220 clips · 11 scenes Other 40 clips · 2 scenes
Urban · 19 scenes · 379 clips

Streets, plazas, cities, transit, waterfront towns.

Nature · 19 scenes · 362 clips

Terrain, deserts, forests, gardens, caves, snow.

Interior · 15 scenes · 286 clips

Indoor spaces: halls, corridors, garages, rooms.

Historical · 12 scenes · 240 clips

Ruins, castles, temples, medieval and period sites.

Industrial · 11 scenes · 220 clips

Factories, plants, hangars, yards, sci-fi facilities.

Other · 2 scenes · 40 clips

Mixed / hard-to-bucket modular environments.

02

Statistics

Curation depth and the geometric character of the selected camera paths, computed from manifest.parquet (1,527 clips). Bars are hoverable.

curation

How deep was each pool?

For every scene we start from all of PermaVid’s captured trajectory episodes, then keep the T = 20 most diverse by farthest-point sampling. Median pool is 46 episodes.

0 7 14 21 28 1 5 1 10 5 15 5 20 3 25 7 30 8 35 7 40 15 45 26 50 50 median 46 episodes available per scene (curation pool)
honesty

7 scenes fall short of T = 20

The target is 20 trajectories per scene, but a handful of environments simply do not have 20 usable episodes. We keep the full pool rather than pad — the dataset is capped by what PermaVid captured.

scenetypepoolTmin-div
HospitalInterior15150.68
InteriorDemo_NEWInterior19191.90
OperaHouseInterior19192.55
OperatingRoomInterior13131.57
Eastern_GardenNature771.26
RainMapNature15152.00
TemplePlazaUrban19191.50

71 / 78 scenes reach the full T = 20 · 0 clips failed QA (all 1,527 pass).

trajectory descriptors

What the camera paths look like

Distribution across all 1,527 clips of the geometric descriptors used to score diversity. Heavy-tailed quantities (path length, footprint, height, speed) are shown on a log axis; the amber line marks the median. A few near-aerial fly-throughs stretch the tails to kilometre scale.

Path length m · log med 74 9.3 200 4,332
Footprint area m² · log med 183 0.06 7.5 917
Height range m · log med 0.45 0.02 9.3 4,329
Mean speed m/s · log med 1.5 0.19 4.0 87
Yaw sweep ° med 1,410 443 3,490 6,536
Straightness 0–1 med 0.14 0.00 0.50 1.0
selection quality

Per-scene trajectory diversity

Each dot is one scene, placed by its minimum pairwise diversity — the closest any two of its kept trajectories get in descriptor space. Higher is better. Hollow rings are the 7 reduced-T scenes. Hover a dot for the scene.

UrbanNatureInteriorHistoricalIndustrialOther
0 1 2 3 4 median 2.49 Urban (19) Nature (19) Interior (15) Historical (12) Industrial (11) Other (2) min pairwise trajectory diversity (higher = more varied camera paths)
03

Anatomy of a clip

Every clip is a folder: an RGB video plus per-frame ground-truth geometry, in PermaVid’s own verified convention. Poses were validated bit-identical (round-trip error 2.4e-7) against PermaVid’s training reader.

example

AncientRuins · traj_00_ep13

frame 500 / 1000
RGB frame
video.mp4 RGB · 832×480 · 20 fps · lossless stream-copy of PermaVid rgb.mp4
depth frame (colourised)
depth.mp4 depth · 8-bit relative, colourised here (Inferno) — ordinal, not metric
poses.npy (1000, 7)
world→camera · row = [tx ty tz | qx qy qz qw]
frame 0  t = [+33.402, +217.552, +52.170]
         q = [+0.670, +0.227, +0.227, -0.670]  (xyzw)
R_w2c = Rotation.from_quat(q).as_matrix() · camera centre = −Rᵀt
intrinsics.npy (1000, 4)
normalised · [fx/W, fy/H, cx/W, cy/H] · constant per clip
norm = [0.5000, 0.8667, 0.5000, 0.5000]
K    = fx=416  fy=416  cx=416  cy=240
832×480 → hFOV 90.0° · vFOV 60.0° (PermaVid CineCamera default; pose.json carries no focal length)

Verified camera convention

  • poses.npy = world→camera. Bit-identical to what PermaVid’s reader (quaternion_to_w2c) consumes from the raw pose.json.
  • c2w axis frame is [right, up, forward] in a UE left-handed world (X-fwd, Y-right, Z-up) — up → camera +y. Not OpenCV.
  • For a right-handed OpenCV c2w: c2w_cv = diag(1,1,−1,1)·c2w·diag(1,−1,1,1) (flip world-Z on the point cloud too).
  • Windowing is a pure slice: an N-frame window from frame i uses poses[i:i+N], intrinsics[i:i+N] and decodes frames [i, i+N) — no re-encode, poses stay exact. PermaVid trains on 81-frame windows.
PermaVid camera-path render
campose.png PermaVid’s own camera-trajectory render, shipped per clip
06

Provenance & layout

What ships, where it lives, and what to be careful about.

deliverable layout

Directory tree

dataset/
  <Scene>/traj_<ii>_ep<k>/
      video.mp4        # RGB · 1000f @ 20fps · 832×480
      depth.mp4        # 8-bit relative depth (non-metric)
      poses.npy        # (nf,7) world→camera  [t | quat xyzw]
      intrinsics.npy   # (nf,4) normalised, constant per clip
      poses.json       # K, FOV, descriptor, prompt, provenance
      preview.jpg      # middle frame
      campose.png      # PermaVid camera-path render
  <Scene>/diversity.json         # selection report + marginal gains
  manifest.parquet / .csv   # one row / clip · 47 columns
  scenes.parquet            # one row / scene
  splits.json               # scene-level train / val
  contact_sheets/           # per-scene grids + overview
  README.md · qa_report.md
honesty notes

Read before use

  • Depth is relative. depth.mp4 is 8-bit, ~15–20 grey levels/frame, lossy H.264 — ordinal, not metric, not 16-bit. depth_format = mp4_8bit_grayscale_nonmetric.
  • 78-scene ceiling. PermaVid ships ~78 usable UE environments with archives; that is the hard cap. 7 scenes have fewer than 20 usable trajectories.
  • Intrinsics are a reader default. 90° hFOV / 60° vFOV is PermaVid’s default CineCamera pinhole — pose.json carries no focal length, so this is the convention, not a measured value.
  • Native 20 fps. Relabelling to 16 fps is an apparent-speed change — document it, don’t resample.
  • QA-clean. All 1,527 clips pass the QA gates (pose finiteness, frame count, decodability).
Source & attribution. Curated from the PermaVid dataset (ysmikey/PermaVid_datasets, arXiv:2606.16449, gated). RGB is a lossless stream-copy of PermaVid’s rgb.mp4; poses/intrinsics are re-expressed in PermaVid’s own training convention, validated bit-identical to its reader. Redistribute under PermaVid’s terms.