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 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.
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.
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.
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.
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 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.
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 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 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.
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.



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.
| 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 | 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.
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
LAMP
GenDoP
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.
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
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."
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
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."
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
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
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."
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.
Overview. The generated-video critic reviews Vista4D's output. A good verdict is returned unmodified; a bad verdict triggers one repair of the scene memory's dynamic subject and one regeneration on the repaired memory.
Vista4D, like video generation models in general, cannot check whether its output is plausible or fix artifacts such as smearing and warped geometry. This stage adds two pieces. First, a VLM video critic reviews the generated video frame by frame and returns a verdict. Second, a negative verdict gates a repair of the 4D conditioning the video was generated from, followed by one regeneration. It is a single pass, not a closed loop: it supplies the failure detector and the conditioning-level repair an iterative version would need, but runs each exactly once.
The critic samples frames from the generated video and receives four inputs: the sampled frames,
one source anchor image that fixes scene and subject identity, the target trajectory in text
(per sampled frame, as translation and rotation relative to the first frame), and the camera
instruction. Each frame is scored on seven qualities: anchor identity consistency, temporal
coherence, artifact freedom, sharpness and detail, geometric plausibility, camera trajectory
adherence, and reconstruction utility, and labeled good or bad.
Repair runs if and only if at least one sampled frame is bad. A good video is
returned unmodified; a bad one is repaired, re-rendered and regenerated once, and the regenerated
video is not reviewed again.
Train scene, dolly in. Every frame accepted, overall 9.2.
Bear scene, zoom out. Every frame accepted, overall 9.2.
Lounge scene, pan left. Every frame accepted, overall 8.4.
Kitchen scene, half orbit. The last two frames are flagged, overall 5.8.
Lounge scene, full orbit. Five consecutive frames are flagged, overall 4.5.
Critic verdicts on five shots. Sampled frames are bordered green where accepted and red where flagged; one flagged frame sends the video to repair. The critic reliably flags departures from the commanded trajectory, as on the kitchen half orbit and the lounge full orbit, and is less sensitive to texture and geometry defects.
The repair targets the conditioning rather than the video model, on the assumption that a more complete scene memory yields a better video, and it starts from the most visible gap: the dynamic subject is hollow, because the memory holds only what the single source view saw.
Kitchen scene
Lounge scene
A hollow subject. Scene-memory renders under a target trajectory, before repair. The subject is thin and speckled rather than solid; the black regions were never observed by the source camera and hold no points.
The repair replaces the monocular subject with one reconstructed from multi-view priors, reusing three parts of FreeOrbit4D. SV4D 2.0 takes the masked subject video and generates four more views from fixed angles, giving five views per frame with the real one. VGGT lifts the five views into one point cloud per frame, each point tagged by its source view. FreeOrbit4D's cleanup then removes outliers and smooths the centroid trajectory with a constant-velocity forward-backward filter. The background is not borrowed; it comes from the memory itself.
(a) Source frame
(b) Mask




(c) SV4D 2.0 views


(d) Fused subject, t = 22 and t = 48
Completing one frame of the lounge scene. (a) The source frame. (b) The subject cut out with its segmentation mask, which conditions SV4D 2.0. (c) The four generated views. (d) The fused subject after it replaced the hollow one in the memory. The rotated views are invented, so the back of the sweater and the far side of the head are coarser than the front.
Fitting the subject into the scene. VGGT's point clouds come with their own scale and focal length. Instead of registering two point clouds in 3D, each fused point is transferred through the pixel it occupies in the shared source view, since both reconstructions were built from the same frame. Only the depth needs converting: a per-frame scale λt, the median ratio of VGGT's source-view depth to the memory's depth over pixels both agree belong to the subject, smoothed over time, rescales each point's depth before it is placed back with the memory's own camera pose and intrinsics. Rendered along the target trajectory, points from the real source view take priority over generated ones where they overlap. The old subject points are discarded, the new ones inserted, and the memory is re-rendered for one regeneration.
Source video
Scene memory render, first pass
Vista4D output, first pass (flagged)
Completed subject (SV4D 2.0 + VGGT)
Scene memory render, repaired
Vista4D output, regenerated
Half orbit on the kitchen scene. The critic flagged the first pass: at the end of the orbit the memory render shows the subject's front again, because a hollow point cloud looks the same from behind, and the video follows it. With the completed subject the render shows the back, and the regenerated video does too.
The stage is evaluated on 57 trajectories authored by the loop over sequences from DAVIS, Lyra and Vista4D, weighted toward orbits and wide lateral moves. Vista4D's 384p checkpoint generates 49 frames along a frozen trajectory with a four-step distilled sampler and a fixed seed, so a baseline and its repaired counterpart differ only in the 4D conditioning. Scene preparation uses π³ and SAM 3; the repair uses SV4D 2.0 and VGGT. The critic flagged 19 of the 57 shots, dominated by orbits and large lateral moves, and every comparison below is paired within those 19.
| Metric | Vista4D | Repaired | |
|---|---|---|---|
| Camera control | |||
| Rotation error [°] | ↓ | 26.30 | 23.57 |
| Translation error (L2) | ↓ | 1.135 | 1.191 |
| Intrinsics error [°] | ↓ | 1.958 | 1.624 |
| RE@SG | ↓ | 31.95 | 26.24 |
| Source fidelity | |||
| CLIP-T | ↑ | 0.2624 | 0.2596 |
| CLIP-SIM | ↑ | 0.8822 | 0.8556 |
| DINO-SIM | ↑ | 0.7949 | 0.7124 |
| VBench quality | |||
| Subject consistency | ↑ | 0.885 | 0.861 |
| Background consistency | ↑ | 0.9199 | 0.9062 |
| Aesthetic quality | ↑ | 0.5703 | 0.5379 |
| Imaging quality | ↑ | 71.16 | 67.86 |
| Motion smoothness | ↑ | 0.9686 | 0.9680 |
| Overall consistency | ↑ | 0.2687 | 0.2669 |
Before and after repair, paired over the 19 flagged shots. Means; the better value of each pair is bold.
The two families move in opposite directions. Every camera-control metric except translation error improves; every fidelity and quality metric falls, though only slightly, with motion smoothness and overall consistency essentially flat. Part of the drop is built into the measurement: CLIP-SIM, DINO-SIM and the VBench consistency scores reward agreement with the source frames, and the repair exists to put new content where the source has nothing to say. Aesthetic and imaging quality are not source-referenced and fall too; the SV4D 2.0 prior is softer and more cartoonish than the source. The fidelity numbers are also misleading on their own: in the half orbit above, the baseline earns its richer texture by failing the task, showing frontal views instead of following the trajectory.

Masked source

SV4D 2.0 view

Masked source

SV4D 2.0 view
The SV4D 2.0 prior is softer than the source. Lounge scene (left pair) and kitchen scene (right pair): edges and texture come out softer in the generated views.
Half-orbit trajectory, lounge scene
Generated frame at t = 48, accepted by the critic