How to Control Camera Movement With a 3D Reference: Gray Boxes for the Path, Words for the Scene

Steering a CapCut video generation with a rough 3D animation of the camera move, measured against the same move written in words: direction, timing, framing, what wins when they disagree, and whether the subject stays put.

*No credit card required
Four synchronized clips in a grid: a gray-box figure orbited by the camera, a woman in a camel coat orbited the same way, and two more versions of her made from a written description that turn in opposite directions.
CapCut
CapCut
Oct 14, 2026

The five-second clip that steered the camera in these tests is a handful of gray boxes: a red block where the woman should stand, four colored posts, and a checkerboard floor. None of it appears in the clips it steered. What carried over was the camera movement: which way it went, how fast, where it slowed down, and how close it framed her. If you have described a camera move in words and paid for the retry when it came back wrong, this is the other route. Attach a rough 3D reference of the move, and let the words describe only the scene.

Four synchronized clips in a grid: a gray-box figure orbited by the camera, a woman in a camel coat orbited the same way, and two more versions of her made from a written description that turn in opposite directions.

Top left: the gray-box reference. Top right: a clip made with it attached. Bottom: the same quarter orbit written out in words and sent twice. The first went right, the second went left.

The 3D reference file

I rendered two moves as gray-box animations, each 5 seconds long at 24 frames per second and 1280×720. One is a push-in from a full-length shot to waist-up. The other is a quarter orbit to the right around a standing figure. Both ease in at the start and ease out at the end. Any 3D program can make a file like this; I used a few dozen lines of Python. Because I built the files myself, I know where the camera is in every frame, and that is what the measurements below compare against.

The scope, before the results: one scene (a woman in a camel coat in a stone courtyard), two moves, 5-second clips at 720p, ten generations, nine of them on Seedance 2.0 Mini. The main orbit comparison has two runs each way, plus a third reference run with a changed stand-in. The push-in and the other variations have one run each. Seedance 2.0, 2.5 and 1.5 Pro were not tried with a reference.

Attaching it in CapCut

In the AI video generator composer, switch to Video mode, click +, then Upload from device, and choose the file. It lands as a chip at the start of the prompt box, and you write the prompt after it. Then open the settings and set the model, 16:9 and the duration.

Two crops of the CapCut composer: the prompt box with a video chip, named after the reference file, in front of the prompt, and the settings panel with Seedance 2.0 Mini, 16:9 and 5s selected.

Left: the uploaded clip as a chip in the prompt box. Right: the settings used for the 2.0 Mini runs here.

With a clip attached, the model list still offered Seedance 2.5, 2.0 Mini, 2.0, 1.5 Pro, 1.0 mini and Dreamontage 1.0 Pro Fast. On 2.0 Mini the duration row went from 5 to 15 seconds; I used 5 to match the reference. This is the prompt that went with the orbit reference, as sent:

Follow the camera movement of the reference video exactly: the same path, speed and timing. Only the camera movement comes from the reference. The scene: a young woman in a long camel coat stands still in a sunlit stone courtyard with arched walls, in the place of the red figure, facing the camera at the start. She does not walk or turn.

The first two sentences say what to take from the reference. The rest describes the scene, and it is the only place the courtyard, the coat or the woman came from. The prompt box also carries a notice to use only media you have rights and consent for, which a reference you rendered yourself meets.

Check the chip before you send. On one attempt here the upload did not finish: the chip read “Couldn't load”, and the send button showed “Can't send prompt with files/cards that didn't load”. Nothing was charged, and uploading the file again fixed it.

Configuration (16:9, 720p, 5 seconds)
Credits shown in the chat when sent, 2026-09-24
Seedance 2.0 Mini, reference clip attached
15
Seedance 2.0 Mini, words only
25
Seedance 1.0 mini, reference clip attached
5

The start page advertised a credit discount on Seedance 2.0 Mini that day. These figures apply to these configurations on that date; other durations, resolutions and models are charged differently.

What followed the reference

For the orbit I measured how far the background slid past her from frame to frame. Its sign gives the direction of the orbit, and the shape of the curve gives the timing. For the push-in I measured the height of her face against the first frame. Both measures were checked on footage with a known answer before I used them; the notes at the end give the details. In the table, the timing gap compares each clip's progress with the reference's, both scaled from 0 at the start to 1 at the end.

Orbit clip
Direction
Timing gap to the reference: largest, average
Her face in the first frame, share of frame height
Reference attached, run 1
right, like the reference
0.048, 0.017
12.8%
Reference attached, run 2
right
0.037, 0.014
11.9%
Reference with a stand-in that has a front (see below)
right
0.022, 0.009
10.6%
Words only, run 1
right
0.150, 0.072
14.7%
Words only, run 2
left
0.258, 0.099
24.4%
Two line charts. Left: background travel over five seconds; the reference and two reference-driven clips rise together in an S-curve to about 700 pixels, one words-only clip rises in a straight line to about 500, the other falls to minus 600. Right: face height over five seconds for a push-in; the reference ends at 2.97 times, the reference-driven clip at 3.16, the words-only clip at 3.38.

Left: the two reference-driven orbits sit on the reference's S-curve; the words-only runs go straight, or the other way. Right: the push-in, where both versions got close but the words overshot.

The push-in went the same way. With the reference attached, her face grew ×3.16 against the reference's ×2.97, and the timing stayed within about 0.05 of the reference throughout. Written out as “from a full-length shot of her to a waist-up shot”, the move grew ×3.38, ending nearer head and shoulders, with timing within 0.12.

A woman in a camel coat in a stone courtyard, the camera pushing in from full length to waist-up, with the gray-box reference playing in a small inset in the corner.

The push-in made with the reference attached. The inset is the reference, playing in sync.

The reference also set the shot size. The three reference-driven orbits sent with the prompt above started with her face at 10.6% to 12.8% of the frame height. The two words-only runs, sent with one identical prompt, started at 14.7% and 24.4%.

First frames of four clips: two reference-driven clips framed at about knee height with similar face sizes, and two words-only clips, one framed at the waist and one at the chest.

First frames. Top: the two reference-driven runs. Bottom: the two words-only runs of the same prompt.

What the same sentence did twice

The words-only orbit prompt asked the camera to move to its right in an arc, a quarter of the way around her, easing in at the start and easing out at the end. The first run went right at a nearly constant speed. At 4.5 seconds it had covered 87% of its travel, where the reference had covered 98%, so there was no easing out. The second run, from the same sentence, went left, which the sentence rules out, and it stalled between 2 and 3 seconds (from 43% to 50% of its travel) before finishing. Its first frame was also 1.7 times tighter.

The words did get the kind of move right in all three words-only runs: both orbits orbited and the push-in pushed in. What they did not hold from one run to the next was the direction, the timing and the shot size.

When the words argue with the reference

To see which input wins, I kept the rightward orbit reference and added one sentence to the prompt: “The camera circles to the left around her.” The clip went right, following the reference, with a timing gap of 0.042 at most, and it started at the same shot size as the other reference runs (her face at 12.5% of the frame height). The composer's chat reply said it would circle left, and afterwards that it had, so judge the clip, not the reply.

Whether she stays put while the camera goes around

An orbit only reads as the camera moving if she holds still. After a quarter orbit to the right around someone who stays put, she ends in profile with her nose pointing to the left of the frame, as the gray-box stand-in does at the end of the reference. I checked the last frame of every orbit at full resolution.

On Seedance 2.0 Mini, four of the five clips made with the orbit reference ended in that left profile. The five include the one with the contradicting sentence and the two variations described below. In the fifth, she had turned her head back toward the camera. The one run on Seedance 1.0 mini ended with her facing the camera, so she turned with it, and the shot reads more like the courtyard sliding behind her than the camera going around her; its timing gap to the reference was also looser, at 0.091. The two words-only runs each ended in the profile that fits the direction they actually went.

Four close crops: the gray-box stand-in with its nose block pointing left, the woman in left profile, the woman with her head turned back toward the camera, and a woman facing the camera in the Seedance 1.0 mini clip.

Last frames, cropped close. The stand-in and run 1 match. In run 2 she looks back at the camera, and on Seedance 1.0 mini she faces it.

Two changes made no visible difference to where she ended up. Giving the stand-in a front, with a nose, a light stripe down the chest and feet, ended in the same left profile as the plain box, so a plain box is enough. Spelling out the end pose in the prompt (“her body and head keep pointing the same way the whole time… at the end she is in profile, facing the left edge of the frame”) also ended in the left profile. In that one run, though, the timing drifted further from the reference (largest gap 0.121) and the first frame started a little tighter (14.6%).

What a second try gets you

The cost of written camera moves is the retry. In these runs, a second words-only try cost another 25 credits and came back orbiting the other way, framed tighter, with different timing. A second try with the reference attached cost 15 and came back on the same path at the same speed, its timing within 0.031 of the first and its framing within a point. When a move matters, make it once as gray boxes and send every take with it attached. Spend the rewording on the scene, which came only from the words.

Configuration and cost. Every setting and cost above was read from the composer on 2026-09-24, from the line it printed after each send (“Generating 1 item will consume…”). Ten generations: the push-in with the reference (15 credits) and in words (25); the orbit with the reference, twice (15 each time); the orbit in words, twice (25 each time); the orbit with the reference plus the contradicting sentence (15); the orbit with the reference on Seedance 1.0 mini (5); the orbit with the front-marked stand-in (15); and the orbit with the end-pose sentence (15). Total 170 credits. Two sends did not go through, one of them with the chip showing “Couldn't load”; neither was charged, and both were sent again.

Files. Seedance 2.0 Mini clips came back at 1280×720 and 24 fps with a sound track; the Seedance 1.0 mini clip at 1248×704 with no sound. Every clip carries a small “Ai” mark in its top-left corner. The GIFs in this article are 560 pixels wide at 8 frames a second; the measurements come from the full-size clips. Prompt text is quoted as sent.

How the orbit was measured. Dense optical flow between frames (eight per second, frames scaled to 640 pixels wide), taking textured pixels in the side regions and upper 60% of the frame as background, minus the flow in the central band where she stands, added up over the clip. Tested first: a planted shift of 30 pixels read 28.7; on the gray-box orbit, whose rotation is known, it gave the right direction and a timing curve within 0.014 of the true one; on a second, textured test render, the right direction and a curve within 0.05 on average. The size of the background travel depends on how far away the walls are, so it is not compared between different scenes; only direction and timing are.

How the push-in was measured. OpenCV's built-in frontal face detector on frames enlarged 2×, following the face backward from the last frame, where it is largest. Tested first on frames zoomed by known amounts: ×0.5 to ×3.0 read within about 6%, and a planted eased push-in of ×2.90 read ×2.87, with no more than 0.064 of error along the way. The face boxes were drawn back onto the first, middle and last frames of both push-in clips, and onto the first frame of every orbit clip.

Which way she faced. Judged by eye on full-resolution crops of her head in the last frame of each orbit. A profile-face detector passed a test on a frame with a known answer and its mirror image, but on the real clips it put its boxes on stonework and on her coat, so it was not used.

Thrown away or corrected. My first orbit measure estimated the camera's rotation directly from matched features. On test renders with a known 90° turn it read anything from 45° to 846°, some of them in the wrong direction, so no degree figures appear here. In the push-in, my first face tracking started on the largest detection and latched onto the stonework on one try and her neck on the next; the drawn-back boxes showed both, and it was changed to start from the largest face in the upper middle of the last frame. For two orbit clips the first-frame face box landed on a pillar and on her collar, which gave a wrong 18.9% for the clip with the contradicting sentence; tying the search to the column where she stands fixed both, and every box was drawn back. My first reading of which way she faced, made from reduced strips of frames, got four clips backwards; the full-resolution crops corrected it. The direction readings were cross-checked against the end frames: in the words-only clips, the side of her face that ends toward the camera matches the measured direction.

Hot and trending