Skip to content

Videola 0.4.0 — colour, captions, classical editing

Choose a tag to compare

@github-actions github-actions released this 09 Aug 15:49

Colour grading with scopes, subtitles, classical three-point editing, adjustment layers, and audio
finishing. Four releases in, the editor now covers most of what a day's work needs.

New

  • Colour. Waveform, vectorscope and histogram, read off the preview canvas that was already
    readable. Curves as a first-class parameter type, keyframable point by point — the "parameter
    that is not a float" hurdle named back in M3 is now cleared. Lift, gamma and gain wheels.
  • Subtitles. SRT and WebVTT in and out, on a caption track of its own — a separate track kind,
    because only that can answer which clips are subtitles rather than lower thirds. A millisecond is
    exactly 705,600 flicks, so the round trip is lossless by arithmetic; it is checked byte for byte
    through the parser and again through the real Rust core.
  • Three-point editing. Mark in and out in a medium, then insert or overwrite at the playhead.
    Insert opens the gap on every track — a gap on picture alone would put sound out of step for
    the rest of the film. Each is one command, so an insert across three tracks and a dozen clips is
    one press of undo.
  • Adjustment tracks. They existed in the model and drew nothing at all. Their clips' effects now
    run over everything below them, through the same channel a compound clip already used — zero
    compositor changes.
  • Audio finishing. Live meters per bus, normalise to a loudness target (and measure again rather
    than trust the arithmetic), ducking that writes keyframes you can see and edit, silence detection
    that cuts the pauses out.
  • J/K/L shuttle, markers with colours and notes, preview resolution, an effect browser whose
    every tile is that effect's own shader over the current frame, nine templates in five categories
    with baked preview cards, and a keyframe lane on the timeline.

Two decisions worth reading

A mask is an effect, not a model field. Everything a mask needs already existed for effects, so
masks cost zero lines of interface. Two masks in one chain intersect, and a mask is keyframable, both
for free.

track.locked is deliberately not enforced. A lock is honoured nowhere in the core; making one
command respect it would have made that command the sole authority on what a lock means.

How it is checked

488 Rust tests, 1513 JavaScript tests, and five harnesses needing only an installed Chrome:
366 pixel checks against a real WebGL2 driver, 41 export checks that hand the written file to
ffprobe and ffmpeg, 200 against real browser layout, 252 driving the built application on desktop,
tablet and phone viewports, and one driving the built server bundles over real stdio and HTTP.

Installers

Windows NSIS, Linux deb and AppImage, macOS DMG — all unsigned. Android and iOS are wired but
skipped without signing keys.