Agentic Cinematography in Dynamic Scenes

Master's Thesis, Technical University of Munich, 2026

A natural-language camera instruction becomes a 3D camera trajectory, authored and checked by two pretrained VLMs, and the source video is reshot along it.

Authored camera trajectory

Authored trajectory (frustums dark blue to yellow over time)

Source video

Reshot video generated by Vista4D

The prompt is the only camera input: the loop authors the trajectory and the camera-conditioned video model reshoots the source along it. Conference, breakdance, couple and lounge shots come from a static source camera; the tennis clip's source camera pans to follow the player. Frustum length is proportional to focal length, so zooms show as frustums lengthening (zoom in) or shortening (zoom out); pans pivot about a single camera position.

One Scene, Three Subjects

Source video

"Zoom in on the newspaper"

"Zoom in on the man"

"Zoom in on the woman"

The same source clip and the same move, aimed at three different targets named only in the prompt.

Abstract

Agentic Cinematography is a two-level, training-free framework that uses vision-language models (VLMs) to turn natural-language directorial instructions into target trajectories for camera-conditioned video diffusion models, which otherwise need manually authored trajectories.

At the first level, a cinematographer grounds a prompt such as "Zoom in on the subject" in the scene geometry and proposes a 3D camera trajectory; a critic checks the proposal against the prompt and for spatiotemporal integrity.

At the second level, a critic reviews the generated video, diagnoses visual or geometric failures, and triggers repairs.

Our evaluation shows that VLMs serve as both trajectory planners and video evaluators, giving zero-shot natural-language camera control without trajectory datasets or fine-tuning.

The first level, the trajectory generation loop, is covered in full; the second level, video review and repair, is an early draft that can be expanded at the end of the page.

The Agentic Trajectory Authoring Loop

Overview of the agentic trajectory authoring loop

Overview. The camera prompt, the input video and its 4D reconstruction ground the cinematographer, which proposes a trajectory. The critic sees the same scene rendered from the proposed cameras and either accepts the trajectory or rejects it with feedback for another iteration. The accepted trajectory and the 4D render condition the video model, which synthesizes the novel video.

Input: a source video and a camera instruction. Output: the video re-shot along the requested trajectory. Two VLM agents, each with its own system prompt and structured output, drive the loop. A cinematographer proposes trajectories from the instruction and the scene evidence; a trajectory critic accepts a proposal or returns actionable feedback for the next round, until acceptance or the iteration budget runs out.

Scene Preparation

A feed-forward 4D reconstruction model (π³) lifts the video into a point cloud with and estimates the source cameras.

Both agents see the scene as top-down orthographic canvases at sparse keyframes. Their isotropic scale maps equal pixels to equal world distances, so a trajectory authored in pixels lifts back into the reconstruction with only a height. Each canvas is annotated with camera symbols, the subject's bounding box and motion path, and pose metadata.

Input video

4D reconstruction

Orthographic projection

Input processing. The input video is reconstructed in 4D, then projected orthographically from above into the scene canvas the agents author on.

The Cinematographer Agent

The cinematographer receives the camera instruction, the first source frame, the canvases and metadata, and, on refinement rounds, the previous proposal with the critic's feedback. It authors a sparse trajectory: five JSON fields at each keyframe. The first key is pinned to the source camera, and the keys are interpolated linearly per field into a dense per-frame sequence.

This 2.5D parameterization avoids generating SE(3) poses directly: pitch follows from the two heights, yaw from the horizontal displacement, and roll is fixed to zero.

The authored camera in 3D — top-down canvas (384 × 576 px) as the floor

yaw
—
pitch θ
—
roll
0.0°
ground d
—
hL − hC
—
focal f
—

From Sparse Keys to a 3D Camera Trajectory

1. Sparse keypoints authored on the canvas

2. Interpolated to every frame

3. Lifted to 3D by inverting the orthographic projection

4. Look-at rotation and intrinsics per frame

The Trajectory Critic Agent

The critic judges the proposal against the same instruction with its own evidence: the canvases extended with the proposed trajectory, and renders of the reconstruction from the proposed cameras.

Critic top-down t_0
Critic top-down t_16
Critic top-down t_32
Critic top-down t_48
Render from proposed camera t_0
Render from proposed camera t_16
Render from proposed camera t_32
Render from proposed camera t_48

Critic evidence. Top: the canvas with the proposed camera (orange), the source camera (cyan), and the subject box at each key. Bottom: the reconstruction rendered from the proposed camera at the same keys.

The critic either accepts the proposal or rejects it with concrete feedback such as "raise t_34 camera_height by 0.4". The accepted trajectory is the reshoot's target.

Text-to-Trajectory Results

We adapt DataDoP (GenDoP), the standard text-to-trajectory benchmark. For parity with text-based baselines, the scene is built from the shipped first frame only, with a three-iteration budget. Due to the limitations of our method, we filter the DataDoP dataset with a VLM to get 100 frames which have a single, unoccluded subject.

Rejected: crowd
Rejected: no subject
Rejected
Rejected: occluded
Kept: person
Kept: person
Kept: person
Kept: object

Subject screening. Top: rejected for a crowd, no subject, or occlusion. Bottom: accepted, three people and one object.

Metrics. Motion-tagging F1 classifies each frame into one of 189 motion classes with DataDoP's tagger: the right motion at the right instant. CLaTr-CLIP embeds trajectory and caption in a shared space and scores their similarity: the right intent overall. Two floors give context, a static camera and ground-truth trajectories paired with mismatched captions. Median rotation error and path-length ratio (1 is ideal) are diagnostics.

Main Results

Method Trained for the task? F1 ↑ CLaTr-CLIP ↑ Rot. [°] ↓ Path len. → 1
Static floor – 0.386 12.12 7.1 0.00
Mismatched floor – 0.301 7.17 13.9 0.84
GenDoP (text + RGBD) Trained on DataDoP 0.557 50.69 7.8 0.69
LAMP Fine-tuned LLM 0.632 47.16 7.1 1.88
Ours (no agentic loop) Training-free 0.514 47.36 16.1 0.58
Ours (Gemini 3.7 Flash) Training-free 0.542 44.61 8.6 0.28

Landing right behind a benchmark-trained model (GenDoP) with no task-specific supervision. Without the agentic loop, the first proposal alone scores a higher CLaTr-CLIP; the loop raises F1 from 0.514 to 0.542 and halves the rotation error, from 16.1° to 8.6°.

Backbone VLM Sweep

Backbone F1 ↑ CLaTr-CLIP ↑ Rot. [°] ↓ Path len. → 1
Static floor 0.386 12.12 7.1 0.00
Mismatched floor 0.301 7.17 13.9 0.84
Qwen3.8 27B (open weights) 0.518 38.02 16.4 0.53
Qwen3.6 35B A3B (open weights) 0.494 33.98 17.4 0.71
Gemini 3.7 Flash (closed) 0.542 44.61 8.6 0.28

Even the weakest open-weight model clears both floors by more than 20 CLaTr-CLIP points, so the loop works with a locally runnable model.

Ablation: Caption Type

DataDoP ships several captions per shot. The tables above use Concise Interaction captions in directorial vocabulary ("The camera begins static, then moves left while yawing to follow the presenter..."); Movement captions name the motion directly ("The camera remains static for the first part, then moves left while yawing left."). CLaTr-CLIP uses a separate checkpoint per caption type, so only F1 is comparable across tables.

Method (Movement captions) F1 ↑ CLaTr-CLIP ↑ Rot. [°] ↓ Path len. → 1
Static floor 0.386 10.91 7.1 0.00
Mismatched floor 0.301 7.46 13.9 0.84
GenDoP (text, movement) 0.644 61.10 8.1 0.79
Ours (Gemini 3.7 Flash) 0.615 54.99 8.4 0.39
LAMP 0.756 63.33 6.6 1.55

Our F1 rises from 0.542 to 0.615. A caption that names the motion is a clearer signal for an off-the-shelf VLM.

Ground truth

Ground truth

LAMP

LAMP

GenDoP

GenDoP

Ours

Ours

A DataDoP Movement clip: "The camera remains static, then moves forward, stays static again, and finally moves forward once more." Frustums run dark to light. The ground truth shows two dense groups joined by wide spacing; GenDoP reproduces the two groups, while ours and LAMP move at near-constant spacing, losing the alternation and running short.

The Loop in Action

Re-aiming a crash zoom. The instruction: do a Tarantino zoom on the punch. The first pass zooms in on the woman throwing the punch and misses the impact and the man's reaction. The critic moves the look-at point for the zoom, and the updated trajectory lands on the contact point.

First pass point cloud rendering

Updated trajectory point cloud rendering

Critic feedback, first pass rejected. "Move look_at left by 12 px for the segment from t_20 to t_48 to keep the punch impact and contact point centered in the frame."
Cinematographer reasoning. "I'm adjusting the camera's focus. The previous framing missed the punch's impact and the recipient's reaction."
Updated trajectory accepted (score 9.2/10). "The camera executes an authentic Tarantino-style crash zoom right onto the impact of the punch. Starting from a medium two-shot at roughly 44 degrees FoV, the lens rapidly zooms in between t_12 and t_24 down to 16-18 degrees FoV, while smoothly shifting the look-at point to keep the punch connection and the victim's reaction centrally framed."

Keeping a zoom on target. The instruction: zoom in on the newspaper. The first pass tilts down as it zooms and runs into space the reconstruction never covered, so the render goes black from t_24 on. The critic asks for a higher look-at point, and the updated trajectory stays on the paper.

First pass point cloud rendering

Updated trajectory point cloud rendering

Critic feedback, first pass rejected. "Raise look_at_height across t_8 to t_48 to approximately 0.480-0.490 to keep the camera leveled on the newspaper and prevent tilting down into the void."
Cinematographer reasoning. "… concentrating on elevating look_at_height … within frames 8 through 48. My aim … target the newspaper, preventing the downward plunge into unmodeled areas … previously observed."

Accepting a first proposal. The instruction: zoom in on the man. The first proposal already narrows the field of view onto the man on the bench, and the critic accepts it without feedback.

First pass point cloud rendering

Critic analysis, accepted. "The camera executes a smooth optical zoom in towards the man seated on the bench by reducing the field of view from 59.92° to 28.0° while simultaneously shifting the look-at point towards his position. … fulfilling the user demand."

Catching an under-covered trajectory. The instruction: track the tennis player while increasing the height of the camera. The first pass raises the camera but pitches it down into the court, so the player leaves the top of the frame and the render goes almost black after the first frames. The critic asks for a higher look-at point, and the updated trajectory rises while keeping the player in frame.

First pass point cloud rendering

Updated trajectory point cloud rendering

Critic feedback, first pass rejected. "Raise look_at_height across t_8 to t_48 to approximately 0.52 to 0.56 to tilt the camera upward and maintain tracking on the tennis player as camera_height increases."
Cinematographer reasoning. "I've noted that the original approach led to excessive downward pitch, obscuring the player. My current direction is to ensure the look-at height scales appropriately with camera elevation, aiming for a more stable and centered player view."
Updated trajectory accepted (score 9.2/10). "The camera trajectory successfully elevates its height progressively from 0.502 to 0.635 while pitching down to maintain framing on the tennis player as he moves across the court. The tracking and crane-up motion are smooth and visually coherent."

Limitations

  • Backbone dependence: open-weight models score lower, so the headline numbers rely on a frontier model behind a commercial API, which also complicates exact replication.
  • A narrow critic: it sees no reference trajectory and only edits sparse keys, so it fixes framing but cannot tell that a move is too short, and its edits shrink the path.
  • Coupled parameterization: pitch is derived from the two heights and their ground distance, so it cannot be set independently of placement, and it drifts between keyframes because the fields interpolate linearly while pitch is nonlinear in them.
  • Benchmark mismatch: DataDoP trajectories are the source shot's own path, not a reshoot, and the loop runs from a single frame. The numbers measure trajectory authoring capabilities from scratch but not for the reshooting task.

Related Work

Works this thesis builds on or compares against:

Vista4D: video reshooting with 4D point clouds. Our video model and the source of the loop's 4D grounding.

GenDoP: auto-regressive camera trajectory generation and the DataDoP benchmark.

LAMP: language-assisted motion planning; fine-tunes an LLM to write camera-motion programs.

E.T. the Exceptional Trajectories: text-to-camera-trajectory generation with character awareness; origin of the CLaTr embedding used for scoring.

π³: permutation-equivariant visual geometry learning; the 4D reconstruction model behind scene preparation.