Multi-shot prompting means generating a sequence, a storyboard or the shots of a clip, one image at a time, and hoping the pieces cut together. They will not by default, because each generation is a separate call to a stateless model. It never sees the shot before. Whatever should stay the same from shot to shot, the face, the clothes, the props and where they are, reaches the model only if the prompt for that shot carries it.
The film shows one sequence made four ways. In front is the shared set: a small cafe with a camera rig that travels to each shot's position, a wide shot at the door, a medium shot at the grinder, a close-up on the mug and an over-the-shoulder shot from the customer. Behind it is the storyboard wall, one row per way of prompting, each row a timeline with the judge's verdict on every cut. On the right is the continuity sheet, and a glowing thread runs from it into every row whose prompts carry it.
Everything on the wall is real. On 11 September 2026, gpt-image-1.5 made every frame at 1536 by 1024 and quality high, one generation per shot, 43 to 68 seconds each. Gemini 3.8 Flash judged every cut twice with strict JSON output, against ten attributes. Pause the film, then pick a run and a shot to see the frame close up. The readout gives the judge's verdict on the cut into that frame, where the sign is, what is in the mug and the sampled colour of the top.
Written one at a time, the four prompts cast a woman in a beanie, a man in a cap, a stranger's hands and a woman the judge took for the first one: 16 of 42 checks matched. That last match is not continuity. It is the model's default barista, denim shirt and brown apron, turning up twice by chance. Pasting one continuity sheet under every prompt fixed the person at once, and the cardigan sampled mustard in every frame. The judge still broke three cuts: the hanging sign became an easel, the sign moved across the counter, and the latte became black coffee in a different mug. Adding the approved first frame as a reference image, sent through the edit endpoint, matched 59 of 60 checks.
The failure mode is the one that passes review. The sheet named the OPEN sign but never said where it was, so in every later shot of the reference run the model set it on the counter, twice in shot 4, and the judge called the sign continuous in five of its six checks, because it looked the same. A continuity check that compares appearance misses position. The fix was one state line per shot, written from what the previous shot did: the sign now hangs on the door, the latte is poured. That run kept the sign off the counter, carried the latte into shot 4, and matched all 54 checks.
The practical rule: treat continuity as data you keep outside the model. Write one sheet of what exists and paste it into every prompt, verbatim. Approve one frame and send it as the reference with every later shot. Keep a state record of where things are and what has happened, update it after each shot, and put it in the next prompt. Then check every cut against the one before, for position and state as well as looks. It costs about 600 input tokens a shot.
The caveats. Each condition was generated once, so the rows show what happened, not a rate; a second sample of the sheet run might keep its sign or lose its apron colour. The judge is a model too: its per-frame check missed the chipped mug rim that is visible in several frames, so the film uses only its cut-by-cut verdicts, checked by eye. Colour patches were placed by hand on the fabric. Video models that generate several shots in one call share state inside that call, but across calls, clips and sessions the same rule holds: nothing carries over unless you carry it.
The maths
- The continuity score
For each cut k between consecutive shots, the judge (Gemini 3.8 Flash, strict JSON, temperature 0, two runs r) gives each of ten attributes a (person, hair, glasses, top, apron, mug, machine, sign, room, light) a verdict v: match, mismatch, or n/a when it is out of frame in either shot. The score under each row is matches over comparable checks: 16 of 42, 40 of 48, 59 of 60 and 54 of 54.
- What each shot prompt carries
The four rows add one term at a time, from the bottom. The shot line alone averaged 41 input tokens; with the sheet, 191; with the reference frame f₁ sent through the edit endpoint, 591, of which 323 are the image; with the state line, 631. Carrying continuity costs about 600 input tokens a shot, against about 6,600 output tokens for the image itself.
- The sheet is constant, the state is not
The sheet says what exists: the woman, the cardigan, the sign. It never changes, so it cannot say that shot 1 hung the sign on the door or that shot 3 poured the latte. That is state, and it changes with every shot. Without it, the reference run set the sign on the counter in all three later shots.
- Measuring the cardigan without the light
Each top colour is the median of a 40 by 40 pixel patch on the fabric, converted to CIELAB. Lightness L* swings with shade and framing, so the full colour distance mostly measures the light; hue h and chroma C* do not. Every sheet frame sampled h between 66 and 76 degrees at C* of 38 or more, which is mustard. The no-sheet tops sampled C* of 3 to 12: grey-blue denim. The swatch on each frame shows the sample.
Related terms
- StatelessStateless means the model API keeps no memory between requests. Each call starts blank, so every request must carry all the context the model needs. This is foundational to how agents are built.
- StatefulStateful describes anything that keeps state across requests: conversation history, memory, a session. In an agent that job belongs to the harness or app, never to the stateless model API.
- Non-determinismNon-determinism is why the same prompt can give you different answers. At inference the model samples among likely next tokens with a controlled amount of randomness, so runs vary.
- SpecA spec is a written description of what to build and why, handed to the agent up front. Specs-as-context reliably beat vague one-line requests.