Desktop app for travel filmmakers: raw clips in, narrated rough cut out, every step running on their own machine.
A folder of clips becomes a narrated rough cut in one pass: script, voiceover and assembly, with nothing uploaded and 55 voices bundled in the app.
stack

The brief
The users come home from a trip with a few hundred clips and never cut them. What stalls it is not the editing. It is describing what is in every shot, writing narration that fits the footage, recording it, and laying picture under voice. Tools that do this upload the footage, and a card holding 40GB is a long wait before any work starts.
The scope was a rough cut, not a finished film. Something to export and finish by hand. And it had to run with no connection, because the moment people want to cut is the flight home.
key decisions
01
Local inference in a desktop shell, not a server
The heavy work is language-model generation, speech synthesis and video encoding. On a server that means uploading gigabytes of someone's personal footage and paying for GPU time on every render, so the tools run as ordinary local processes instead.
02
Narration is the master clock, and picture is cut to it
The voiceover is never time-stretched and never trimmed, because a chopped word is noticed instantly and a shortened shot essentially never is. Each clip holds for its line plus a 300ms tail, floored at 1500ms so a short sentence still reads as a shot.
03
Silence from the licence server is not a refusal
The users are on planes and behind hotel portals. A definite answer that the subscription is not active blocks at once; a timeout does not, and a signed cached licence keeps the app working for a month. The cost of being wrong is about one month of one subscription.
how it went
9 August 2026
Scaffold
The desktop shell with React and TypeScript.
10 August 2026
Pipeline end to end
Script, voiceover, ffmpeg assembly and real video import, in one day.
11 to 16 August 2026
Rebuild as a library
One project holds many videos cut from a shared clip library, with an editable timeline, captions and subtitles.
17 to 21 August 2026
Packaging and accounts
Installers on CI, a self-test that speaks a line before a build is accepted, the sign-in gate and the cached licence.
27 to 30 August 2026
Credit mode and CI budget
Platform-paid provider keys, plus a Windows check on every push after a regression hid for five commits.
results
494
267 in the Rust core and 227 in the frontend; the shipped binary is also made to load its model and speak a line before CI accepts the build
at v0.4.0, measured by the repository
3
tagged releases in 21 days
v0.2.0 on 19 August, v0.3.0 on 21 August, v0.4.0 on 30 August 2026
9 to 30 August 2026, measured by git tags
since launch v0.4.0 shipped on 30 August 2026 as an unsigned beta, with a browser timeline editor scoped into a repo of its own.

