# kaviri > A recording browser. You write a script of what happens, it films it and derives the camera > moves from the interactions. No screen recorder, no display server, no hand on a mouse. One > Rust binary that brings its own Chromium over CDP and shells out to ffmpeg. Apache 2.0. kaviri exists because demo videos go stale. The UI moves, the video does not, and nobody re-records it because re-recording means an afternoon and a quiet room. A take that is a build artifact is regenerated by CI on every change, so it cannot lie about the product. kaviri is ChiShona for "twice, a second time", pronounced ka-VEE-ree. ## Start here - [Agent guide](https://kaviri.dev/llms-full.txt): the whole op protocol in one file, written for an AI agent that has been asked for a video and has a shell. - [Landing page](https://kaviri.dev/): what it is and the shape of a script. ## Ops One JSON object per line. `navigate`, `wait`, `start_recording`, `click`, `type`, `scroll`, `mark`, `stop_recording`. Every op answers with one JSON line, `{"ok":true,"result":{…}}` or `{"ok":false,"error":"…"}`, and a failed op makes the process exit non-zero. ## The camera Derived, never described. Each interaction carries a bounding box and a timestamp, and from those kaviri picks a zoom level, leans the crop left of the target so what the target acts on stays in frame, and moves the camera as a critically damped spring chasing the interaction rather than a line drawn between interactions. Speed is capped and a deadzone keeps small movements from moving the frame at all. ## Hosted The recorder is free forever and runs anywhere. The hosted service takes a script and returns an MP4 with a stable URL, so a README or a landing page can point at a video that re-renders itself. hello@kaviri.dev