How to previz a video in Three.js or Blender

For AI agents: find the right skill in one call — curl -s "https://varg.ai/how-to/api/search?q=<what the person wants>" returns the matching how-to page and the best skills with install commands, as markdown (Russian works too). Full index: https://varg.ai/how-to/llms.txt. Every page has a markdown twin: add .md to its path. Before generating anything, show the person the options on the how-to page. From a terminal: curl -fsSL https://varg.ai/install | sh installs the vargai CLI (https://varg.ai/how-to/cli.md): vargai search and vargai install <slug> with no key, every varg model after vargai login.

A brief, a reference video or a painting goes in; a crude 3D prototype in Three.js or Blender, a greyscale guide clip and a handoff prompt for a video model come out. The finding that matters most: cuts hold, camera moves don't always. In our own film, 2 of 7 measured moves came back reversed, so name every move in words.

Step 6 of 10 in How to make a video with an AI agent in ten steps. Before: How to design characters and props for AI video. Next: How to animate a previz with AI video models.

For your agent

Install the skill, then paste the prompt.

npx skills add vargHQ/skills --skill code-to-video-previz
Use the code-to-video-previz skill. Build a 3D prototype of this video in code, as a guide for a later AI video generation. Don't generate any video.
BRIEF: <what happens, in your own words>
FORMAT: <16:9 or 9:16>, <seconds> s, 24 fps
REFERENCE: <path to a video, painting or still; or "none">
TOOL: <Three.js in a single HTML file | headless Blender with bpy | "you choose and tell me why in one line">
Show me the beats first. Stop at the contact sheet and wait for my notes.

The guide's own prompt works with nothing installed. It is in The full prompt below, verbatim.

The short version

About this guide

Code to video: how to prototype a film in Three.js or Blender with Claude or Codex, then turn it into a real video.

November 3, 2026. Built from about 1,250 quotes on X, GitHub and in film press, six fresh-agent tests, 400 blind judge calls, and our own footage. Quotes are verbatim, with reach shown. Bookmarks show demand, not truth.

The short answer

Watch: Our own film, previz left and Seedance 2.5 right (MP4)

Our own film, previz left and Seedance 2.5 right. 7.4 s, three shots, one location. The cuts landed within one frame. The third shot is one where the model ignored the previz, covered below.

We'd write a prompt and Seedance would do whatever it wanted. Wrong camera, wrong blocking, ships changing size between shots.

PJ Ace · Runs the Nexus AI series; public workflow docs · 101K followers · 57 bookmarks

i quite like the idea of procedural code for storyboarding and control, and then video to video models for texturing and looksmaxxing.

Andrej Karpathy · Ran his own three.js film test · 4.4M followers · 33 bookmarks

Not everyone agrees, and the sceptics are worth hearing. Roger Deakins says he has done previs once. He also says each director works differently, and "it's not to say one way is right and another way is wrong."

I’m very wary of working to a storyboard, or certainly to a previs.

Roger Deakins · Cinematographer, Blade Runner 2049, 1917

The full prompt

Paste this into Claude Code or Codex. It works with nothing installed. We tested it on fresh agents with no other context; the results are below.

Paste into Claude Code or Codex

Build a 3D prototype of this video in code, as a guide for a later AI video generation. Don't generate any video.

BRIEF: <what happens, in your own words, voice-dictated is fine>
FORMAT: <16:9 or 9:16>, <seconds> s, 24 fps
REFERENCE: <path to a video, painting or still; or "none">
TOOL: <Three.js in a single HTML file with no build step | headless Blender with bpy | "you choose and tell me why in one line">

Work in this order and stop where I say.

1. BEATS. Before any code, write beats in seconds and metres: who, where, which way they face, what happens, what state
   it ends in, and one camera move per beat with its job. If a reference exists, read it first: split it into shots
   with ffmpeg, look at the first, middle and last frame of each, and lay a grid over them to read positions as
   fractions of the frame. Show me the beats. Pick no more than one camera idea I didn't ask for.

2. BLOCKING. Real metres, ground at zero, a 1.75 m person beside anything without a familiar scale. People are a capsule, a
   ball head and a small nose in the same tone as the head, to show their facing. Boxes and spheres for everything else. Build as little as
   explains the action, but keep openings, contact surfaces and anything that tells you which way a thing faces. Don't
   model hero objects, faces, hands or textures. Flat light, no shadows, no text, labels, outlines or UI anywhere in the frame.
   Keep the scene as data separate from a small engine, so a change doesn't rewrite the engine. Everything on screen must be a pure
   function of time t: no clocks, no unseeded random, no state between frames.

3. CAMERA. Name the lens in mm per shot. Write orbits as arcs so they can't pass through the subject. Vary the moves.

4. CHECK WITH NUMBERS. For the first, middle and last frame of each shot, compute: is each subject's head in frame, does anything
   block it, is the camera inside any object. Fix every failure. Then check brightness: in greyscale, anything that passes in front of something else must still
   clearly differ from it, or the shapes merge.

5. LOOK. Render those frames as a contact sheet and actually look at it. Tell me in plain words what each shot shows.
   Fix one thing at a time, at most 3 rounds. Don't call a shot fine without having seen it. If a reference exists, overlay your
   render on it at 50% and report what doesn't line up. Then stop and show me the sheet. Wait for my notes.

6. RENDER. After I approve, render the MP4 frame by frame with headless rendering and ffmpeg, never by screen recording. Confirm
   duration and frame count with ffprobe, then export it in greyscale for the video model.

7. HANDOFF. Write the video prompt: the clip is rehearsal footage, take only camera path, framing, timing and positions from
   it and none of its shapes, colours or lighting. Describe every shot as it appears in the clip. Name each camera move
   in words. Give an end state per beat. Never mention boxes, capsules or stand-ins.

Be honest in your report: what you looked at, what you only measured, what is still wrong. You can't watch video, so tell me which
parts I need to judge by playing it.

Do you need a prototype at all?

Find the one hard thing in the shot, then use the cheapest prototype that pins it down. The clearest rule comes from people who tested previz and say to use it selectively. Matsumaru later made a five-scene piece with previz throughout, so this is about choosing shots, not avoiding it.

a composition you absolutely must hit: previz. Some image in mind but not settled: storyboard. B-roll you are happy to leave to the AI: text + references only.

Keigo Matsumaru · AI anime director, for people who came to film through AI. Posts previz vs no-previz comparisons · 45.5K followers · 57 bookmarks · translated

Perhaps the order is: say in words what it means and why it matters, and only if that fails does the idea of images, references, and then previz come up.

Int.Lab · Filmmaker, tested Codex + Three.js and argues against overuse · 1,797 followers · 35 bookmarks · translated

The hard thingUseWhy
Nothing exact: one or two subjects, randomness welcomeNo prototype: a prompt and a start frameA previz adds cost and can make motion worse
The idea and look of a sequenceStoryboard stills, rough onesFast to redo, and finished images come back as a "moving storyboard"
Timing, positions, crowd paths, side-on shots2.5D conte in Remotion or HyperFramesMinutes to make. Not for orbits, occlusion, height or hands
An exact camera path, exact counts, spatial continuity, long takesA 3D prototypeThis is what 3D is for
A human performance a real camera could shootA phone act-outCarries weight and timing better than a stand-in. Nobody has published a same-shot test against 3D
A performance and an impossible cameraAct-out, then mocap, then 3DClean up by hand: feet slide

it is useful though but only in forcing seedance to follow a fixed camera trajectory

Dara Chaw · The sceptic, on one anime shot. Later conceded ads, fashion and fight scenes · 469 followers · 60 bookmarks

IMO, that’s a bad idea if you want realism. Lower-fidelity input lets the model translate your intent better.

Andy Orsow · On high-fidelity 3D driving AI video · 10.8K followers · 777 bookmarks

Three.js, Blender or something else?

This is the clearest one-paragraph answer we found, from someone who wasn't using previz at the time and tried it later:

If you are locking down acting, camera, timing and speed, I think you should build it properly in Blender or similar, but that costs the biggest advantage of AI production, the speed to finish. A simple previz in three.js for placement and rough motion, letting the AI model fill in the rest, is easier and, I feel, fits a workflow right away.

@tebasaki3D · AI anime maker, not using previz when writing this, tried it later · 4,925 followers · translated

PickWhenThe catch
Three.js (default)Rough placement and the model fills in the rest. Live and editable, no install, works on a weak laptop or a phone. Many shots in one diffable file. A code-rendered finalNo rigs. Agent-written human animation looks stiff
BlenderYou must lock acting, camera and timing. Rigs, Mixamo or mocap, real assets, heavy sets, stills for storyboards. An artist will open the fileMore tokens, and one local install or the bpy package
Cinema 4DYou already own it, and a hero object needs a rig and motion blur (Maxon's official MCP)Paid. The window has to stay open. No headless route
Unreal + MetaHumanFast human bodies, big casts, and you're on a Windows GPUAgent + Unreal + Seedance hasn't been shown joined end to end
Remotion or HyperFrames2.5D timing contes before generation. Type and finish after itNot for real 3D. Remotion has licence limits above 3 people
Gaussian splat worldThe place is the hard part and nothing touches the setOne full report, from a World Labs employee

We found nobody using Unity, Godot, Rhino or SketchUp for this, and Houdini only for simulation. Those searches were few, so treat that as "not visible", not "impossible".

The main difference is that Blender has everything mapped accurately in a 3D space where you have exact control of each angle.

Theo Dudley · Director of Nexus, on Blender vs plain storyboards. Built the film in Blender in about 3 days · 748 followers

I just need primitives. I don’t need a super high def rendering. I want to block scenes and that’s it. Working in three.js means a web based 3D realtime environment I can manipulate and it’s much faster

Henry Daubrez · Founder of Oddkid, previously a filmmaker at Google Labs (per his bio) · 60.9K followers · 3 bookmarks

the truth is any 3D program with MCP can do it.

Aharon Rabinowitz · About 20 years in Cinema 4D; published the full process · 22.1K followers

Speed and cost

"Three.js is much faster" is overstated once you count the agent's thinking.

Creating it is faster in Three.js than in Blender, but AI inference during scene creation takes most of the time (about 10 minutes). A 30-second previz took about 1:30 in Three.js and about 2:30 in Blender, so creation speed itself wasn't that different.

Keigo Matsumaru · Timed both tools · 45.5K followers · 1 bookmarks · translated

Cost is a different story. One run, same model and same prompt, showed $0.97 for Three.js and $20.39 for Blender through MCP. It was a finished V8 render, not a previz, and Blender's metal looked more solid. Treat it as a direction, not a ratio.

Blender is incredibly powerful, and when combined with AI, it can deliver much more realistic results than Three.js.

Rubens Soto · One run on a finished V8 render, not a previz: $0.97 vs $20.39 on screen · 2,687 followers · 7 bookmarks

Video generations went down, but remaking the previz melted my Claude credits.

@AiNamanari33743 · On what previz does to the bill · 3,898 followers · 378 bookmarks · translated

Our test

The choice doesn't have to be final. Our skill writes one scene file that both tools render with the same lens maths. Every key point landed within 0.01% of the frame across the two. 96 frames at 720p on an Apple Silicon laptop:

RendererTimeUse it for
Blender Workbench8 sThe clip for the video model
Three.js, headless Chrome, software WebGL18 sThe clip, or a live preview
Blender EEVEE35 sStills with real shadows
Blender Cycles, CPU, 48 samples15–24 s a stillA final render. About 25–40 min for this clip

The same staged scene rendered in Three.js, Blender Workbench, EEVEE and Cycles, side by side

One scene file. Left to right: Three.js, Workbench, EEVEE, Cycles. Workbench uses its own studio light, which is what you want for a guide clip.

Set it up

Three.js needs nothing but a browser. For an MP4 you need headless Chrome and ffmpeg, which the agent can drive. Step frames through time and pipe them to ffmpeg, which is how the creator of Three.js made his own release video.

It rendered all the clips using puppeteer and final video with ffmpeg.

Ricardo Cabello (mrdoob) · Created Three.js. Made his release video with Claude CLI · 91.3K followers · 1 bookmarks

Blender has three routes.

RouteWhat it isUse when
Headless bpyBlender as a Python package. uv run --python 3.13 --with bpy==5.2.3 python script.py. We tested this oneRepeatable builds, nothing to open
mcp-for-blenderCommunity MCP by Siddharth Ahuja, formerly blender-mcp, 33K stars. A look tool through camera and angles, asset libraries, 3D generators. Turn telemetry offYou're directing an open scene and the agent needs to see
Blender Lab MCPFrom the Blender project, for Blender 5.1+. Minimal: Python, summaries, screenshots, docs search. It warns that it runs code "without any guards" and recommends a virtual machineInspecting files, API questions

"Official" on X is unreliable, so ask for the link. No neutral test of MCP against headless exists. Our view, which is judgement and not data: MCP for directing, headless for repeatable builds.

Claude or Codex? No clear winner. Reports favour Opus for reading like a film and Codex's models for speed and sometimes spatial accuracy, and each has counter-examples. In our runs both finished the job. The practical difference we hit: Codex's default sandbox blocked Chrome's WebGL, so it fell back to an SVG renderer. Run it with a sandbox that allows Chrome, or use Blender there.

How to prompt it

Write seconds and metres, not adjectives

I write seconds and distances because the parts you can't write are precisely the parts that are vague in your own head.

Atsufumi Kashima · AI Film Hackathon Tokyo prize (self-reported); wrote previz-maker · 110 followers · translated

Adjectives are where the default look lives. Every adjective you replace with a number is a decision you take back from the model.

Florence (@flxrnc) · Ran the same brief with and without numbers · 3,333 followers · 8,768 bookmarks

A cut in this form leaves nothing to guess: "Bartender takes a bottle from the top shelf, 3.4 s. Camera behind the customer's left shoulder, slightly above, locked. 0.9 s: right arm starts to extend. 1.25 s: hand reaches the bottle, 1.1 m from the shoulder. 2.0 s: tilts it over the shaker and holds." That's adapted from Atsufumi Kashima's public prompt.

Add a "do not add" list and a stop rule. Agents add things nobody asked for and will polish forever.

a "do not add" list. without it the AI keeps adding things nobody asked for.

Prasenjit (@prasenx) · Builder-and-critic loop, with what broke · 23.3K followers · 18 bookmarks

Geometry: as little as explains the action

The more detail you put into the previs, the more literally Seedance follows it.

Grand Visions · Same prompt, two previzes, video shown · 140 followers · 361 bookmarks

I omit rivets, leaves, facial features and clothing wrinkles, and keep direction, joints, openings and contact surfaces.

Cell (@cellinlab) · Ten Three.js cases with what failed in each · 35K followers · translated

Ambiguity ruins the pass; crudeness does not: a bent lamppost comes back as a snake, loose limb blocks as extra people, an unmarked car driving backward.

Scenario · Vendor skill with test notes, MIT

Don't let the agent model hero objects, faces or hands. It's the one thing every expert agrees on. Get them from Tripo, Meshy or BlenderKit, or say them in the prompt.

Still very far away from the concept art image.

Sebastian Aaltonen · 30 years in 3D rendering (per his bio), Codex with Blender MCP · 58.9K followers · 33 bookmarks

Tripo plus manual cleanup is still the fastest accelerated modeling workflow right now.

Kiaran Ritchie · Author of The Art of Rigging, ex Epic Games (per his bio) · 8,298 followers · 1 bookmarks

Honestly, Claude is really bad at modeling objects, so some of the assets are free ones, and some I made myself with 3D AI tools.

Liminal space (@greeimm) · Maker of a piece a tool author showcased · 1,194 followers

Staging: block once, then cut

Pros work in the same order a good prompt does.

Block it out first without animation. Do a series of static compositions in the same scene file.

fxguide on Chris Edwards's previs guide · Edwards is co-founder and CEO of The Third Floor. 2008 notes, not his exact words

But in computer animation, it’s actually camera, action, lights.

Patrick Lin · Director of photography, Pixar

Block the action once in world time and make each shot a camera on it, so continuity comes free. Replace hard animation with a before pose, an after pose and a cut.

Stand-ins are the live argument. Capsules let the model invent the gait. Jointed mannequins hand it a gait to copy, stiffness included. Half-animated limbs are the worst of both. Start with capsules, and use joints when a specific pose or contact point has to survive.

A figure with limbs hands it a gait; a figure without limbs hands it only a position, a height, a pace and a heading, and the model invents the body.

Scenario · Vendor skill with test notes

the posed people gave it stiff motion to copy. we replaced them with blocks and used image refs for the look.

David Israel · Hosts ImagineArt Live, a live AI filmmaking stream · 823 followers · 175 bookmarks

If the doll's stance is broken, that break appears directly in the video. Designing the stance mattered most.

Maru999 · The counter-example: jointed dolls for a weapons fight · 138 followers · 1 bookmarks · translated

Camera: only what a real camera could do

We try not to do anything a real camera couldn’t physically do.

Patrick Lin · Director of photography, Pixar

Get accurate lens settings and camera settings. Try and use only lenses that could be used on the real shoot.

fxguide on Chris Edwards's previs guide · Edwards is co-founder and CEO of The Third Floor. 2008 notes, not his exact words

you find it’s an 18mm, and it’s a close up of an actress or something! It drives me insane

Roger Deakins · On previs cameras

shooting an over on a 32mm or a 35mm and a closer shot on a 40mm or a 50mm. That seems to me more reflective of the human view. But I have no rule.

Roger Deakins · On lenses, from his forum

WantLens (full frame)Note
Wide interiors, orbits24–30 mmBoom instead of tilting, so verticals stay straight
Neutral, walking35 mm
Over the shoulder32–45 mmDeakins: 32 or 35
Closer shot, medium40–50 mmDeakins: "But I have no rule"
Close-up, compression65–85 mmChoose it for what the scene is about, not what fits

Light: leave it out, unless it is the shot

A guide clip should say nothing about light. Keep it flat and put light in the image references and the prompt. Deakins himself used a shape model for light, not for look:

It was just a basic shape model that I could light with a moving light.

Roger Deakins · On lighting a shape model for the VFX team

When light does matter, work in the order Stephen Burum gave: shadow, then separation, then fill. Keep one clear direction.

There’s no primary direction in the light, no shape, no sculpting.

Jarin Blaschke · Cinematographer, Nosferatu

The difference between a day and a night interior is not the exposure, but the difference between the volumes of blacks and highlights in the frame.

Stephen H. Burum, ASC · Cinematographer, The Untouchables

Write it as numbers: direction, height, ratio (2:1, 4:1, 8:1), Kelvin (candle 1,850, tungsten 3,200, daylight 5,600). In the one test we found, "backlight", "silhouette" and "rim" read on screen, while "Rembrandt" and "chiaroscuro" didn't.

Make it look at its own work

they can't easily audit their work because they aren't able to efficiently and natively perceive videos or play games within them.

Andrej Karpathy · On his own three.js test · 4.4M followers · 12.1K bookmarks

None of these 20 check the output. Without something that reads the rendered frames back, the agent is just generating blind.

Jimmy Young · Builds a screen-memory product for agents, so has an interest. Reply under a 12,614-bookmark list of 20 repos · 295 followers

The loop that works: numbers first (in frame, not blocked, camera not in a wall), then first, middle and last frames of each shot on a contact sheet, then a fresh agent that didn't build it, then a person. Stills catch errors. They don't catch taste or pacing, so you have to play it.

The agent that built something is the worst judge of its own work.

Leon Lin · On critics · 33.1K followers · 1,067 bookmarks

a model saying the render looks fine and a motion designer saying the easing feels off are pretty different checks

Dima (@CreativeDima) · On self-checking agents · 688 followers

I was happy with it after 22 iterations.

Ricardo Cabello (mrdoob) · Created Three.js · 91.3K followers · 1 bookmarks

Count your follow-ups and post every prompt with the work. Receipts convince people; "one prompt" makes them suspicious.

Florence (@flxrnc) · On one-prompt claims · 3,333 followers · 8,768 bookmarks

When the first result is far off, restart rather than fix.

if the first result doesn’t get reasonably close to the aesthetic you want, it’s often better to start over with a new prompt rather than keep trying to fix it.

Dilum Sanjaya · On when to stop fixing · 76K followers · 122 bookmarks

Keep scene data apart from the engine. Have the agent build a small engine once and then change only numbers. This is where the token bills come down. One 30 s Three.js previz took 10% of a $200 plan for Keigo Matsumaru, who traced it to an agent loop and expected it could be cut a lot.

You have a reference video

Decide first what you're taking. If you own the clip and want the same camera with a different world, feed it straight in as @video1. A 3D prototype earns its cost only for something specific: an exact head count, contact points, continuous camera speed across clips, sync to music, or changing the camera or the set.

With a reference video it traces cuts, composition and motion almost unchanged

aratama · The cleanest public A/B on references · 1,900 followers · 5 bookmarks · translated

He found the catch: final quality was dragged to the reference's level. Stills plus a prompt gave better camera and acting but lost the sync.

To copy a shot as a 3D prototype

  1. Split and look. Find cuts in code, because agents only see frames. Lay out first, middle and last frame per shot.
  2. Read the picture. A 2D tracker reports pan, tilt and zoom as the image shows them. Good for describing a shot and for checking a generated clip against its previz. Bad for setting camera keys when the shot has parallax, because a dolly hides a pan.
  3. Solve the camera, if it really moves. Blender's motion tracker runs headless on CPU. It needs no GPU and no window, and it gives you lens, path and tracked points in 3D. You supply gravity (where's the horizon?) and scale (how big is something?).
  4. Read the frame. Put a grid on first, middle and last frames, and read subjects and big masses as fractions of the frame. On a clean frame an agent can read a lot: in a sealed test on 12 synthetic frames with hidden answers, a plain prompt got the focal length within x1.44 and the shot size right on 11 of 12. Real film will be worse.
  5. Stage it around the solved camera, with detail only at depths where the reference has it.
  6. Compare. Overlay at 50% for staging, on several frames. Your camera against the solved path for the move.

Our test

A fresh agent with only our skill copied a 5.3 s shot from the open film Tears of Steel. It found the shot isn't a zoom: a 25 mm lens dollies 1.6 m forward and right while panning left 8.8° and tilting down 5.8°, sliding past a dark cloth to find two people. "Slow push-in" would have missed all of that.

Watch: A Tears of Steel shot on the left, the code prototype on the right (MP4)

The film on the left, the prototype on the right. Tears of Steel (CC-BY) © Blender Foundation.

CameraSolve of the filmPrototype
Lens25 mm (flat 24–28)25 mm
Pan0 to −8.76°−0.02 to −8.79°
Tilt−6.66 to −12.50°−6.65 to −12.50°
Height1.771 to 1.588 m1.770 to 1.588 m
Roll+0.69 to −0.45°0 (the format had no roll then; it does now)
Film's tracked points through this camera0.32–0.75 px1.76 px median

The camera copies the solve by design, so the table shows that the path transferred, not that it's independently right. The independent checks: on a test scene with a known 25 mm camera, the same method returned 24.86 mm, and the film's rail came out at 1.17 m. Metres are good to about ±15%. It took about 50 minutes on a busy machine, most of it staging. The clip itself was never played by anyone.

The solve fails on locked-off shots and nodal pans (no parallax), when a moving subject fills the frame, and on bare grey renders. Nobody we found documents a solved camera reaching Seedance with a measured match, and we haven't run that either. Body motion is less ready. Motion2MixamoRig needs one person, head to toe, the whole time. Watch the licences: GVHMR, SMPL and SMPL-X are non-commercial even under permissive repo badges.

Foot sliding is still something I'm working on.

MaxLiu09 · Author of Motion2MixamoRig · 1,143 followers · 43 bookmarks

The line between studying and copying

But I'll take the grammar wherever I can get it.

Brian De Palma · On Hitchcock, New York Magazine 1980

Study by copying, publish by transforming. Take one shot's move, height and rhythm into your own scene, never a sequence's staging plus its look. This isn't legal advice, and no case squarely covers a camera move. In the US, Rentmeester v. Nike treats pose, lighting and angle as free in isolation but protects their combination, and Dr. Seuss v. ComicMix cuts against "new skin on a meticulous copy". The UK and EU are stricter. fal, BytePlus and Dreamina all make you warrant rights in what you upload. ShotDeck and Shot Cafe ban automated tools, so a person picks those frames.

You have a painting or a still

Cinematographers read paintings. They rarely copy them.

You look at an Edward Hopper painting and you can study where the light sources are

Sam Mendes · Director, on Road to Perdition

we studied the lighting effects achieved in the paintings of the Dutch masters, but they seemed a bit flat — so we decided to light more from the side.

John Alcott · Cinematographer, Barry Lyndon

suggested that we light most scenes to look natural, so that when we show the audience how Caravaggio saw things through his own eyes, it looks and feels different.

Vittorio Storaro · Cinematographer, on a film about Caravaggio

Exact staging is possible, and expensive. For Shirley, Gustav Deutsch matched Hopper's pictures for "at least one frame", which took tilted furniture and a camera that couldn't move three centimetres.

[In Hopper's paintings] there are no right angles, or else two to three suns producing light effects.

Gustav Deutsch · Director, staged 13 Hopper paintings in Shirley · translated

Our test

Don't eyeball it. Read the picture. We staged Caravaggio's The Calling of Saint Matthew twice. Guessing the camera and positions put key points 9 to 22% of the frame off. The second time we placed everything from coordinates read off the picture, so those points land where the painting has them by construction. That alone proves only the maths. The real checks are the overlay and sizes nobody asked for: the table came out 0.76 m high.

First try: small figures and a bright wall that doesn't match the painting

Guessed camera. Right idea, wrong picture.

The picture-coordinates render overlaid on the painting at 50 percent

Read from the picture, overlaid on the painting at 50%.

The Calling of Saint Matthew beside its grey-box staging

Painting (public domain) and staging in Blender EEVEE: the diagonal shadow, the dark upper left, the window, who points at whom. The light is still too flat. That's a judgement call the numbers can't make.

Watch: A 4 s push-in through the staged Calling of Saint Matthew, rendered in EEVEE (MP4)

Once it's a scene, you can move a camera through it. A 4 s push-in rendered in EEVEE.

The method

  1. Put a grid on it and read everything as (u, v), fractions of the frame.
  2. Find the vanishing point, if the picture has straight lines. Paintings rarely centre it, and sizes drift across the frame if you assume they do.
  3. List what matters: figures (head, feet, hands), big masses, the light and its shadow edge. Note what's dark.
  4. Get depth from a known size. A person 1.75 m tall with the head at v = .38 and feet at v = .93 stands 3.1 m away on a 35 mm lens. The feet then give the camera height.
  5. Check a size you didn't ask for. If a table comes out 1.4 m tall, something's wrong.
  6. Place everything by picture coordinates. A picture point plus a depth gives one world point.
  7. Use one hard light and cut it with flags, as on a real set: planes that cast a shadow where you need the edge and that the camera can't see.
  8. Overlay it, and hold a few points back as a check. Move on when the composition holds. Paintings cheat on perspective, so nothing will fit everywhere.

Our test

A fresh agent with only the skill staged Vermeer's The Music Lesson: 372 boxes, 85 of them floor tiles. It fitted the camera to 41 tile corners, so the lens came out at 36 mm and the eye at 0.99 m, a seated painter. Of 9 points read from the painting and not used for placing, the worst was 2.7% of the frame and most were under 1.5%. Sizes nobody asked for came out sane: chair seat 0.44 m, ceiling 2.93 m, virginal 1.71 m wide.

Vermeer's The Music Lesson beside its 3D staging in code

Painting (public domain) and staging, rendered by three.js. No image model drew any of it. It's still wrong in places: one hard light where Vermeer has soft window light, a stepped carpet, a faked mirror.

The staging overlaid on the painting at 50 percent

The overlay. Look here first.

Watch: A 6 s push-in, 1.37 m into the staged Music Lesson room (MP4)

Then move the camera: a 6 s push-in, 1.37 m into the room.

For a photo of a real place with straight lines, use fSpy to get the camera, then build around it. Keep rough references rough when they go to a video model:

If you reference a highly finished picture, Seedance 2.0 tries hard to keep the shape of that still, and motion can go stiff or jerky.

@Ryuki_Yano · Storyboards for Seedance · 1,467 followers · 1,663 bookmarks · translated

You have nothing

With no reference, agents reach for their defaults. "dark navy space, a glowing halo ring, bloom, particles", as flxrnc's untouched run came back.

I asked for a pangolin, an armadillo and a scorpion with nothing to work from. All 3 came out as generic toys. Then I gave the same model one clip of a real V8 simulator and it rebuilt the engine panel by panel.

Elvar · Skill author, with specific bugs · 40.5K followers · 5,556 bookmarks

The most important thing I learned is that the references carry most of the quality in your prompt.

Leon Lin · Published repos, costs and limits for a 45-hour build · 33.1K followers · 1,067 bookmarks

The images made discrepancies easier to describe. They did not automatically turn the illustrated shapes into the right meshes.

Ben Sun · Ex-Ogilvy (per his bio), the most honest failure log we found · 84 followers

Both are true. References fix the look, not the structure. Structure comes from the beats and the numbers. Before any code, these need an answer in numbers or names: What's the one image the viewer remembers? Who has power in the shot? Where is the eye at each moment? What's in the foreground, middle and back? Where does the light come from, and what stays dark?

Make it a real video

Three routes, from people who've run them.

RouteWhat you getThe catch
Guide clip as @video1Camera, positions, cut timing. The most common routeCopies stiffness too
Storyboard pages as image referencesMore natural motion, cheaper than a video referenceLooser control
Code-rendered finalNo video model at all. Exact and repeatableSuits machines, products and flat characters, not people

Blender is notoriously stiff and unnatural.

PJ Ace · Why they swapped the clip for boards on one film · 101K followers · 133 bookmarks

It made all the cuts and camera work feel way more natural.

PJ Ace · On one film; later called it a per-shot choice · 101K followers · 67 bookmarks

Users writing in Japanese, Chinese and English reached the same split on their own: video carries camera, path, position and timing. Images carry identity and look. Words carry what boxes can't show.

Omni-reference: the [3D] model indicates position, the images constrain style.

Cell (@cellinlab) · The division of labour · 35K followers · 1 bookmarks · translated

The reference video is not a spec channel, it is a pixel channel.

7ohnson · VLM harness, published cut tables and costs · translated

What we measured

We ran our camera tool over our own launch film: 10 shots, Seedance 2.5, grey previz. It's one film, not a controlled test.

Three pairs of previz above and Seedance output below, with matching layout

When it works: layout, hands and pose held. Previz above, result below.

Two previz shots from behind above; below the model turned both characters to face the camera

When it doesn't: both previz shots are from behind. Our prompt described faces, and the model followed the prompt.

any inconsistency between previz and prompt weakens the effect.

Keigo Matsumaru · On long prompts over a previz · 45.5K followers · 40 bookmarks · translated

the previz gives you a layout to work from. you still need to check whether Seedance follows it

NΞXUS (@NEXUS_TO_NOVA) · Six elders on a magic circle. Unrelated to PJ Ace's Nexus series · 31.1K followers · 32 bookmarks

Seedance still isn't perfect at matching the reference but it's close.

Reid Hannaford · Creative director in Brooklyn · 3,399 followers · 1,160 bookmarks

The handoff prompt

For Seedance and similar models

@video1 is rehearsal footage: stand-ins walked the scene so camera, timing and movement could be locked. Take from it
ONLY the camera path and framing, the timing of every action and cut, and where each element is and how it moves. No
shape, proportion, surface, colour or lighting from @video1 belongs in the final frame. The result must not look like @video1.

@image1 is <character>: <identity details in words too>. @image2 is <place>: <what is where>.
Only these people exist: <count and names>.

Look: <one line from the moodboard: film stock, lens feel, palette>.
Light: <direction, source, Kelvin or a named reference>. Ignore any lighting in @video1.

N shots, hard cuts exactly as in @video1:
1. 0.0-3.5 s. <Shot size and angle as the previz shows them>. <Who does what>. Camera: <the move, in words>.
   End state: <position, facing, what they hold>.
2. 3.5-6.0 s. Continuing from that end state. <...>. Camera: <...>.

Where a stand-in's proportions differ from the real object's, keep its path and timing and give it true proportions.
If the words and @video1 disagree about position or motion, @video1 wins.
No text, letters, numbers, logos or UI. No music. No dialogue unless written above.

A prompt that names the proxies' shapes ("the box figure becomes", "each cone is") anchors the model on those shapes and it renders them as they are.

Scenario · Handoff rules with test notes

Seedance 2.5 seems to read text in the video and reflect it in the dialogue.

Yumi (@japaneseg_yumi) · Why no text in a previz · 107 followers · translated

Grey or colour? Nobody knows yet

This is the biggest open question, and our own skills had it wrong by calling grey a rule.

Anytime I let OPUS color the blockout it ends up following the blockout way too verbatim. As soon as I convert it to grey, it works instantly

A.I.Warper · For grey · 38K followers · 9 bookmarks

An all-gray playblast has lost identity.

Scenario · For colour

To be clear: the 'grey is better' half is reasoning, not an A/B test.

7ohnson · Honest about the evidence · translated

Our default: greyscale, with characters clearly apart in brightness. Use identity colours with a written legend when several characters must stay distinct. White clay and depth-only clips also work. Whichever you pick, test both on one short window before a long run, because it varies by model. Two pros found motion blur helps on fast objects, so a clean viewport capture can be too clean:

I found that Seedance read the propeller motion much better if I had motion blur, so a simple hardware rendered playblast would not cut it.

Aharon Rabinowitz · Cinema 4D + Seedance · 22.1K followers · 15 bookmarks

motion blur in the previz is inherited by the AI-generated video.

Kaku Drop · Tokyo director and CG artist, Unreal previz · 15.8K followers · 865 bookmarks · translated

Rank the takes with an LLM judge

The short answer

Clear criteria are necessary, and they aren't enough. They also have to be specific: with vague points like "fit for purpose", the pretty film won every comparison, and with specific ones it dropped near the bottom. Bias also comes in through what the judge is shown, how it's asked, who it is, and what it's allowed to answer. Fix all of that, then measure it against people.

Simply asking an LLM to score the outputs was not reliable enough, even with a very descriptive evaluation rubric.

Ghita Houir Alami (Notion) · Notion's production write-up: panel, pairwise votes, Elo, then a calibrated judge · 2,982 followers · 116 bookmarks

Shipping an unverified LLM judge is the fastest way for people to lose trust in your evals (and your work in general).

Hamel Husain · Teaches evals, says he's helped 30+ companies. Sells a course · 64.8K followers · 98 bookmarks

What we measured on this task

Our test

We made a set where the right answer is known: one brief, a correct blockout and 11 copies with one seeded defect each. Then 360 blind calls to Sonnet 5.5, each in a fresh context with random file names, and 42 through Codex.

Two contact sheets: on the left a plain correct grey blockout, on the right a lit, coloured one where the woman is missing from the last row

The test that matters most. Left: correct, grey. Right: lit and coloured, but the woman is gone from the last row. Asked which is better, the judge picked the right-hand one 6 times out of 6.

TestWhat the judge didWhat fixed it
Two identical images, must choosePicked the first 12 of 12 (Codex 4 of 6), saying it was "picking A by default"Allow a tie: 12 of 12 ties
Identical images, one labelled "made by a senior previs supervisor"Picked the label 12 of 12 (Codex 6 of 6). "Your own earlier work": 8 of 12Hide it. "Ignore who made it" still gave 4 of 6. With a tie allowed: 0 of 12
Lit and wrong vs grey and rightPicked lit 6 of 6 (Codex 4 of 6)Evidence first: 0 of 6. Stating the purpose: 1 of 6. Greyscale inputs: no help, 6 of 6
A 1 to 10 score, aloneAverages from 3.7 to 6.3. 4 of 10 defects scored no lower than the correct one. A missing person got 6.3 against 6.0Don't use it
Yes/no questions, as a gate57 of 58 defect runs failed something. 7 of 8 correct runs failed nothing. Claude and Codex both workedKeep. Read the evidence on any failure
She walks through the desk between sampled framesThe sheets are the same, so no judge can see itOur audit script catches it
A question we wrote before seeing real work"Head visibly higher" failed all three grey real runs, because those agents showed it differentlyReworded after looking. This is criteria drift, and it still caught the seeded defect 3 of 3

Then on our four real runs from the tests below, as a guide clip:

Run"Which is better?"Evidence first, vague pointsEvidence first, specific pointsYes/no passes of 10, three runs
A, the pretty lit film3.03.00.255, 5, 5
B, master prompt, Three.js1.251.52.59, 9, 9
C, master prompt, Blender1.751.52.59, 10, 10
F, master prompt, Codex000.757, 7, 7

The middle columns are wins out of 3. Same model, same pictures, same stated purpose. Comparing point by point wasn't enough: with vague points ("fit for the purpose", "staging and readability") the pretty film still won everything. It dropped only when the points were specific and named what a guide clip rules out, such as "flat light with no drama, because the video model must not copy it". Our tool's own end-to-end run gave the same result: vague, A 3.0 of 3; specific, B and C 2.5 and A 0.5. What this doesn't show: it's one brief with defects we seeded, no human compared the rankings, and it says nothing about taste.

Where bias comes from

BiasWhat's been measuredWhat helps
PositionVerdicts flip on swap: 46% in the first paper, 62.5% in a reproduction on similar models. On UI pairs, GPT-5.1 was right 35.67% with the winner first, 81.33% secondBoth orders, disagreement is a tie. GPT-4V on aesthetics: 64.48% to 86.70% (experts 85.00%), though fewer pairs get decided. It drops the pairs where position decided the verdict. It doesn't make the judge better: on all pairs, agreement stayed 0.51 to 0.54
PolishBlack padding +10.4%, brightness +5.9% with no change in content (GPT-4.1-mini, worst setting of each). Defining the bias to the judge cut them to +5.6% and +0.8%, but didn't remove them. In one SeeCut calibration (one project, a handful of versions), Gemini watching the video chose a fake cut in both orders. Its foreground really was better; its background was a placeholder gridFail named defects first, then compare. Same layout for every take
Labels and text in the imageNumbers written on an image shift ratings about 2.5 times more than blur and JPEG damage on average (2.09 vs 0.85). Extreme blur alone moved them about as muchRandom names. No take numbers, scores or captions
Earlier scoresd up to 0.71 over 192,000 attempted evaluations. In a separate test with human labels, they blocked 48% of corrections (GPT-4.1). A warning didn't reduce the score shift on the one task tested, though it did remove the accuracy loss on labelled dataHide prior scores, attempt counts and the builder's summary
Self-preferenceBlind writing judgments: Sol +7.7, Opus 5.5 +3.4, GLM +1.8 of 100 (vendor). GPT-4 is 73.5% accurate at telling its own summaries from others'. We found no test on imagesNever the builder's session, ideally another lab. Fresh critic +13.2 to +23.8, self-check −3.2 to +2.7 (18 tasks, vendor study, and one model inflates it)
Forced verdictsPairwise judges pick a winner even when their own scores show almost no gap, and 13.6% of preferences flip between runs (two OpenAI mini models, 29 tasks)Allow ties. Report tiers, not a list
Shared blind spotsOn text inference tasks, nine judges behave like 2.0 to 2.5 votes, and the best single one matches or beats them. On 1,460 Text Arena battles where both picked a winner, judges agreed with each other 79.4% and with the person who voted 56.9%Two model families as an alarm, not a vote. Calibrate on people

One caveat: a bias all the judges share cancels out of these comparisons. Only an outside reference, like human ratings, can measure it.

Towards AI (ToneBench) · 28,200 blind writing judgments. Vendor · 41.1K followers · 2 bookmarks

The separation doesn't immediately eliminate that leniency on its own; the evaluator is still an LLM that is inclined to be generous towards LLM-generated outputs.

Prithvi Rajasekaran (Anthropic Labs) · Built a separate visual critic

On a three-minute song clip the fresh reviewer scored every cut 0.5 to 1.5 points above the owner, and stopped moving at about 7.5.

Tal Siach (Take One) · Logged reviewer vs owner gaps · 9,258 followers

What a judge can't see

Give the job to whoever can do it. Some of these numbers come from older models, and we found no run of these defect tests on Opus 5.5, GPT-6 or Gemini 4.

DefectJudge reading framesUse instead
Parts passing through each otherA mug sat inside a body on 373 of 420 frames and passed every sheetA geometry check on every frame
Motion, speed, directionGemini 3.1 Pro 60.0%, GPT-5.6 Luna 15.0%, open models at most 11.7%, chance 6.25%, humans 91.3%. More frames didn't close the gapA solved camera or tracked path. Then your eyes
Things popping, morphing or laggingSpearman with people: GPT-4o 0.176, Gemini 1.5 Pro −0.172. A trained model reached 0.803A scorer trained on video, or a person
Cuts and pacingCounting cuts, % right on a 4-option question (chance 25): GPT-4o 34.5, Gemini 1.5 Pro 58.6, people 87.5A shot detector. Pacing is yours
TextVision models can rewrite wrong text into plausible text (tested on documents, up to 10% of short words)OCR and a diff
Counting thingsFine on our stand-ins. 17.05% on altered familiar subjects in an adversarial setScene data, or a detector
Which of two close takes is betterDesigners' taste: 0.55 to 0.66 where a judge is order-consistent, against a 0.741 ceiling. "More real?": Gemini 3.1 Pro 48.6%, human experts 86.4%A person

The model can review the sheet. It cannot review between the frames, and it cannot review taste

m4lka · Logged 100+ defects across ten Three.js and Blender films · 7,244 followers · 302 bookmarks

Video and audio judges hallucinate problems, so verify every claim against frames.

Elie Steinbock · Published the prompt his agent wrote from making his product videos, about 15 walkthroughs plus launch films · 16.8K followers · 539 bookmarks

Native video isn't a clear escape: counting synthetic bounces, one model scored 19.6% with native video, 29.3% at 4 fps and 68.6% with oracle keyframes around each true bounce, but on state changes those keyframes dropped it from 36.8% to 6.3%. Use code to find the moment, and test whether showing those frames helps.

How to write the criteria

Criteria drift raises serious questions for tools that assume the independence of evaluation from regular human observation of model outputs.

Shreya Shankar · Who Validates the Validators? Named criteria drift · 59.6K followers · 4 bookmarks

Reviewers can become so focused on checking each item that they overlook problems outside the rubric.

Hamel Husain and Shreya Shankar · Evals FAQ · 64.8K followers

Including phrases like "the best designs are museum quality" pushed designs toward a particular visual convergence

Prithvi Rajasekaran (Anthropic Labs) · On criteria wording

I told the judge to find defects, so it finds defects. When the real ones run out, it invents nitpicks and style preferences

Daniel C. Sunday · A judge in a retry loop that never converged · 9 followers

"It feels off" is a mood. A frame number and a cause is a task

m4lka · On writing notes a judge can act on · 7,244 followers · 302 bookmarks

A clean, simple shape can score 100 here without resembling the photo.

Kaloyan Chernev · On the mesh-health score in his code-scored Blender benchmark

Criteria and comparison do different jobs. On recovering the intended quality order, comparison beat a rubric: attorneys reached rho 0.908 against 0.150, and GPT-5.4 0.421 against −0.250 (vendor co-authors, text). Ranking 7 image-editing models, pairwise Elo agreed 0.86 with LMArena, against 0.36 for pointwise scores taken from earlier papers. So use criteria to reject, and comparison to order.

The protocol

  1. Separate three questions: does it follow the brief, is it fit for its purpose, and is it good. Only a person answers the third.
  2. Compute first: framing, blocking, cuts, camera, things passing through each other.
  3. Clean the inputs: same layout, size and timestamps for every take. Random file names. No numbers or captions. No author, attempt count, earlier verdict or builder notes.
  4. State the purpose. A guide clip and a finished film want opposite things.
  5. Gate each take alone.
  6. Rank survivors in pairs, two images per prompt, in both orders. Under 8 takes, run all pairs.
  7. Use a second model family. Where they disagree, a person decides.
  8. Put controls in every round: an exact copy must tie, and a pretty-but-wrong take must lose. If they don't, throw out the round. Check that it looked: SeeCut voids a verdict unless the judge can copy on-screen text and state the duration.
  9. Report tiers, then a person picks. Log the judge's pick first, so you can compare later.

Gate one take, in a fresh context

BRIEF: <the brief>
PURPOSE: <a guide clip: an AI video model copies only its camera, positions and timing, then redraws everything>
The contact sheet's rows are shots in film order, its columns are the first, middle and last frame. Cells are written R2C3 for row 2, column 3.

Answer each question using only what you can see. Write the evidence first: which cells you looked at and what's in them. Then give a verdict: pass, fail or cannot_tell. Use cannot_tell whenever the frames don't settle it. Never guess.
Don't reward or punish polish, colour, lighting or detail unless a question asks about it.

people: <who must be in which cells>. Fail if anyone is missing, or anyone extra appears.
order: <what each row must show>. Fail if the rows are out of this order.
in_frame: In every cell where a person should be seen, their whole head is inside the frame.
not_blocked: Nothing covers a person's head in any cell.
action: <a rule from the brief you can see in frames, like "the man's nose mark points at the camera in every cell">
coverage: The rows use clearly different shot sizes.
separation: Each person stands out in brightness from whatever is directly behind them.
clean: No readable text, numbers, labels or captions anywhere.
change: <what must differ between the first and last column in a shot, written loosely enough to allow different ways of showing it>
neutral: Flat-lit: no dramatic light pools, hard cast shadows or saturated colour. (Guide clips only.)

Reply with only JSON: {"people":{"evidence":"...","verdict":"pass"}, ...}

Compare two takes. Run it twice, with A and B swapped

BRIEF: <the brief>
PURPOSE: <the purpose>
Two pictures, A and B. Look at both before you decide.

Compare them on these points, one at a time: <criteria>.
For each point, write what you see in A and what you see in B, and cite where. Don't reward polish, colour, lighting or detail unless a point asks about it.
Only then decide which serves the purpose better. If neither does, say tie: ties are a normal answer.
Reply with only JSON: {"notes":{"point":"..."},"winner":"A"} where winner is A, B or tie.

The skill's judge_pack.py does the blinding, the copy pair, both orders and the scoring.

Check it against people

Aim for about 100 examples per failure mode, with enough Pass and Fail examples to measure both classes.

Hamel Husain · On validating a judge · 64.8K followers

For most small to medium-sized companies, appointing a single domain expert as a “benevolent dictator” is the most effective approach.

Hamel Husain and Shreya Shankar · On who decides · 64.8K followers

having evals and numbers help us get 80% of the way there faster, but maybe they're a crutch that it makes it harder to polish the final 20%?

Eugene Yan · Member of technical staff at Anthropic (per bio) · 31.1K followers · 555 bookmarks

The honest limit: we found no test of an LLM's pick against a director's pick on generated takes. Takes of one shot, which differ only in performance, are the hard case, and judges agree with people 5 to 13 points less on same-model pairs. Treat this as triage until you've run that test.

What we tested

We gave one brief to fresh agents that had nothing else: a detective at his desk, a woman walks in behind him and crosses to the window, he finally looks up, three shots, 12 s. No human stepped in. These tests measure the prototype only, and none of it went to a video model.

RunPrompt, toolWhat came backTimeTokens
AOne line: "good cinematic camera". Claude, Three.jsA lit noir film: textures, 2,400 lines. Much prettier. Unusable as a guide clip, with an uncanny face67 min, then we stopped it, still polishing407K
BMaster prompt. Claude, Three.jsClean blocking, three real shot sizes, honest list of faults25 min194K
CMaster prompt. Claude, BlenderThe same, plus one camera idea it proposed: an arc that moves against her walk17 min172K
FMaster prompt. Codex CLI, default model, Three.jsCorrect and honest. Flatter coverage: all three shots stay wide. WebGL blocked, so an SVG renderer7.5 min15K out, 1.9M in (mostly cached)

The honest reading: the master prompt didn't make a better picture. It made a different object, at under half the tokens: something you can check, change and send to a video model. Run A looks better and costs more. If your final is the code render, that's the prompt to use, with a reference and a time budget. If a video model will finish the shot, its textures and light are exactly what you don't want in the clip.

Contact sheet of run A, a lit noir film in code

Run A, naive prompt. Beautiful, and a video model would copy all of it.

Contact sheet of run C, clean blockout in Blender

Run C, master prompt in Blender. Rows are shots; columns are first, middle and last frame.

Contact sheet of run B, clean blockout in Three.js

Run B, master prompt in Three.js.

Contact sheet of run F, wide grey blockout from Codex

Run F, master prompt in Codex.

What the tests changed

They found real faults in our own work, and fixing those is most of why this guide can be trusted at all.

What we can't claim: one run each, no controls, a loaded machine, and a judge (us) who wrote the prompt. Nobody has played these clips through a video model yet, so these tests show the prototypes are good, not that the films would be.

What goes wrong

SymptomUsual causeFix
Generic look: navy, bloom, particlesAdjectives, no referenceNumbers, named bans, a reference image
Stiff, robotic resultPosed limbs in the clipCapsules, or boards instead of a clip, plus "handheld"
The film looks like the previzToo much detail, or colour, or no image referencesSimplify, go grey, a reference for everything in frame
Placeholder comes back as furnitureLoose blocks near a figureRemove them, or say what they are in words
Wrong camera in the resultThe words disagree with the clip, or don't name the moveDescribe each shot as the clip shows it. Name every move
Blank grey shotSubject buried in geometry, not a bad cameraCheck geometry first. Build openings as real gaps
Characters mergeSame brightness once greyCheck the grey version while they overlap
Text comes back garbled, or gets spokenLabels or subtitles in the clipNothing readable in the frame
Agent says it's fine and it isn'tIt rates itself and can't watch videoA fresh reviewer, frames on a sheet, a person plays it
Token bill explodesRewriting the engine each roundScene data apart from the engine, 3 rounds then rethink
Agent's modelling looks badAsking it to modelIt arranges. Tripo, Meshy or BlenderKit supply

if it's too specific the model reproduces it too faithfully and powerful action is hard to get.

@husky__create · Failure memo with both videos · 1,981 followers · 9 bookmarks · translated

Who to follow

High reach and high bookmarks mostly belong to list accounts ("HOLY F*CK, 20 repos": 12,614 bookmarks). Those posts show demand. These people show their work. Reach is X followers on November 3, and bios are self-reported unless noted.

WhoReachWhy
Atsufumi Kashima110Smallest working skill (previz-maker), printed prompts, stated failures
Keigo Matsumaru45.5KWhen-to-use rules, previz vs no-previz comparisons, honest timing. Hit credit limits and says so
PJ Ace and Theo Dudley101K, 748Public Blender docs and prompts for Nexus. The work was sponsored by Dreamina
AIWarper38KOpen process with failures and exact prompts
@tebasaki3D4.9KClearest tool rule. Tried previz after disliking it
Aharon Rabinowitz22KAbout 20 years in Cinema 4D, a full thread with times and prompt
KakuDrop15.8KTokyo director and CG artist. Unreal and MetaHuman previz since February
Cell35KBest geometry and handoff writing. Says what the tests don't prove
Int.Lab1.8KThe strongest case against overusing previz
aratama1.9KFormulas, clay handoff, the honest A/B
Leon Lin33KRepos, costs and limits for serious three.js worlds
mrdoob91KCreated Three.js. An authority on the render route, silent on previz for video models
Scenario23KBest written blockout spec. A vendor with test notes
7ohnsonGitHubVLM harness: published cut tables, costs and own errors

On camera and staging generally, read fxguide's notes on Chris Edwards's previs guide, Roger Deakins's forum, Patrick Lin on Pixar's virtual camera and Stephen Burum on lighting a set. We found no credited previs pro from The Third Floor, Halon, Proof or NVIZ speaking on AI video, so no pro verdict exists on what amateurs get wrong.

Repos, in the order we'd use them: scenario-labs/skills, mcp-for-blender, VLM-Generation-Harness, threejs-previz, previz-maker, CozyClay (AGPL), Motion2MixamoRig (check licences). Some of the best have almost no stars: threejs-previz and previz-maker had 0 when we checked.

What nobody knows yet

The first two are cheap to settle. One 5 s window, four variants, same camera and paths. We haven't run this. It needs four paid Seedance runs: by the rates in our prompting skill, about 320 credits at 480p or 840 at 720p. The clips are rendered and ready.

The same frame as grey capsule, colour capsule, grey jointed figure and colour jointed figure

The test, ready to run: grey or colour, capsule or joints. The skill's example/ab-test lets anyone run the same comparison on any model.

The skill

code-to-video-previz packages all of this for an agent: the tool decision, a single scene file both renderers read, the number audit, shot splitting and camera measurement, picture-coordinate staging, handoff prompts, and the Caravaggio example. It leaves the full review UI and pack builder to threejs-animatic and varg-previz.

Install: npx skills add vargHQ/skills --skill code-to-video-previz, or copy the folder from vargHQ/skills. Then ask your agent: "prototype this shot with code-to-video-previz". The scene checks need only Python. Three.js needs Bun, Chrome and ffmpeg. Blender and camera solving need uv or a Blender install.

How we did this

Six research tracks on X, GitHub and film press, collected November 3, 2026, gave about 1,250 quotes after separating practitioners from list accounts. Every quote here was checked against saved source text, and a separate agent then re-fetched every source live. All 69 were found. 17 needed a correction: names, lost context, and one translation that read as its opposite. Those corrections are in. Translated quotes are marked and originals are saved. We didn't watch most of the videos people posted, and sampled frames from a few. "Reach" and "bookmarks" are what X reported that day. Claims marked "per bio" weren't verified further. Many creators hold paid partnerships with video platforms, so weigh praise for tools accordingly. "Fable 5.5" claims were left out as unverified.

The judge section adds about 700 more quotes and over 250 measured effects, mostly from unreplicated 2026 preprints and much of it measured on text. Its quotes and key numbers had a live check too: 7 quotes and 18 claims needed correcting, including one comparison that mixed two metrics. Those are in.

"Our test" means we ran it. Everything else is someone's report, with a link. Legal lines aren't legal advice.

The Calling of Saint Matthew, Caravaggio, 1600, public domain, via Wikimedia Commons. The Music Lesson, Johannes Vermeer, public domain, via Wikimedia Commons. Tears of Steel (CC-BY) © Blender Foundation, mango.blender.org. Previz and Seedance footage from varg's own launch film.

Go deeper

All 10 steps

The route, with the one line that hands it to an agent: How to make a video with an AI agent in ten steps

  1. How to find references for an AI video
  2. How to make a moodboard for an AI video
  3. How to write a video script with an AI agent
  4. How to design sound and voice for an AI video
  5. How to design characters and props for AI video
  6. How to previz a video in Three.js or Blender (this page)
  7. How to animate a previz with AI video models
  8. How to edit a video with HyperFrames and AI agents
  9. How to judge an AI video: measure, don't grade
  10. How to keep an AI video project in GitHub