ONE

Ask for a Video, Stay in the Conversation

Describing a video used to mean leaving the chat, opening a generator, waiting on a tab, downloading a file, and carrying it back. Now you describe it where you are, approve the spend, wait about ninety seconds, and the clip plays in the thread with a URL you can put on a page.

video chat media agents product

Every AI video tool has the same shape. You are in the middle of something — writing an ad, laying out a landing page, answering a customer — and you decide a short clip would help. So you leave. New tab, different account, a prompt box that knows nothing about the work you were doing. You wait. You download an mp4 into your Downloads folder. You upload it somewhere it can be served from. You come back and try to remember what you were doing.

The generation took a minute. The round trip took ten.

We removed the round trip. Video generation is now a tool the chat agent can call, which means the request, the wait, the result, and the URL all live in the same conversation as the work.

What it looks like

You type what you want. The agent reads it as a render request and asks before spending anything:

You    Make me a 6 second vertical clip: slow overhead shot of a
       moving truck pulling away from a suburban driveway at
       golden hour, no text.

Agent  [ generate_video ]
       prompt      slow overhead shot of a moving truck pulling
                   away from a suburban driveway at golden hour
       aspect      9:16
       duration_s  6

       [ Approve ]  [ Deny ]

You    Approve

Agent  Generating… 0:12 elapsed, usually about 90s
       ...
       [ ▶ video plays inline · 0:06 · 9:16 ]
       Here it is. Want a wider crop or a longer take?

The waiting state is a real card with an elapsed clock, not a frozen thread. When the clip is done it plays inside the conversation with a scrubber, mute, and fullscreen, plus buttons to regenerate with an edited prompt or ask for a variation. Those buttons write the next chat message for you, so a second take is one tap rather than a retyped paragraph.

You can watch all three states — waiting, ready, failed — on the live demo, and the full capability write-up is on the video feature page.

The actual pipeline

No magic worth hiding, so here is the whole path.

The model calls generate_video with a prompt, an aspect ratio, a duration, and a model choice. That tool always requires approval. Not sometimes, not depending on who you are: every provider on the other end bills real money per call, so there is no free branch to exempt and a conditional gate would be decoration.

On approval the tool posts the render to OpenRouter’s video endpoint. The default model is google/veo-3.1-lite. That default matters for a boring reason: it runs on the OpenRouter key the system already holds, so nothing new has to be configured before the feature works. The same key reaches 23 video models, and the model is a field on the tool, so asking for a different one is a sentence, not a deployment. OpenAI’s Sora is available directly as a second provider for anyone who wants it.

Rendering is submit-then-poll. The tool holds the turn, polls up to 24 times, and each individual HTTP call is bounded at 30 seconds so a hung provider cannot hang your chat.

When the render completes, the tool downloads the mp4 bytes and writes them into your own storage under {workspace}/chat/{uuid}.mp4. This step is the one people skip and regret. Provider URLs expire. If the chat had linked straight to the provider’s output, every clip in every old conversation would rot into a dead link within days. The file you get back is served from a ONE URL that keeps working, and the read route supports range requests, which is why scrubbing through the clip actually seeks instead of restarting.

Then the finished part comes back to the browser and renders as a player. The agent is also told to write a markdown link to the clip, and the transcript strips that link when the player is already showing it, so you get the video once rather than twice.

What it costs you

Time: about ninety seconds of watching a clock. One end-to-end run measured on 2026-08-20 with google/veo-3.1-lite sat pending for 70 seconds, completed at 76, and downloaded 8,987,772 bytes. The progress bar on the waiting card drifts with elapsed time and deliberately stops short of full, because we do not have a real percentage from the provider and inventing one would be a lie told in a nice font.

Money: that same run reported a cost of $0.6336. Rates differ per model and per second of output, which is exactly why approval is unconditional. You see the tool, its arguments, and the duration you are about to buy before anything is billed. On the web, generation is owner-only — a visitor in your public chat cannot spend your money on renders.

Failure: if the render outruns the poll budget, the tool says so. It returns a pending state with the provider’s operation id rather than a success with a broken link, and the chat shows a panel saying the clip is still rendering at the provider. That is worse than a video and much better than a lie. It is also the honest edge of this release: nothing picks that render up later, so a clip that overruns has to be asked for again.

Where it fits

This is the third media generator in the same place, next to images and voiceovers, reachable by the same agent that already knows your workspace, your brand, and the page you are editing. The output is a URL, which means the next sentence can be “put that on the pricing page” instead of a file-manager errand.

The clip does not arrive as an attachment to be filed. It arrives as part of the conversation that asked for it.