Skip to content

Videola 0.7.0 — motion blur that is motion, noise reduction that is spectral, and surround

Choose a tag to compare

@github-actions github-actions released this 10 Aug 21:47

Motion blur that is really motion, noise reduction that is really spectral, surround, and the two
things an effect chain was missing: a way out and a bypass.

New

  • Motion blur, over eight real instants of the exposure. A clip carries a shutter — 0 off, 0.5 a
    180-degree shutter, 1 the whole frame — and the renderer draws it once per instant of that window.
    Each instant asks the core where the clip reads from then and where it stands then, and the
    decoder for that picture: a clip travelling across the frame smears along its own path, including a
    curved one, and material moving inside the shot smears because the samples land on different source
    frames. The samples are averaged additively into a target of the clip's own and composited once — a
    run of over operations would weigh the last one most and be a trail rather than a smear. In the
    preview and in the file, at the same eight instants. What it cannot invent is temporal detail the
    material does not have, and the effects chapter
    says exactly where that line is.
  • Spectral noise reduction. The thing the two cut filters cannot do: separate a voice from noise
    sharing its band. Noise is steady and speech is not, so the floor is learned from the pauses
    the quietest fifth of the clip, averaged bin by bin — and every window is then turned down per bin by
    however much of it is floor. Own radix-2 FFT, forty lines, checked against a discrete transform
    written out by hand. Measured: the noise inside the tone's own band drops by more than 9 dB while
    the tone stays within 2 dB.
  • Surround. A project is laid out over stereo or 5.1, chosen on the master strip, and every track
    has a position in that field: pan left to right, rear front to back, and an LFE send that is a band
    (a low-pass at the 120 Hz the specification names) rather than a place. Pairwise constant-power
    placement between adjacent speakers, so a sweep keeps its loudness; a stereo bed keeps its width and
    a bed panned inwards reaches the centre speaker. A 5.1 mix the browser cannot encode is delivered in
    stereo rather than in silence, with the placement kept.
  • Effects can be removed and bypassed. Until now one could be added and never taken off again, and
    Effect.enabled sat in the model since the first schema with no command able to set it — the
    renderer and the audio graph had honoured the flag the whole time. effect.remove,
    effect.setEnabled, and a bypass switch and a bin in every effect row.
  • A clip can be switched off. It keeps its place, its length and everything else; nothing draws it
    and nothing plays it. Dimmed and hatched on the timeline. That is how two takes are compared.
  • Keyboard. Undo had no key at all. Now: Ctrl+Z, Ctrl+Shift+Z (and Ctrl+Y), Ctrl+S,
    Ctrl+O, Ctrl+E on the window; S to cut at the playhead, Ctrl+A, Ctrl+D on the timeline;
    +, -, 0 and Home/End for the view.
  • The view follows a running transport, paging ahead to keep the playhead on screen and never
    scrolling itself while the transport stands still.
  • Rubber-band selection over empty timeline, selecting what it touches and giving it back when
    dragged shut.
  • Three effects: mosaic (a face, a plate, a screen — a blur strong enough to hide one leaves its
    shape readable), directional blur, and glow that spreads what is bright and keeps what is not.
  • Insert in the project menu: a lower third, a full-frame title, a credits card, a shape or a
    countdown, laid down at the playhead. There was no way to add a title at all before.
  • Shapes and the countdown are drawn. Both were in the model from the first milestone and nothing
    drew them.
  • Four more templates — quotation, before-and-after, interview, countdown — thirteen in five
    categories.
  • Export presets: 1080p, 4K, 720p, upright 1080 × 1920, square 1080. Sizes and frame rates only,
    never a bitrate.
  • One curve shape on every parameter of a clip. Written off once as needing the keys to line up,
    which it does not: an easing belongs to a key, not to a moment.

Fixed

  • The installer said the wrong company. Windows takes the publisher from the bundle identifier
    when nothing says otherwise, and that identifier was com.cargonerds.videola. It is
    org.gilde.videola now, with publisher: gilde.org stated outright. Changing an identifier moves
    where the operating system files the application, which is why this belongs before a release.
  • The download button swallowed its own label on hover. It went from #5b8cff to #7d9bff under
    white type — about 2.3:1. The fill stays put now and the light around the button answers the
    pointer. True of every hero button as well, so the fix is in the theme.
  • A field inside the timeline lost its keys: typing an m into a marker's name dropped a marker
    per letter.
  • A selection kept the ids of clips an undo had removed, so every action that asks "is there a
    selection" said yes and then found nothing to do.
  • project_handOff with an unknown format now names the two it has instead of quietly writing
    FCPXML.

What this round cost

Written down because the mistakes are the useful part:

  1. A stationary test signal cannot be told from noise. The first denoise test used a sustained
    sine, so the floor was the tone and everything came out 18 dB down. Real material pauses; the
    tests do now too.
  2. An overlap-add synthesis divides by nearly zero at the ends. Without a window of padding the
    ends of every clip came out eighteen times too loud — invisible to every ratio measured inside
    the file, obvious to a peak reading.
  3. Mixing three amplitudes at once loses 3 dB. The first surround panner did, and the check that
    measures power at fifteen positions caught it.
  4. A generator has no decoder. A smeared title came out black until its samples took the painted
    picture; the export harness found it.
  5. paintShape fell through to its last branch and drew an ellipse for a shape name it did not
    know. A mutation test found that one.

Not there yet

Layouts beyond 5.1, true peak (dBTP), gain-reduction metering, stabilisation and tracking. Signing keys
for iOS, Android, macOS and the Tauri updater are the user's to provide — without them a release carries
no updater configuration, and the path itself is built and tested.

Checked

231 Rust tests in the core across 18 suites, 1860 JS tests, and five browser harnesses: 436 GPU pixel
checks, 75 export checks through ffprobe and ffmpeg, 423 application checks, 251 layout checks and the
server bundle. Every claim above is one of them.