← Blender → Seedance

Clay control pass · Shot 1A · 4:3 · 24 fps · 288 frames

The Wall

Twelve seconds of untextured geometry that will never be seen by anyone. Its whole job is to settle every camera decision before a single generation credit is spent — then hand Seedance 2.5 a structure it cannot re-roll.

The clay pass itself. Neutral bed, one flat ID colour per mapped subject, one light direction, no text anywhere in frame — everything the model is meant to read, and nothing it is meant to invent.

1.3min

288 frames at 960×720, EEVEE on an M-series GPU

31,430

chips scattered, snapped to one terrain function

0.26%

peak clipped pixels — measured, not eyeballed

0

generation credits spent settling the camera

01

One continuous move, four state changes

Each beat ends on a visible state the prompt can name. Consecutive, non-overlapping, one primary change apiece — three actions in a single range produces omissions, not precision.

Buried in the chips

f1–72 · 0.0–3.0s

Buried in the chips

The lens sits 8 mm off the ground, orbiting one hero chip through 40 degrees. Four chips span a 36 mm frame. No horizon — which a flat bed cannot deliver at any framing, so the bed got mounds, a berm behind the hero, and a shallow trench for the lens to run in.

The wall resolves into a landscape

f72–144 · 3.0–6.0s

The wall resolves into a landscape

The camera pulls back to 450 mm and lifts to 12 degrees, coming to rest on an empty 84 mm depression, dead centre, chips banked around its rim.

The cookie lands

f144–204 · 6.0–8.5s

The cookie lands

Descending at 0.22 m/s — deliberately slower than gravity, which is correct for food and is stated in the prompt so the model is not left inventing a reason. A low ring of chips is shoved outward on impact, easing out rather than in.

The pack shot assembles

f204–288 · 8.5–12.0s

The pack shot assembles

The crane pulls to 1.55 m while the cookie climbs the foreground ridge and tilts up to lean face-on. Four bags rise out of the chips behind it. The last 12 frames hold perfectly still, because the final frame is the one that has to survive.

02

What building it found

The brief's final frame could not be built.

Not “was difficult”. The specification was internally impossible, and it took arithmetic rather than rendering to see it.

camera height 1.55 m · sin 22°
581 mm
cookie centre, resting on the bed
26 mm
vertical drop between them
555 mm
…but the whole camera-to-cookie distance is only
450 mm

The height difference alone exceeds the straight-line distance, so no point on the bed is 0.45 m from that camera. And the nearest bed point actually inside the frame is 929 mm out, where a 55 mm cookie reads 7.4% of frame width against 10.5% for each pack — coming back smaller than the packs, which inverts the entire point of the shot.

Resolution. Keep every camera number exactly as briefed, and give the bed a foreground ridge for the cookie to climb — with the crest height solved backwards from the brief's own 450 mm rather than typed in. On-theme rather than a patch: the creative spine is “pull out until you realise it is a landscape”, and a landscape has relief.

Worth being plain about why this matters more than the render: the fault was in the brief, not the software, and no amount of generating would have surfaced it — only a calculation did. Found before the build, it costs an afternoon of arithmetic. Found after, it costs every take shot against a frame that could never exist.

03

Measured off pixels, not off the solver

The build ends by classifying the final frame by ID colour and reading each subject's extent back out of it. A render that looks plausible and is wrong is the expensive failure — you only find it after paying for generations.

SubjectBrief, widthMeasuredBrief, heightMeasuredRead
Cookie15%15.3%20%21.2%on the nose
Pack, each10%12.2%21%23.1%wider — see below
Pack row50%53.5%on the nose

The packs run about two points over in both axes, and both gaps are the proxy being right rather than the layout being off. 130 mm is the bag's flat width; a gusset with a belly bulge is ~12% wider. And a 65 mm-deep bag's silhouette runs from its near-bottom edge to its far-top edge — 1.3° to 9.3° off the camera axis, which projects to 23.5%, not 21%. Flatten either and the packs stop reading as bags and start reading as cereal cartons.

04

Composition decisions only a built scene can make

Each of these is a thing a prompt can ask for and not get twice running.

Forced perspective is doing the work

A 55 mm cookie is a quarter the height of a 200 mm bag and still reads as the largest object in frame, because it sits three times closer to the lens. Built that way on purpose.

The cookie sits in the gap

Dead centre horizontally, in front of the space between packs 2 and 3 — the widest silhouette separation available, which removes the occlusion ambiguity entirely rather than hoping the model resolves it the same way twice.

The top-down view earns its two minutes

Rolled so the final view axis runs straight down the frame. It is the only view that reads row spacing and the forced-perspective offset unambiguously — and the one that exposed a sinusoidal terrain lattice that looked like gentle relief from every hero angle.

05

The build

Roughly 1,500 lines across two files. config.py holds every number and imports nothing from Blender, so the whole shot geometry prints and diffs without launching it.

config.py

One terrain function, called by everything

The chip scatter, the continuation plane, the pack row and the cookie's path all read this. An earlier version kept a separate vectorised copy for the plane — two places to edit, and one silent divergence away from 31,000 chips floating over their own floor.

config.py

The ridge height is solved, never typed

The brief fixes the cookie at 450 mm from the lens. That number drives its apparent size, so the crest it rests on is bisected out of it rather than hard-coded. Change anything else about the terrain and the published framing still holds.

build.py

Measure the finished frame, don't trust the solver

This is what caught the cookie rotating about the wrong axis — rolling sideways like a falling coin. The render looked entirely plausible and measured 12.2% of frame width against a predicted 15.3%.

Shot 1A of a spec campaign for President's Choice The Decadent. The clay pass is Lane A only — camera, blocking, timing, occlusion and light direction, and deliberately no brand colour, no material and no type. Packaging artwork and all typography are composited over the generated plate afterwards, from the identical camera.