Skip to content

Releases: Exyons/overlaid

Release list

v0.1.0

Choose a tag to compare

@Exyons Exyons released this 08 Sep 07:33

A local video editor that runs in the browser, plus the command line tool it
grew out of. Everything runs on your machine.

What it does

Put text on a screen recording and drag it where you want it. Crop, trim,
change the speed, and export to MP4, WebM, GIF or MOV. A nine cell control
snaps text to a part of the frame and anchors it there, so a longer line grows
inward instead of running off the edge.

Crop and size has a "Detect content" button. A screen capture surrounds the
part worth keeping with things that never move, so measuring how much each
pixel varies over the recording separates the two without recognising any of
it. It proposes a region rather than applying one, and says when it found
nothing instead of returning a rectangle around noise.

Previews you can trust

Dragging moves things on a canvas, which is instant but approximate. When you
stop, the editor asks the server for a real rendered frame. The matte around
the picture says which you are looking at: amber for the browser's guess, cyan
once the renderer has confirmed it.

The CLI, the preview and the export all compile through one pure function, so
there is no second code path that could drift from the first.

Export

Quality is a slider from 0 to 100 mapped into the usable part of each codec's
scale. 100 means visually lossless, not mathematically lossless, which on a
12 Mb/s capture measured 7.7 times the source size for no more picture.

Bitrate is capped against the material rather than left to a quality target
alone. Cropping and downscaling lower the cap proportionally; upscaling cannot
raise it. On a 12.3 Mb/s capture that took three cases from 20.4, 8.6 and
19.4 Mb/s down to between 4.5 and 5.2.

H.264 uses the graphics chip when one works. Encoders are found by running a
real one frame encode, not by reading what the ffmpeg binary claims to
support: a switchable NVIDIA card advertises NVENC and then fails at CUDA
init, and VAAPI will bind to a render node whose driver cannot encode.

Running it

Needs Python 3.12 or newer, uv, Node, and ffmpeg with ffprobe.

./run.sh build
./run.sh serve      # http://127.0.0.1:8787

136 tests. Most assert on compiled filter strings and need no ffmpeg; the rest
render a committed two second fixture and probe the result.