Skip to content

Videola 0.5.0 — lookup tables, curves, locks, and the picture as a control

Choose a tag to compare

@github-actions github-actions released this 09 Aug 20:14

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

  • .cube lookup 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 .videola with no line added to the writer, and
    nothing about it crosses postMessage. 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_shape in the Rust core — the very function interpolate applies 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.locked is 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.