Why I made StagePair

I kept thinking about a small problem in AI creative tools.

When I change my mind about a shot, the usual answer is often to generate something again. But on a real set, changing the camera does not mean rebuilding the room or asking the actor to perform the scene from scratch.

So I wanted to try something simpler.

What if a person and an agent could work inside the same scene?

In StagePair, I move the performer and decide the blocking. The agent reads the stage as it exists right now, evaluates camera positions, moves the camera, and can save the resulting frame to a contact sheet.

The scene is deliberately small. There is one performer, a table, a door, and a camera. I wanted the collaboration itself to be easy to see.

The part I cared about most

The interesting problem was not getting an agent to move a camera. It was what happens when the person changes something while the agent is working.

StagePair gives the shared scene a revision number.

If the agent inspects revision 1, and I move the performer before the agent changes the camera, the scene becomes revision 2. A camera move based on revision 1 is then rejected. The agent has to inspect the page again and continue from what is actually there now.

That small rule became the part of the project I liked most.

It makes the collaboration feel less like sending commands to a remote service and more like two people taking turns working on the same thing.

How WebMCP fits

The page exposes five WebMCP tools.

inspect_stage reads the current performer, camera, props, locks, and revision.

inspect_camera reads the current shot.

evaluate_camera checks a possible camera position without changing the scene.

set_camera moves the camera, but only when it is based on the latest stage revision.

capture_take saves the current viewfinder image to the contact sheet.

Because these tools come directly from the live page, the agent is working with the same state I can see and edit in the browser.

Building it

StagePair is built with React, TypeScript, Three.js, React Three Fiber, and the WebMCP imperative API.

I kept the stage procedural instead of using downloaded 3D assets. That gave the project a simple model-making quality that felt closer to blocking a scene on a director's table than trying to imitate a finished film set.

I also wanted the interface to feel like a small editorial object rather than a generic AI dashboard, so the visual language borrows from contact sheets, camera markings, printed production notes, and Swiss editorial design.

What I learned

My first instinct was to think about the agent as another tool user.

After building StagePair, I became more interested in the handoff itself.

If people and agents are going to work in the same interfaces, it matters whether both sides know what changed, which version they are acting on, and when an old decision should no longer be valid.

StagePair is only a small experiment, but that is the question I wanted it to make visible.

Built With

Share this project:

Updates

Submission history