Compiling a screenplay into a limited-animation series, checked shot by shot, rendered on one Mac
How The Brightwater Family is made A screenplay compiled into a three-episode limited-animation series, with the same faces and rooms in every shot, every shot checked, rendered on one Mac. Watch the series: https://www.youtube.com/playlist?list=PLZOx3V-lNQb0 · Series page: https://atveanimation.

com/brightwater I made The Brightwater Family — Picture Day on evenings and weekends: three episodes of about nine minutes each, about a family trying to get everyone ready for a photo appointment. For the last few months I have been working on one problem in AI video: keeping the same characters and the same world consistent across a whole Instead of generating each shot as a new video, I built a pipeline that turns the screenplay into animation from a fixed library of drawings and checks every shot before it ships. The series starts with a bible, the fixed designs of every character and place. New episodes reuse the drawings, locations, voices, music, and checks, so Long AI video has a consistency problem.
Ask a video model for a shot and the characters will look roughly right; ask it for the next shot and the room has been repainted, the shirt has changed color, the dog has a different face. For a 30-second clip that is a nuisance. For a 28-minute series with a recurring cast it is the whole problem. I tested a video generator before building this pipeline.
In an early test of 162 candidate clips across 24 segments, the automated judge flagged 57% of them for background changes, camera drift, or an impossible dog pose, while the anchored characters never went missing. The pipeline treats the screenplay as source code. The script becomes a typed source of truth. Every scene is broken down into facts with time intervals: who is in the room, where they stand, what they wear, what they hold, what state things are in (the dog is muddy; the dog is clean).
The writing rules keep dialogue tied to visible action: a line may only refer to what the camera can see. A separate check, described below, looks for places where the finished shot still fails to show what the line describes. The source of truth compiles into an exposure sheet. An exposure sheet is a traditional animation planning tool: a table with one row per frame that says which drawing is on screen, where, for how long, and which mouth shape goes with the sound.
Animators have filled in exposure sheets by hand for decades; I generate mine from the script. A compositor renders each frame from a locked library. Characters, locations, props, mouth shapes, and expressions are fixed drawings, made once for the series from the bible and checked against it. A room is one drawing, used every time that room appears, so it cannot drift.
Lips move to the synthesized voices; eyes and brows follow the emotion tags in the script; a small idle motion keeps held drawings alive. Timing comes from the audio. Each cut lasts its dialogue plus a beat; long holds alternate framings. The voices are stock, openly licensed synthesized voices, one per character, never cloned from anyone.
I generated the music for the show myself. I compose the theme, the stings, and the scene beds in code and render them with an openly licensed soundfont, rather than using a music-generation model or stock recordings. The story controls the pictures. A video model is not asked to remember what the room looked like, because the room is a file.
A drawing that cannot change is not the same as a shot that is right, so every frame passes eight hard checks and an AI judge (a vision-language model) reviews every shot. The eight hard gates run on every frame, and a single failing frame blocks delivery: no two characters overlap unless the staging says they touch (a hug, a hand on a shoulder); every background resolves to one registered drawing per location, series-wide (title card, end card, and thumbnails included); every mouth is a shape from a finite, eye-approved set; one body drawing per character per frame and at most two hands; a mouth on every speaking frame; every held object at the hand that holds it; everyone listed for a car or photo shot is in frame, head and shoulders inside the edges; music runs to the end. Separately, the AI judge reviews every shot, and its flags go to human review rather than blocking: Identity: every character crop is checked against the bible, across every wardrobe state (casual, dressed, muddy), so a redrawn outfit cannot quietly become a different child. Background stability: a pixel check confirms the room did not move or change behind the characters.
The beat: did the scripted action happen in the shot, or is it a held drawing a human accepted? The line is shown: for every line of dialogue, the judge is asked whether the frame shows what the line describes or refers to. "Tall ones at the back, short ones in front" must play over two rows, not one. Physically plausible: feet on the ground, seated people at seat height, nothing passing through a solid.
After the automated checks, two reviewers who had not watched the series being made went through every scene with a written checklist and a yes/no sheet: a separate AI session with no access to the pipeline, and a family member. Then I watched it. The render is deterministic: in my render tests, the same script, library version, and seeds reproduce the dialogue cuts frame for frame, which is what makes the checks meaningful. Part 1 Part 2 Part 3 Running time 9:44 8:49 9:29 Frames 14,032 12,718 13,658 Hard-gate failures on the shipped file 0 0 0 Judge flags remaining after review 27 15 39 of which "the line is shown" 16 of 188 lines 12 of 171 28 of 192 Beats verified as performed 12 of 25 7 of 24 6 of 37 Judge flags overridden by eye (frame on record) 4 4 4 Delivered at 1920×1080, 24 fps, rendered on one Mac with no rented GPU for the final cuts.
The drawings were made at 1344×768 (backgrounds) and about 1,024 px tall (characters) and upscaled, so "1080p" is the delivery size, not the native drawing size. Most of the judge flags that are not "line is shown" are camera drift on authored camera moves. The beats not verified are held drawings a human accepted. Every number here is read from the release manifest of the shipped files; the rubric version and gate definitions are recorded there.
This is limited animation by design: held drawings, cut-out movement, two-drawing action beats. Sustained character motion, a run or a dance, is not attempted in this version. A viewer who had not seen the series being made pointed out where it still falls short, and they were right: the synthesized voices sometimes sound flat, Limited animation is where the pipeline stands today, and it is still a work in progress. Next is a second Brightwater story through the same pipeline and the same bible, written to a published script format by someone who has not seen the compiler, while I work on fixing the problems above in the pipeline rather than patching individual shots.
I will publish how much hand work the new episode still needed. Full animation is on the roadmap, and I am testing two The method is borrowed from a century of hand-drawn animation: exposure sheets, holds, cut-outs, the mouth chart. The models and tools are other people’s years of open work: FLUX.2 [klein] 4B (Black Forest Labs, Apache-2.0) for the still library; Kokoro-82M (Apache-2.0; its training set includes CC-BY audio from Koniwa and SIWIS, credited as its model card asks) for the voices; Rhubarb Lip Sync (MIT) for mouth timing; FluidSynth with the Fluid R3 GM soundfont (MIT) for the music; FFmpeg for everything that touches a frame; Claude (Anthropic) as the judge and as the drafting assistant for dialogue, under rules I wrote. The generator I measured in the early experiments was LongLive 2.0 (NVIDIA Open Model License) on Wan 2.2 (Apache-2.0); no frame from either is in the episodes.
Google Research’s recent work on typed story state and verification by visual question answering helped frame the problem. My work was choosing the tools, connecting them, and writing the rules and the tests. Made with AI tools. All characters, voices, and places are fictional; no real person's likeness was used, and no voice was cloned or imitated.
The music was composed for the series.
Key Takeaways
- •For the last few months I have been working on one problem in AI video: keeping the same characters and the same world consistent across a whole Instead of generating each shot as a new video, I built a pipeline that turns the screenplay into animation from a fixed library of drawings and checks every shot before it ships.
- •This story was reported by Dev.to, covering developments in the dev space.
- •AI advancements continue to reshape industries — read the full article on Dev.to for complete coverage.
📖 Continue reading the full article:
Read Full Article on Dev.to →

