Artificial Intelligence

Video production with an agentic system

A video model will give you a clip. It will not give you a film. A film is a story broken into scenes, scenes broken into shots, shots rendered with the same faces and rooms, then cut together so the sound does not jump. Asking one prompt to do all of that is how you get a pretty ten seconds and a mess after that.

An agentic system is a way to stop pretending one box can hold the whole job. You give named roles a piece of the production, you let them write and queue work, and you keep the pictures on a renderer you already trust. That is the shape of Calliope, an open-source, local-first story-to-video studio. It is MIT licensed. The repo is the install guide. This post is about how the production is split.

One idea, then a pipeline

You type a story idea. Calliope drafts a storyline: beats, characters, locations. It writes a per-scene script that keeps the action and the dialogue, then breaks each scene into shot clips of a few seconds. Each clip is one video job. When the clips exist, one export stitches them with ffmpeg: 1080p, the frame rate most of the clips already use, a short crossfade between shots, a hard cut where a clip is meant to continue the one before it, and loudness matched across the film.

The stages in the app are Story, Assets, Script, and Video, then the film export. You can edit any of it by hand before you move on. The agent is not a replacement for the project. It is another way to operate the same project.

Why "agentic" and not "a chatbot with a video button"

A chatbot that calls a video model once is a prompt box. An agent that can run a production has to do smaller, checkable things: open a project, write beats, attach a character, queue a render, wait for that render, then queue the next shot. Calliope's agent talks to the same database and the same render queue the project screen uses. It does not keep a private copy of the film off to the side.

Longer jobs are split. A planner hands work to sub-agents for story, script, assets, and video. In settings you can point each role at its own model: main agent, planner, story, script, assets, video. A strong model can plan. A faster one can fill shot descriptions. Blank means they all use the active model, so a single endpoint is enough to start.

The agent also has a scratch folder per chat, and file tools for lists, reads, and drafts. Scripts and shot plans can exist as text while you are still deciding. The database is what the film is built from. That split matters. A draft you have not accepted is not yet a scene.

Your ComfyUI, not a hidden renderer

Picture and video generation go through your own ComfyUI install. Calliope does not bake in node numbers from someone else's graph. You tag inputs and outputs in the workflow titles, things like (Input:prompt), (Input:character), (Input:location), (Output:video), and export the graph in API format. Calliope reads those roles, fills them from the scene, and queues the job over ComfyUI's HTTP API. It does not reach into ComfyUI's folders.

Generate does not fire blind. You get the exact prompt that will be sent, and you can edit it, save it as a draft, or ask for a rewrite. If ComfyUI rejects the graph, the error names the node instead of a bare status code. There is a dry-run switch for tests. Leave it off when you want real frames.

A hosted option exists if you turn it on: a Comfy API provider can offer MiniMax H3 and FLUX from the pickers. With that switch off, every job stays on the local workflow. Projects themselves live in SQLite on the machine. Media lives in folders. The only outside service in the default path is the language-model endpoint you configure, local or hosted.

What the agent is not allowed to do

There is a command-line door, calliope-cli, for writing text into a project: beats, cast, scenes, clips. It is there because a long story does not belong in a textarea, and because another tool or agent may need to write structure without clicking through the UI. It will not delete a project. It will not call a model. It will not write images or video. Renders stay in the web app. Writes carry an expected hash, so a tool cannot overwrite a scene you changed underneath it without re-reading first.

That is the useful constraint. The agent can propose and queue. It cannot quietly throw the film away, and it cannot pretend a render happened.

Where to look

The project is github.com/benjiyaya/Calliope. A walkthrough of the 1.5 flow, from script to a local video, is From Script to Video Locally Using Calliope 1.5.

If you only need one clip, a video model is enough. If you need a sequence that remembers its characters, you need the jobs separated: story, shots, a renderer you control, and a person who still watches the cut. Calliope is that separation, running on your machine.

More in Artificial Intelligence