This supplementary material complements the main paper by providing full videos, technical details and additional results.
Teaser videos (extends fig. 1)
Here we show the full videos used to make fig. 1.
Llamas in a village
Tropical beach
Camera motion: Pitch from +80° to -80°, no translation.
Prompt:A quiet mountain village during snowfall as smoke rises from chimneys and lights glow along the snowy street. Many llamas are walking around in the street.
Camera motion: Roll from -90° to 90°, move forward by 8 meters.
Prompt:A tropical beach at sunrise with palm trees swaying gently while small waves roll onto the golden sand.
Extreme rotation handling (extends fig. 2)
Here we show the full video used to make the "backflip" rotation (with no translation) from fig. 2, along with two additional examples of that same motion. The input camera rotation is overlaid on top in dark gray. Notice how only our method achieves a full 360° looping rotation.
Ours
UCPE
PreciseCam+GEN3C
Prompt: A dramatic canyon landscape with towering red rock cliffs carved by a winding river far below, warm sunset light illuminating layered rock formations, sparse desert vegetation clinging to the edges of the cliffs, vast open sky with glowing clouds above the horizon, rugged stone textures and dry shrubs in the foreground, ultra-detailed, cinematic lighting, natural colors, photorealistic, 35mm photography, depth of field, high dynamic range
Ours
UCPE
PreciseCam+GEN3C
Prompt: A dining room with a long wooden table surrounded by chairs. A chandelier hangs above the table.
Ours
UCPE
PreciseCam+GEN3C
Prompt: A wide alpine meadow filled with bright wildflowers in bloom beneath towering snow-capped mountains, clear blue sky stretching above the peaks, a narrow stream winding gently through the grassy field, soft spring sunlight illuminating colorful flowers in the foreground, distant pine forests along the slopes, peaceful high-altitude landscape, ultra-detailed, cinematic lighting, natural colors, photorealistic, 35mm photography, depth of field, high dynamic range.
Translations and zooms
This example isolates translation and field-of-view changes. The 3D grid visualization is composited over the generated video: the white line represents the horizon, red grid lines indicate downward directions, blue grid lines indicate upward directions, and the camera moves within this 3D grid over time.
Prompt: A medieval harbor at sunset with tall ships docking, gulls circling overhead, sailors unloading barrels of spice while amber light glints off varnished wood and gentle waves lap against stone piers.
Camera pitch
Translation right (+x)
Translation down (+y)
Translation forward (+z)
Zoom-in FOV 100° to 30°
Zoom-out FOV 30° to 100°
Forward (0°)
Down (-90°)
Training set examples (extends sec. 4.1 and fig. 4)
Here we show training data samples, complementing fig. 4. Each sample displays the video alongside camera trajectory visualizations from three perspectives: top view, side view, and a 3D view.
The cameras are color-coded to represent their position in time: the first camera is purple and the last one is red.
To improve the speed of the panorama cropping pipeline used during dataset construction, we re-implemented functions from the
Skylibs library in PyTorch with CUDA support.
Caption: The video begins with a view of a cozy, eclectic shop filled with various vintage and rustic items. A statue of a Native American figure, adorned with a colorful blanket and a beaded necklace, stands prominently on the right. The shop is well-lit, with warm lights casting a welcoming glow on the brick walls and wooden furniture. A Christmas tree decorated with lights is visible in the background, adding a festive touch to the scene. The camera pans slightly to the left, revealing more of the shop's interior, which includes shelves with framed pictures, lamps, and assorted decorative pieces. The statue remains the focal point as the camera moves, capturing the shop's eclectic charm and the cozy atmosphere. Looking down, we see a person holding a phone in their hand.
Video
Null-pitch Video
Top View
Side View
3D View
Caption: People walk under an archway in a historic city square. Looking down, we see a person walking on a cobblestone path.
Video
Null-pitch Video
Top View
Side View
3D View
Caption: The video begins with a view of a modern, spacious living room featuring a sleek glass coffee table, a black floor lamp, and a brown sofa. The room is well-lit with natural light streaming through large windows, and a balcony with a white railing is visible above. In the background, a dining area with red chairs and a round table is partially visible. The camera slowly pans across the room, highlighting the minimalist decor and architectural details, including a large framed picture on the wall. As the camera moves, it reveals more of the room's features, such as a black spherical light fixture on the coffee table and a chessboard set on a stand. The video maintains a static view, focusing on the room's interior design and layout. Looking down, we see a glass bowl with apples on a table.
Video
Null-pitch Video
Top View
Side View
3D View
Caption: People walk on an escalator in a busy indoor setting. Looking down, we see a person with a backpack on an escalator.
Video
Null-pitch Video
Top View
Side View
3D View
Caption: Yellow aircraft with "REINO DE ESPAÑA 43032" flies over a rocky landscape.
Video
Null-pitch Video
Top View
Side View
3D View
Caption: The video begins with a view of a wooden boardwalk alongside a river, where a tall ship with multiple masts is docked. The scene transitions to a bridge with cables, leading to a cityscape with modern buildings under a clear blue sky. The camera moves forward, capturing the river's surface and the bridge's structure. The view shifts to the riverbank, featuring a red brick building with a waterfront restaurant and a crane in the background. A person walks on the boardwalk, and the camera follows them, maintaining the focus on the river and the urban environment. Looking down, we see a person walking on a wooden deck while holding a phone.
Video
Null-pitch Video
Top View
Side View
3D View
Caption: A serene underwater scene unfolds, showcasing a vibrant coral reef bathed in the soft light of the ocean surface. The camera pans gently over the reef, highlighting its diverse textures and colors, with sunlight filtering through the water, creating a tranquil and ethereal atmosphere.
Video
Null-pitch Video
Top View
Side View
3D View
Caption: The video captures a vibrant outdoor scene at a flower garden on a sunny day. A wide path runs through the garden, bordered by rows of red and purple flowers. People are scattered throughout the area, some walking along the path, while others gather in groups to admire the flowers. In the background, a cityscape with tall buildings is visible under a clear blue sky. A kite is flying in the sky, adding to the leisurely atmosphere. The camera moves along the path, providing a panoramic view of the garden and its visitors. Looking down, we see a person walking on a path surrounded by red and purple flowers.
Video
Null-pitch Video
Top View
Side View
3D View
Caption: Paragliding over a vast desert landscape with mountains in the distance.
Video
Null-pitch Video
Top View
Side View
3D View
Full definition of $\varphi(\cdot)$ and $\psi(\cdot)$ (extends eq. 4)
Obtaining absolute camera poses
For completeness, here we repeat equation 4, which computes the absolute camera extrinsics:
$$
\begin{gather}
\mathbf{t}_{\text{abs},f} = \psi(\mathbf{\tilde{u}}_0)\mathbf{t}_{\text{rel},f} \nonumber \\
\mathbf{R}_{\text{abs},f} = \mathbf{R}_{\text{pano},f} \psi(\mathbf{\tilde{u}}_0)\mathbf{R}_{\text{rel},f} \\
\mathbf{E}_{\text{abs},f} = \varphi(\mathbf{R}_{\text{pano},0}) [\mathbf{R}_{\text{abs},f}|\mathbf{t}_{\text{abs},f} ] \;, \nonumber
\end{gather}
$$
where $\mathbf{\tilde{u}}_0$ corresponds to the average up vector of the first frame, $\mathbf{R}_{\text{pano},f}$ corresponds to the sampled camera rotation for frame $f$
and $\mathbf{t}_{\text{rel},f}$ and $\mathbf{R}_{\text{rel},f}$ are the translational and rotational components of the relative camera poses, respectively, and are derived from SfM.
We now precisely define the function $\psi(\cdot)$, which aligns camera poses to gravity, and $\varphi(\cdot)$, which rotates the poses so that the yaw is null for the first frame.
Definition of the gravity alignment function $\psi(\cdot)$
We first compute the average gravity up vector $\mathbf{\tilde{u}}_0$, normalized to unit length.
We then obtain a full gravity alignment rotation matrix $\psi(\mathbf{\tilde{u}}_0)$ by computing the forward and right vectors much as when computing a LookAt matrix (fixing the up vector instead of the forward vector).
We show the full derivation below.
$$\begin{align*}
\mathbf{d} &\gets -\mathbf{\tilde{u}}_0 && \text{
$\triangleright$ Compute the down direction vector $\mathbf{d}$ in camera space.
} \\
\mathbf{r} &\gets \mathbf{d} \times [0~0~1]^\top && \text{
$\triangleright$ Compute the right direction $\mathbf{r}$ vector using the down and temporary forward vector.
} \\
\mathbf{r} &\gets \frac{\mathbf{r}}{\|\mathbf{r}\|} && \text{
$\triangleright$ Normalize the right direction vector $\mathbf{r}$.
} \\
\mathbf{f} &\gets \mathbf{r} \times \mathbf{d} && \text{
$\triangleright$ Compute the forward direction vector $\mathbf{f}$.
} \\
\psi(\mathbf{\tilde{u}}_0) &\gets \begin{bmatrix}
\mathbf{r}~\mathbf{d}~\mathbf{f}
\end{bmatrix} && \text{
$\triangleright$ Compute the matrix containing the absolute pitch and roll for the first frame by concatenating the basis vectors horizontally.
}
\end{align*}$$
Definition of the yaw removal function $\varphi(\cdot)$
We begin by extracting from $\mathbf{R}_{\text{pano},0}$ the rotations along the $y$, $x$ and $z$ axis, for the yaw, pitch and roll matrices. This results in the following decomposition:
$$
\mathbf{R}_{\text{pano},0} = \mathbf{R}_{\text{pano},0,y} \mathbf{R}_{\text{pano},0,x} \mathbf{R}_{\text{pano},0,z}.
$$
We then simply use the inverse yaw rotation
$$
\varphi(\mathbf{R}_{\text{pano},0}) \gets \mathbf{R}_{\text{pano},0,y}^{-1}.
$$
Dataset details and statistics (extends sec. 3.2 and 4.3)
Training dataset (extends sec. 3.2)
Below we show the distributions of rotations and translations, comparing our training set to RealEstate10K, a dataset typically used for training camera control methods (e.g. AC3D, GEN3C), and PanShot (used to train UCPE).
The translation rose plots show the distribution of translation directions seen from the top (obtained from the last frame).
Rotation diversity
Translation diversity (top view)
Evaluation dataset (extends sec. 4.3)
Here, we supply additional details and statistics on our evaluation benchmark, SpatialVID-extreme, extending sec. 4.3 of the paper.
Camera path randomization
We randomly sample a start roll from \([-40°, 40°]\) and a start pitch from \([-90°, 90°]\).
The final roll and pitch are sampled the same way, and the end yaw is sampled from \([-180°, 180°]\).
The intermediate rotations are interpolated using spherical linear interpolation. Since the method used to compute absolute orientation metrics (Perspective Fields) was never trained
on rolls beyond 45° in magnitude, we resample a random rotation trajectory if an intermediate frame goes outside the roll bounds of \([-40°, 40°]\).
Finally, we obtain the translations by estimating them from the original videos with ViPE. We then apply a global rotation to those translations around the yaw axis, with an angle sampled from \([0°, 360°]\),
in order to reduce the bias toward forward translations.
Evaluation dataset statistics
Here we show that the original SpatialVID-HQ dataset provides limited diversity in absolute orientation and relative rotations. Our new evaluation benchmark, SpatialVID-extreme,
provides broader coverage of Euler angles and total angular distance.
Evaluation dataset statistics
Additional details on the "look-down" prompt (extends sec. 3.3)
Training details
We start by showing an example sampled from the training data. In the training video (left), we can see part of the selfie stick used to hold the camera, but it is absent from the null-pitch video (center),
used for captioning. As explained in the paper, if undesirable elements are present in the training video (such as the selfie stick), but not in the caption, the model
will learn to generate these as if they were normal scene content. To prevent this,
we generate a third set of videos, this time looking straight down (right), and also caption them.
In practice, we give the following instructions to the VLM to obtain the "look-down" prompt:
Describe the content of this video in under 15 words.
Start by mentioning that the video is filmed looking down, e.g. "Looking down, we see ..." or "Below is a view of ...".
We then simply concatenate the two prompts 50% of the time in the following way:
Caption: "The video begins with a view of a modern urban walkway lined with large buildings and greenery. The walkway is paved with stone tiles, and there are small patches of grass and plants along the sides. In the background, a set of stairs leads up to a higher level, where a few people are seen walking. The scene remains static for a moment before the camera pans slightly to the right, revealing more of the surrounding area. The video concludes with the camera still focused on the walkway, showing the same buildings and greenery in the background."
Caption: "Looking down, we see a person sweeping a patterned floor with a broom."
With the "look-down" caption included, the full caption is:
The video begins with a view of a modern urban walkway lined with large buildings and greenery. The walkway is paved with stone tiles, and there are small patches of grass and plants along the sides. In the background, a set of stairs leads up to a higher level, where a few people are seen walking. The scene remains static for a moment before the camera pans slightly to the right, revealing more of the surrounding area. The video concludes with the camera still focused on the walkway, showing the same buildings and greenery in the background. Looking down, we see a person sweeping a patterned floor with a broom.
Note that the VLM mistakenly identifies the selfie stick as a broom, but, in practice, we found this had no noticeable impact on the results.
Inference details
At inference time, we keep the input (positive) prompt intact. To ensure that undesirable elements (e.g. hands, distortions) are absent from the generated video, we use the following prompt for the negative direction:
Looking down, we see a person and a hand. Looking down, we see distortions. The video is low quality, worst quality, blurry, deformed, disfigured, distorted, extra limbs, cloned face.
Note that the choice of negative prompt can be adjusted at inference time based on user preferences without re-training the model.
Qualitative comparison
Here we show a few examples from our evaluation where training with the "look-down" prompts removes
the first-person artifacts that otherwise appear when the camera points directly down. For each backbone,
the left video uses the model trained with the look-down captions and the right video the model trained without them. The same
prompt and negative prompt are used at inference. As mentioned in the paper, training on the "look-down" prompt is mostly beneficial when fully finetuning
a model, as seen in the results rows from WAN 2.2.
Example 1: city sidewalk
WAN 2.2 5B: trained with look-down captions
WAN 2.2 5B: trained without look-down captions
UCPE (WAN 2.1): trained with look-down captions
UCPE (WAN 2.1): trained without look-down captions
Prompt: A bustling city sidewalk under scaffolding, with pedestrians in casual summer clothes, cars, and buildings visible in the background, all bathed in soft daylight under an overcast sky.
Example 2: lush forest
WAN 2.2 5B: trained with look-down captions
WAN 2.2 5B: trained without look-down captions
UCPE (WAN 2.1): trained with look-down captions
UCPE (WAN 2.1): trained without look-down captions
Prompt: A lush forest bathed in green and golden light, with towering trees, lush moss, and a tranquil, peaceful atmosphere.
Example 3: historic Chinese street
WAN 2.2 5B: trained with look-down captions
WAN 2.2 5B: trained without look-down captions
UCPE (WAN 2.1): trained with look-down captions
UCPE (WAN 2.1): trained without look-down captions
Prompt: A serene, historic Chinese street lined with red and yellow lanterns, tiled roofs, and bustling vendors under an overcast sky, evoking a tranquil, cultural atmosphere.
Quantitative comparison
Here, we show a quantitative analysis of the effect of the "look-down" prompts.
Again, training on "look-down" prompts mostly helps the fully finetuned WAN 2.2 model, as seen in the gravity error decrease and the CLIP score increase.
However, no clear effect is observed on the UCPE backbone, with a slightly better pitch error, but slightly worse scores on other metrics.
We attribute this discrepancy to the smaller number of trained parameter in UCPE, which makes it less prone to overfitting to artifacts (like a person walking).
Backbone
Look-down captions
PitchErr (abs.) ↓
GravityErr (abs.) ↓
RotErr (rel.) ↓
TransErr (rel.) ↓
CLIP ↑
FID ↓
FVD ↓
WAN 2.2 5B
Without
11.97
14.42
14.87
0.74
19.78
113.49
994.50
WAN 2.2 5B
With
8.36
10.54
15.05
0.74
20.62
115.96
1014.40
UCPE (WAN 2.1)
Without
15.44
18.42
12.01
0.46
21.47
109.65
899.68
UCPE (WAN 2.1)
With
13.98
17.16
12.12
0.46
21.25
112.47
978.13
Backbones and camera encodings (extends sec. 4.1 and 4.2)
We trained the following backbone and camera-conditioning variants. For all backbones, classifier-free guidance (CFG)
is applied only to the text conditioning, and not to the camera conditioning. All methods use a batch size of 1 per GPU
and generate 49 frames per video. The training clips are sampled with stride 2 from the original videos, i.e., half of
the original frames are skipped, so a 30 FPS video becomes 15 FPS.
in_channels=128, out_channels=out_dim, kernel_size=1, stride=1, padding=0 (zero initialized weights and biases)
All layers except the last one are randomly initialized. The last layer's features are added as a residual connection after
the DiT's patchify layer.
Comparison against panorama generation methods (extends sec. 2)
Panorama generation methods, such as PanoWAN [46], can generate realistic 360° equirectangular videos.
As mentioned in the paper, gravity-aligned camera control can be achieved by cropping the desired field of view out of the generated panorama, but this comes with several disadvantages:
1) most of the panorama pixels are discarded, resulting in severe resolution degradation; 2) the desired concepts described in the prompt can be cropped out and thus not appear in the video;
and 3) current text-conditioned methods do not provide control over camera translation.
Qualitative comparison
Here, we show an example where two concepts should be present in the generated image:
a house and a lake.
We run both our method and PanoWAN on 4 different seeds and display the first generated frame.
When cropping a 90° FOV from the generated panorama, notice that for 3 out of the 4 seeds (0, 1, 2),
PanoWAN only includes either the lake or the house but not both.
When cropping a 45° FOV, all seeds lack either the house or the lake.
Our method includes both elements, while also generating sharper details.
Please zoom in to compare.
Prompt: A charming wooden lakeside house with warm lights glowing from the windows, sitting beside a crystal-clear blue lake surrounded by lush green trees and distant mountains, soft golden sunset light reflecting on the calm water, wildflowers in the foreground, ultra-detailed, cinematic lighting, natural colors, photorealistic, 35mm photography, depth of field, high dynamic range
Ours
PanoWAN
90° FOV
45° FOV
Generated panorama
90° FOV (cropped)
45° FOV (cropped)
Seed 0
Seed 1
Seed 2
Seed 3
We show a second example where a temple should be clearly visible and surrounded by valleys.
Again, PanoWAN omits the temple in most generations, whereas our method consistently includes it.
Prompt: An ancient stone temple perched high on a rugged mountain ridge surrounded by dramatic cliffs and mist-filled valleys, intricate carvings on weathered stone pillars, snow-capped peaks visible in the distance, warm sunrise light illuminating the temple facade, cinematic lighting, natural textures, photorealistic, 35mm photography, depth of field, high dynamic range
Ours
PanoWAN
90° FOV
45° FOV
Generated panorama
90° FOV (cropped)
45° FOV (cropped)
Seed 0
Seed 1
Seed 2
Seed 3
Quantitative comparison
Since PanoWAN produces full 360° panoramas at $448 \times 896$ resolution,
we must crop its outputs to create standard perspective images.
This cropping results in significant detail loss, discarding 86.1% and 95.8% of pixels for 90° and 45° fields of view, respectively.
The reduction in high-frequency details affects CLIP alignment and FID scores, even though both models are trained on similar data.
We train ours on a subset of PanoVid, while PanoWAN uses the entire dataset.
At 90° FOV, PanoWAN shows lower prompt alignment (CLIP 19.46 vs. our 21.25)
and image quality (FID 123.10 vs. our 112.47). When using a narrower FOV of 45°,
these differences are more pronounced, with PanoWAN reaching a CLIP score of 16.82 versus our 19.45
and an FID of 142.81 versus our 110.46.
Details of the AC3D baseline prompt engineering (extends sec. 4.2)
For the AC3D baselines, we provide the model with the absolute camera orientation through text, as mentioned in sec. 4.2 of the paper. Here, we show the code used to generate
these camera descriptions.
We first take the absolute camera extrinsics \(E_\text{abs}\) for the video and convert them to Euler angles.
We then textually describe only the first frame's pitch and roll, and the last frame's yaw, pitch, and roll. Please click below for the full implementation.
Click here to expand the full code
def get_camera_prompt_from_absolute_c2w(c2w_absolute):
euler_angles = c2w_to_pitch_roll_yaw(c2w_absolute)
first_pitch = euler_angles['pitch'][0].item()
first_roll = euler_angles['roll'][0].item()
first_yaw = euler_angles['yaw'][0].item()
last_pitch = euler_angles['pitch'][-1].item()
last_roll = euler_angles['roll'][-1].item()
last_yaw = euler_angles['yaw'][-1].item()
def describe_angle_shot(pitch):
"""Describe pitch angle shot."""
pitch_rounded = round(pitch)
if -5 <= pitch_rounded <= 5:
return "near straight-on shot"
elif pitch_rounded > 0:
if 5 < pitch_rounded <= 20:
return f"small tilt-up of {pitch_rounded} degrees"
elif 20 < pitch_rounded <= 45:
return f"large tilt-up of {pitch_rounded} degrees"
else:
return f"extreme tilt-up of {pitch_rounded} degrees"
else:
abs_pitch = abs(pitch_rounded)
if 5 < abs_pitch <= 20:
return f"small tilt-down of {abs_pitch} degrees"
elif 20 < abs_pitch <= 45:
return f"large tilt-down of {abs_pitch} degrees"
else:
return f"extreme tilt-down of {abs_pitch} degrees"
def describe_dutch_angle(roll):
"""Describe roll (Dutch angle) with clockwise/counterclockwise."""
roll_rounded = round(roll)
if -5 <= roll_rounded <= 5:
return "near level shot"
abs_roll = abs(roll_rounded)
if abs_roll <= 20:
magnitude = "small"
elif abs_roll <= 45:
magnitude = "large"
else:
magnitude = "extreme"
# Positive roll is counterclockwise, negative is clockwise
direction = "counterclockwise" if roll_rounded > 0 else "clockwise"
return f"a {magnitude} Dutch angle tilted {direction} {abs_roll} degrees"
def describe_yaw(yaw):
"""Describe yaw (pan) direction."""
yaw_rounded = round(yaw)
abs_yaw = abs(yaw_rounded)
direction = "right" if yaw_rounded > 0 else "left"
return f"pan of {abs_yaw} degrees turned {direction}"
# Build start description
start_parts = []
start_pitch_desc = describe_angle_shot(first_pitch)
start_roll_desc = describe_dutch_angle(first_roll)
if start_pitch_desc != "near straight-on shot":
start_parts.append(start_pitch_desc)
if start_roll_desc != "near level shot":
start_parts.append(start_roll_desc)
# Build end description
end_parts = []
end_yaw_desc = describe_yaw(last_yaw)
end_pitch_desc = describe_angle_shot(last_pitch)
end_roll_desc = describe_dutch_angle(last_roll)
if end_yaw_desc:
end_parts.append(end_yaw_desc)
if end_pitch_desc != "near straight-on shot":
end_parts.append(end_pitch_desc)
if end_roll_desc != "near level shot":
end_parts.append(end_roll_desc)
# Construct final description
description_parts = []
start_text = "The camera starts at " if len(start_parts) == 1 else "The camera starts with "
description_parts.append(start_text + ", and ".join(start_parts))
end_text = "The camera ends with " + ", ".join(end_parts)
description_parts.append(end_text)
return ". ".join(description_parts)
After obtaining the camera description, we append it to the regular prompt. Refer to the qualitative results at the end of the supplementary material for examples of camera descriptions.
Quantitative results on RealEstate10K (extends sec. 4.3)
The main paper evaluation focuses on performance on extreme trajectories using SpatialVID-extreme.
Here, we evaluate our method (with the UCPE encoding) on a subset of 140 videos of RealEstate10K's test set, a standard benchmark with minimal camera movement, and compare it against prior work.
Our method still reaches the lowest pitch and gravity errors and is competitive on all other metrics. Note that AC3D was trained on RealEstate10K.
Method
PitchErr ↓
GravityErr ↓
RotErr ↓
TransErr ↓
CLIP ↑
FID ↓
FVD ↓
CogVideoX-2B + Plücker camera encoder + ControlNet
AC3D + cam. text.
5.58
6.41
2.46
0.63
26.26
79.28
658.90
Ours
5.44
6.39
4.48
0.56
24.85
81.17
848.27
WAN 2.1 1.3B + Plücker camera encoder + full finetuning
PreciseCam+WAN-I2V-CC
9.46
10.30
1.86
0.75
25.33
91.79
724.36
Ours
4.92
6.33
6.01
0.66
24.36
80.37
841.48
WAN 2.2 5B + Plücker camera encoder + full finetuning
Ours
5.08
6.00
4.29
0.78
24.38
81.44
756.76
WAN 2.1 1.3B + UCPE encoding + UCPE module training
UCPE
5.62
6.58
2.18
0.43
25.53
79.86
716.80
Ours
5.08
5.87
2.11
0.51
25.13
78.53
713.73
Absolute rotation ablation (extends sec. 4.5)
We compare our full model against the ablated variant trained without absolute rotations (with poses defined relative to the first frame). The 3D grid overlay shows the requested camera trajectory for both generated videos. Notice how removing the absolute rotations causes the model to generate a video with incorrect pitch and roll.
Ours
Ours w/o absolute rotations
Prompt: A vibrant urban landscape features two contrasting skyscrapers under a clear blue sky, blending modern and traditional architecture in a striking setting.
Additional results on the prompt-camera entanglement benchmark (extends sec. 4.6 and fig. 6)
First, we report additional graphs showcasing the relationship between the prompt alignment and the input pitch angle,
via the CLIP score, where a higher score indicates stronger agreement between the prompt and the image.
We report the CLIP score computed between the generated image and the caption from the ground truth at the input pitch angle (left, same as in fig. 6.b) and from the forward-looking prompt (right).
We observe that our method (in orange) comes closer to the ground-truth values (in black) than
the variant trained without null-pitch conditioning (in red) and the other methods, across the full range of pitch angles.
CLIP computed between the caption from the ground truth (at the input pitch angle) and the generated image (absolute)
CLIP computed between the input caption (forward looking) and the generated image (absolute)
Commercial text-to-image models
Early results indicate that a commercial text-to-image model, in this case ChatGPT Images 2.0, also entangles camera orientation with scene description. We use the same scene prompt as in fig. 6.a and prepend only the camera-angle instruction.
Extreme high-angle shot (−90° pitch)
Extreme high-angle shot (-90 degrees pitch). A dirt path winds through a lush, green forest with tall trees and dense shrubs. The sky is clear and blue, with a few scattered clouds. The path leads into the distance, surrounded by vibrant vegetation.
Eye-level shot (0° pitch)
Eye-level shot (0 degree pitch). A dirt path winds through a lush, green forest with tall trees and dense shrubs. The sky is clear and blue, with a few scattered clouds. The path leads into the distance, surrounded by vibrant vegetation.
Extreme low-angle shot (+90° pitch)
Extreme low-angle shot (+90 degree pitch). A dirt path winds through a lush, green forest with tall trees and dense shrubs. The sky is clear and blue, with a few scattered clouds. The path leads into the distance, surrounded by vibrant vegetation.
We observe that when the camera is looking up, the entanglement between camera angle and scene content is present.
Additional qualitative results (extends fig. 6.a)
Here, we randomly sampled 6 scenes out of the 20 used in our benchmark. We show
the prompt and each method's output along with the ground truth, for 5 different pitch angles.
Notice how our method more closely follows the input pitch angle, especially at extreme pitch angles (-90° and 90°).
Note that
PreciseCam was trained on PolyHaven panoramas used in our benchmark.
Prompt: Two people are working at a desk with computers. The room has wooden beams on the ceiling and posters on the wall. One person is typing on a keyboard while the other looks at the screen. The workspace is cluttered with various items.
Pitch
Ground truth
Ours
w/o null-pitch
UCPE
PreciseCam
90°
50°
0°
-50°
-90°
Prompt: The scene shows an abandoned concrete structure with graffiti on the walls and ceiling. Sunlight streams through large openings, illuminating the overgrown vegetation outside. The interior is dusty and empty, with visible cracks and decay. The graffiti includes the word "RAVE" in red.
Pitch
Ground truth
Ours
w/o null-pitch
UCPE
PreciseCam
90°
50°
0°
-50°
-90°
Prompt: A dirt path winds through a lush, green forest with tall trees and dense shrubs. The sky is clear and blue, with a few scattered clouds. The path leads into the distance, surrounded by vibrant vegetation.
Pitch
Ground truth
Ours
w/o null-pitch
UCPE
PreciseCam
90°
50°
0°
-50°
-90°
Prompt: A cozy room features a beige tufted sofa in the center, flanked by a Christmas tree and a white fireplace adorned with a wreath. To the right, a gray canopy tent and a small cloud-shaped decoration are visible. The room is illuminated by a chandelier and overhead lights, with sheer curtains on the left and decorative screens nearby.
Pitch
Ground truth
Ours
w/o null-pitch
UCPE
PreciseCam
90°
50°
0°
-50°
-90°
Prompt: A large circular softbox light is positioned on the right side of a plain, white room. The softbox emits a bright, diffused light, illuminating the area around it. The ceiling and walls are smooth and unadorned, with visible wiring and a corner of the room slightly curved. The scene remains static, focusing solely on the lighting setup.
Pitch
Ground truth
Ours
w/o null-pitch
UCPE
PreciseCam
90°
50°
0°
-50°
-90°
Prompt: A spacious workshop with large windows and industrial equipment is shown. A blue metal structure dominates the foreground, surrounded by various tools and workbenches. In the background, a staircase leads to an upper level with a glass enclosure. The room is filled with scattered tools, machinery, and workstations, creating an organized yet busy atmosphere.
Pitch
Ground truth
Ours
w/o null-pitch
UCPE
PreciseCam
90°
50°
0°
-50°
-90°
Additional qualitative results (extends fig. 5)
We stratify the SpatialVID-extreme evaluation set into ten equal-count bins by total angular distance and randomly select one sample from each bin. Both comparisons use the same scenes in decreasing angular-distance order.
The black overlay is the input 3D camera grid.
Every method video is downsampled from $480 \times 720$ to $240 \times 360$ before synchronization and horizontal concatenation.
Comparisons against the baselines from fig. 5. For "AC3D + cam. text.", the camera prompt is additionally supplied to indicate absolute camera orientation.
Scene: A bright forest with towering green-leaved trees forming a dense canopy overhead.
Camera motion (for AC3D): The camera starts with large tilt-up of 29 degrees, and a small Dutch angle tilted clockwise 13 degrees. The camera ends with pan of 180 degrees turned right, small tilt-down of 18 degrees, a small Dutch angle tilted counterclockwise 7 degrees
Scene: An evening view of the Eiffel Tower bathed in yellow light against a dark blue sky, framed by bare trees in a peaceful urban setting.
Camera motion (for AC3D): The camera starts with large tilt-down of 36 degrees, and a large Dutch angle tilted counterclockwise 37 degrees. The camera ends with pan of 155 degrees turned right, small tilt-up of 9 degrees
Scene: A rainy night on a quiet city street, where slick pavement reflects glowing lights and a lone car glides through the stillness, surrounded by dark trees and distant buildings.
Camera motion (for AC3D): The camera starts at extreme tilt-down of 47 degrees. The camera ends with pan of 129 degrees turned right, extreme tilt-down of 60 degrees, a small Dutch angle tilted counterclockwise 6 degrees
Scene: A serene coastal bay features a small beach, rocky cliffs, and clustered buildings, framed by lush green hills under bright, natural lighting.
Camera motion (for AC3D): The camera starts with extreme tilt-up of 50 degrees, and a large Dutch angle tilted counterclockwise 24 degrees. The camera ends with pan of 50 degrees turned right, extreme tilt-down of 69 degrees
Scene: A serene urban garden features white hydrangeas, a winding grass path, and a sleek concrete building, bathed in soft, diffused light that enhances its tranquil atmosphere.
Camera motion (for AC3D): The camera starts at small tilt-up of 7 degrees. The camera ends with pan of 119 degrees turned right, extreme tilt-up of 76 degrees, a large Dutch angle tilted counterclockwise 34 degrees
Scene: A modern yacht interior features a woman in a striped suit, a plush couch, a dining area, and elegant lighting through window blinds, evoking luxury and sophistication.
Camera motion (for AC3D): The camera starts at small tilt-up of 14 degrees. The camera ends with pan of 52 degrees turned right, extreme tilt-up of 83 degrees, a small Dutch angle tilted clockwise 15 degrees
Scene: A serene pond with swans and cygnets, surrounded by stone edges and greenery, under an overcast sky, capturing quiet natural life.
Camera motion (for AC3D): The camera starts with small tilt-up of 7 degrees, and a small Dutch angle tilted clockwise 6 degrees. The camera ends with pan of 80 degrees turned left, large tilt-up of 33 degrees
Scene: A narrow urban alleyway features a construction site with scaffolding, a low fence, and greenery, under an overcast sky, evoking an industrial and utilitarian atmosphere.
Camera motion (for AC3D): The camera starts with large tilt-up of 35 degrees, and a small Dutch angle tilted clockwise 7 degrees. The camera ends with pan of 84 degrees turned left, small tilt-up of 12 degrees, a large Dutch angle tilted clockwise 35 degrees
Scene: A luxurious breakfast tray floats in a clear pool, surrounded by modern outdoor lounges, exuding calm and opulence under bright sunlight.
Camera motion (for AC3D): The camera starts with small tilt-up of 16 degrees, and a small Dutch angle tilted clockwise 16 degrees. The camera ends with pan of 55 degrees turned right, small tilt-up of 13 degrees, a small Dutch angle tilted counterclockwise 6 degrees
Scene: A rugged mountain road winds through a dry, green landscape under bright sunlight, framed by steep slopes and scattered rocks, evoking a sense of natural beauty and isolation.
Camera motion (for AC3D): The camera starts with small tilt-down of 18 degrees, and a small Dutch angle tilted counterclockwise 17 degrees. The camera ends with pan of 41 degrees turned right, small tilt-down of 12 degrees, a small Dutch angle tilted counterclockwise 11 degrees
GT Trajectory:
Top
Side
Ours
Ours (w/o null-pitch cond.)
UCPE
AC3D + cam. text.
PreciseCam + WAN-I2V-CC
PreciseCam + GEN3C
PitchErr (abs.) ↓
1.5652
GravityErr (abs.) ↓
20.7034
RotErr (rel.) ↓
6.9452
TransErr (rel.) ↓
0.5595
CLIP ↑
22.6332
PitchErr (abs.) ↓
3.1581
GravityErr (abs.) ↓
15.7385
RotErr (rel.) ↓
8.5755
TransErr (rel.) ↓
0.4454
CLIP ↑
22.2062
PitchErr (abs.) ↓
3.9588
GravityErr (abs.) ↓
13.1067
RotErr (rel.) ↓
8.6168
TransErr (rel.) ↓
0.4372
CLIP ↑
23.9830
PitchErr (abs.) ↓
38.7535
GravityErr (abs.) ↓
51.8856
RotErr (rel.) ↓
6.4516
TransErr (rel.) ↓
0.4344
CLIP ↑
21.5578
PitchErr (abs.) ↓
27.3009
GravityErr (abs.) ↓
28.1376
RotErr (rel.) ↓
3.5767
TransErr (rel.) ↓
0.7727
CLIP ↑
19.8179
PitchErr (abs.) ↓
31.4029
GravityErr (abs.) ↓
32.3403
RotErr (rel.) ↓
4.6245
TransErr (rel.) ↓
0.2900
CLIP ↑
18.2293
Backbone comparison using the same ten scenes, camera trajectories, translation normalization, and 3D camera-grid overlays. Per-sample metrics are shown underneath each method column.
Scene: A bright forest with towering green-leaved trees forming a dense canopy overhead.
Camera motion (for AC3D): The camera starts with large tilt-up of 29 degrees, and a small Dutch angle tilted clockwise 13 degrees. The camera ends with pan of 180 degrees turned right, small tilt-down of 18 degrees, a small Dutch angle tilted counterclockwise 7 degrees
GT Trajectory:
Top
Side
Ours (UCPE + WAN 2.1)
Ours (WAN 2.2 5B full finetuning + Plücker camera encoder)
Ours (WAN 2.1 1.3B full finetuning + Plücker camera encoder)
Ours (CogVideoX 2B + ControlNet + Plücker camera encoder)
Scene: An evening view of the Eiffel Tower bathed in yellow light against a dark blue sky, framed by bare trees in a peaceful urban setting.
Camera motion (for AC3D): The camera starts with large tilt-down of 36 degrees, and a large Dutch angle tilted counterclockwise 37 degrees. The camera ends with pan of 155 degrees turned right, small tilt-up of 9 degrees
GT Trajectory:
Top
Side
Ours (UCPE + WAN 2.1)
Ours (WAN 2.2 5B full finetuning + Plücker camera encoder)
Ours (WAN 2.1 1.3B full finetuning + Plücker camera encoder)
Ours (CogVideoX 2B + ControlNet + Plücker camera encoder)
Scene: A rainy night on a quiet city street, where slick pavement reflects glowing lights and a lone car glides through the stillness, surrounded by dark trees and distant buildings.
Camera motion (for AC3D): The camera starts at extreme tilt-down of 47 degrees. The camera ends with pan of 129 degrees turned right, extreme tilt-down of 60 degrees, a small Dutch angle tilted counterclockwise 6 degrees
GT Trajectory:
Top
Side
Ours (UCPE + WAN 2.1)
Ours (WAN 2.2 5B full finetuning + Plücker camera encoder)
Ours (WAN 2.1 1.3B full finetuning + Plücker camera encoder)
Ours (CogVideoX 2B + ControlNet + Plücker camera encoder)
Scene: A serene coastal bay features a small beach, rocky cliffs, and clustered buildings, framed by lush green hills under bright, natural lighting.
Camera motion (for AC3D): The camera starts with extreme tilt-up of 50 degrees, and a large Dutch angle tilted counterclockwise 24 degrees. The camera ends with pan of 50 degrees turned right, extreme tilt-down of 69 degrees
GT Trajectory:
Top
Side
Ours (UCPE + WAN 2.1)
Ours (WAN 2.2 5B full finetuning + Plücker camera encoder)
Ours (WAN 2.1 1.3B full finetuning + Plücker camera encoder)
Ours (CogVideoX 2B + ControlNet + Plücker camera encoder)
Scene: A serene urban garden features white hydrangeas, a winding grass path, and a sleek concrete building, bathed in soft, diffused light that enhances its tranquil atmosphere.
Camera motion (for AC3D): The camera starts at small tilt-up of 7 degrees. The camera ends with pan of 119 degrees turned right, extreme tilt-up of 76 degrees, a large Dutch angle tilted counterclockwise 34 degrees
GT Trajectory:
Top
Side
Ours (UCPE + WAN 2.1)
Ours (WAN 2.2 5B full finetuning + Plücker camera encoder)
Ours (WAN 2.1 1.3B full finetuning + Plücker camera encoder)
Ours (CogVideoX 2B + ControlNet + Plücker camera encoder)
Scene: A modern yacht interior features a woman in a striped suit, a plush couch, a dining area, and elegant lighting through window blinds, evoking luxury and sophistication.
Camera motion (for AC3D): The camera starts at small tilt-up of 14 degrees. The camera ends with pan of 52 degrees turned right, extreme tilt-up of 83 degrees, a small Dutch angle tilted clockwise 15 degrees
GT Trajectory:
Top
Side
Ours (UCPE + WAN 2.1)
Ours (WAN 2.2 5B full finetuning + Plücker camera encoder)
Ours (WAN 2.1 1.3B full finetuning + Plücker camera encoder)
Ours (CogVideoX 2B + ControlNet + Plücker camera encoder)
Scene: A serene pond with swans and cygnets, surrounded by stone edges and greenery, under an overcast sky, capturing quiet natural life.
Camera motion (for AC3D): The camera starts with small tilt-up of 7 degrees, and a small Dutch angle tilted clockwise 6 degrees. The camera ends with pan of 80 degrees turned left, large tilt-up of 33 degrees
GT Trajectory:
Top
Side
Ours (UCPE + WAN 2.1)
Ours (WAN 2.2 5B full finetuning + Plücker camera encoder)
Ours (WAN 2.1 1.3B full finetuning + Plücker camera encoder)
Ours (CogVideoX 2B + ControlNet + Plücker camera encoder)
Scene: A narrow urban alleyway features a construction site with scaffolding, a low fence, and greenery, under an overcast sky, evoking an industrial and utilitarian atmosphere.
Camera motion (for AC3D): The camera starts with large tilt-up of 35 degrees, and a small Dutch angle tilted clockwise 7 degrees. The camera ends with pan of 84 degrees turned left, small tilt-up of 12 degrees, a large Dutch angle tilted clockwise 35 degrees
GT Trajectory:
Top
Side
Ours (UCPE + WAN 2.1)
Ours (WAN 2.2 5B full finetuning + Plücker camera encoder)
Ours (WAN 2.1 1.3B full finetuning + Plücker camera encoder)
Ours (CogVideoX 2B + ControlNet + Plücker camera encoder)
Scene: A luxurious breakfast tray floats in a clear pool, surrounded by modern outdoor lounges, exuding calm and opulence under bright sunlight.
Camera motion (for AC3D): The camera starts with small tilt-up of 16 degrees, and a small Dutch angle tilted clockwise 16 degrees. The camera ends with pan of 55 degrees turned right, small tilt-up of 13 degrees, a small Dutch angle tilted counterclockwise 6 degrees
GT Trajectory:
Top
Side
Ours (UCPE + WAN 2.1)
Ours (WAN 2.2 5B full finetuning + Plücker camera encoder)
Ours (WAN 2.1 1.3B full finetuning + Plücker camera encoder)
Ours (CogVideoX 2B + ControlNet + Plücker camera encoder)
Scene: A rugged mountain road winds through a dry, green landscape under bright sunlight, framed by steep slopes and scattered rocks, evoking a sense of natural beauty and isolation.
Camera motion (for AC3D): The camera starts with small tilt-down of 18 degrees, and a small Dutch angle tilted counterclockwise 17 degrees. The camera ends with pan of 41 degrees turned right, small tilt-down of 12 degrees, a small Dutch angle tilted counterclockwise 11 degrees
GT Trajectory:
Top
Side
Ours (UCPE + WAN 2.1)
Ours (WAN 2.2 5B full finetuning + Plücker camera encoder)
Ours (WAN 2.1 1.3B full finetuning + Plücker camera encoder)
Ours (CogVideoX 2B + ControlNet + Plücker camera encoder)