Videola 0.5.0 — lookup tables, curves, locks, and the picture as a control
Lookup tables, a curve editor for keyframe easing, a lock that means something, and the geometry of
a shot on the shot itself. Five releases in, the picture is finally the largest thing in the window.
New
.cubelookup tables. A table is a library asset under the hash of its own bytes, with a
media kind of its own — so it packs into a.videolawith no line added to the writer, and
nothing about it crossespostMessage. Proven at pixels through the preview, the decoded MP4 and
a frame ffmpeg read back out of the written file.- A curve editor. Bezier handles were kept and honoured but could not be dragged. The field
opens beside the picked key's interpolation, over the tracks; the line it plots comes out of
segment_shapein the Rust core — the very functioninterpolateapplies to move the picture —
so a drawn curve and an animated one cannot disagree. Fifteen columns of measured difference at
the same instant say it reached the frame. - Geometry on the picture. Select a clip and a box appears on the frame: a handle on every
corner, one to turn by, and a drag inside it to move the shot. The corners come from the same
matrix the compositor hands the GPU — checked against each other over translation, uneven scale,
rotation, an off-centre anchor and every combination with a crop — so the handles sit on the
picture rather than near it. A corner holds the corner across from it still; a rotation is the
angle between the handle and the pointer, so a pointer that leaves the window and comes back
lands where it is. The whole drag is one undo step. track.lockedis enforced. It sat in the model from the first commit and meant nothing. Now
one gate in front of the whole command dispatch refuses every edit to a locked track's clips —
their trims, speed, transforms, effects and keyframes, the track's own chain, and the track
itself. The mixer, the name and the flags stay reachable, which is how it is unlocked again. An
insert or overwrite ripples every track, so a single locked track anywhere refuses it outright:
skipping it would move the picture out from under its own sound.- Beats as markers. A rise against a threshold that moves with the music, so the quiet half of
a track yields the same hits as the loud half. Markers and not cuts — the beat is a suggestion to
cut against, and a hundred cuts nobody asked for are a hundred clips to take back one at a time. - A mixing desk you open. The desk and the instruments both cost the picture about a fifth of
the window each, and both stood there whether or not anyone was using them: with both open the
preview was left sixty pixels of seven hundred and its canvas hung out over the toolbar. Both are
now switches on the transport, folded away until asked for.
Two decisions worth reading
A lock is one gate, not twenty checks. Honouring it inside each handler would mean a lock that
half the commands respect, and the next command anyone adds would be a hole nobody notices. So it is
answered once, in front of the dispatch, by a function that names the tracks a command would change
clips on. Five deliberate mutations of that function were tried; all five died.
A LUT is a medium. The alternative was a new field on the project and a new entry in the
container writer. Under the hash of its own bytes in the library it is already everything the
.videola format knows how to carry, already deduplicated, and already something the export worker
can read without being handed it.
Also
The screenshots in the documentation now come out of the application harness and are cropped to the
page rather than to the window — headless Chrome lays the editor out in a window taller than the
page, and every desktop picture in the guide had carried a hundred and fifty pixels of black under
it. pnpm --filter videola-docs shots is the whole of that step.
What this build is
Desktop installers for Windows, Linux and macOS, plus a Docker image carrying the editor, the HTTP
API and the MCP server. The macOS DMG is unsigned unless an Apple certificate is configured, so
Gatekeeper will block it. Android and iOS assets are absent whenever their signing keys are.
FFmpeg is not bundled: the export runs on the browser's own encoders, and the server cannot render.