How AI Coding Agents Are Turning Code Into Video Content AI coding agents are now able to render a single frame of a product video, check it, and fix it in about a second, treating video as code that can be edited and re-rendered like a failing test. Two programming models—component-based (e.g., React) and generator-based (e.g., Canvas API)—are emerging, and the key open problem is whether an agent can judge if the video looks right, not just if the render exits cleanly. An AI coding agent can render a single frame of your product video, check whether it looks right, and fix it, all in about a second, before it ever touches the full render. You built a demo video for your product eight months ago, and it’s already wrong. The UI has changed twice since, so you’re back in a timeline editor that has nothing to do with your codebase, re-cutting clips by hand. Sora and Runway don’t help, they generate one-off clips from a prompt, not something you can update. What fixes this is treating the video itself as code, a spec an agent can edit and re-render like a failing test. That’s already happening, with agents like Claude Code writing and fixing the code directly. Let’s understand how this actually works. The two competing ways to write video as code, the four layers a real setup runs on, where the research is heading, and the one open problem that decides if any of it is production-ready, whether an agent can tell if the video it made actually looks right. Instead of cutting clips on a timeline, you define a video as a tree of components, values, and timing rules, then hand that definition to a renderer. The renderer produces frames and stitches them into a file. Two different programming models have emerged for doing this, and the choice between them changes how an agent has to think about the problem. In the component model, a video is a React component. Width, height, frame rate, and duration are all defined in code, and a renderer walks the timeline frame by frame, re-evaluating the component at each point, then hands the result to a headless browser and FFmpeg for encoding. A minimal composition looks roughly like this: // This re-evaluates once per frame, driven by the current frame number.export const TitleCard = = { const frame = useCurrentFrame ; const opacity = interpolate frame, 0, 30 , 0, 1 ; const scale = spring { frame, fps: 30 } ; return