Edit the data, not the program: how the vosso studio edits video live
July 2026
Most code-driven video tools have one editing model: change the code, rebuild, reload. The vosso studio never does that. The rendering program is compiled once and stays byte-identical through an entire editing session. Every zoom you drag, every trim, every speed ramp is a change to data the program reads each frame.
The shape: a constant program over a document
When the studio lowers a recording into a composition, it emits a program whose function strings contain no values from your edit: they are pure interpreters. The actual video lives in ctx.data: footage segments, zoom spans, speed spans, click instants, frame styling, audio clips. Each frame, the program reads the document and renders whatever it says. In compiler terms: the program is the interpreter, the document is the AST.
Why bother?
Because it changes what an “edit” costs. The player classifies every change: same program, new data → a live SET_DATA message into the running preview. No recompile, no iframe reload; the very next frame renders the new state. Only structural changes (a new element list) warm-swap the program. Dragging a zoom’s edge re-renders at frame rate; nothing flashes; the playhead doesn’t move.
It also makes the preview truthful. There is no separate export path interpreting your edits a second time: the exporter seeks the same program over the same document, frame by frame. What you scrubbed is what encodes: the preview is the render.
The rule that keeps it working
One discipline holds the whole design up: never bake a document value into the program string. The moment a zoom level or a duration is interpolated into the code, that edit stops being data: it needs a recompile, live editing breaks, and two sources of truth drift. Everything editable goes in the document; the program only ever gets more general.
The bonus nobody designed for: agents
A video that is a JSON document has a second audience. An AI agent editing a vosso take doesn’t generate code. It patches doc.json: retime a zoom by changing two numbers, slow a section by adding a speed span. The diff is reviewable like any code change, the render is deterministic, and the browser flow that produced the footage never re-runs. That is the contract the agent tooling builds on, and it fell out of an editor architecture decision.