Desktop non-linear video editor for Windows, built with Electron, React, Vite, Zustand, and native FFmpeg.

This project was built with substantial help from AI coding tools (Cursor / agent-assisted workflows). Architecture choices, feature implementation, debugging, and iteration were done in collaboration with AI — treat the codebase as human-directed, AI-accelerated work, not as a fully hand-written greenfield app.
- Media bin (import, multi-select, drag onto the timeline)
- Multi-track timeline (video, audio, text) with trim, blade, snap, zoom, and ripple insert
- Realtime preview with H.264 proxy generation for phone/HEVC footage
- Layer compositing (upper tracks over lower), transforms, crop, opacity
- On-canvas transform handles (multi-select / group transform)
- Text overlays with color alpha, outline, drop shadow, and bevel
- Preview audio with selectable output device
- Project save/load (
.vidit) and cross-project copy/paste of layers - Export to MP4/MOV with H.264, H.265, or ProRes
npm install
npm run devThis starts Vite and opens the Electron window (not a browser tab). Import and media preview require the Electron preload bridge.
npm run test:e2ePlaywright drives the Electron app (import, timeline, preview, export smoke coverage).
npm run build:dir # unpackaged app under release/
npm run build # Windows NSIS installer under release/Installer artifact: release/Vidit-<version>-setup.exe (unsigned — SmartScreen may warn).
Releases are deliberate, not automatic on every push (same idea as a tag-gated pipeline).
-
When you want a release, bump and review notes locally:
npm run release:prepare -- 0.2.0
-
Commit any pending work (including the version bump), then tag and push only the tag to publish:
git tag -a v0.2.0 -m "Vidit v0.2.0" git push origin HEAD git push origin v0.2.0 -
GitHub Actions (
.github/workflows/release.yml) builds the NSIS installer and creates a GitHub Release. Notes are auto-generated from commits since the previousv*tag, so one release collects everything since the last version.
Or run Actions → Release → Run workflow and pass a tag such as v0.2.0 (that only creates/pushes the tag; the installer build runs from the tag push).
Ordinary pushes to main do not create releases.
| Area | Tech |
|---|---|
| Shell | Electron |
| UI | React 19 + Vite |
| State | Zustand + Immer |
| Media | ffmpeg-static / ffprobe-static |
| Preview | Chromium <video> + H.264 proxies over vidit-media:// |
Private — all rights reserved unless otherwise noted.