30ef02803da912894991fea163f5b222d1a9daf0
Three compounding bugs froze the UI when dragging the playhead after playback: 1. Self-deadlock on preview_windows: supply_preview_window / cancel_preview_windows / cancel_preview_window called cancel_preview_sequence / cancel_preview_frame while HOLDING the preview_windows mutex; those calls fire completions synchronously and the completion locks preview_windows again. Caught by sampling the hung process: UI thread in cancel_preview_sequence -> TicketSlot:: finish -> completion -> Mutex::lock. Cancels/releases are now collected under the lock and fired after it is dropped. 2. Seek starvation by shard pinning: a Seek request's scheduler frame is its ticket id, pinning it to worker (id mod W). The playback window fills every worker's slots (window slots are only released by UI-thread consumption), so the seek's pinned worker could have zero free slots while the UI thread blocked on the seek — permanent starvation. Seeks (interactive frame / real-time audio) are now claimable by ANY worker; the no-stealing shard rule stays for Playback frames (adjacent frames finish together). 3. No per-worker reserve: the global preview_window_capacity reserve is pool-wide accounting, but exhaustion happens per worker. Playback / Background claims now leave one credit unused per worker; Seek claims may use the last slot (they complete on the worker without UI involvement). Also: RealEngine::drop cancels the preview windows — ShmFrameRef has no self-release, so every dropped engine leaked its window's slots from the shared pool, starving later windows (surfaced as the full-suite playback_window_supplies_playhead_frames failure once the new probe test shifted the test schedule). new_sequence_has_default_two_video_ two_audio_tracks now takes the engine test lock (it asserts on the global undo stack; running lock-free raced parallel undo histories). New regression probe interactive_seek_renders_without_hanging: play 30 ticks (window fills and holds shm slots), pause, seek, synchronously render — must not hang. Scheduler tests updated for the reserve and seek-any-worker contract. OAK_DEBUG_DISPATCH=1 enables the dispatcher starvation/pool diagnostics used to track this down.
Oak Video Editor
Oak Video Editor is a free non-linear video editor for Windows, macOS, and Linux.
This project is a community-maintained fork of Olive Video Editor.

NOTE: Oak Video Editor is alpha software and is considered highly unstable. While we highly appreciate users testing and providing usage information, please use at your own risk.
Binaries
The binary can be downloaded here:
Building from Source
See docs/build.md for build instructions on Windows (MSYS2), Linux (Debian/Ubuntu, Fedora, Arch Linux), and macOS.
Documentation
- Project Storage Architecture (中文) — database write-through persistence, node-granular journal, persistent undo
- Build guide · 工程文件格式
Roadmap
| Version | Theme | Core Deliverables | Boundary Notes |
|---|---|---|---|
| 0.3 | Plugin Architecture Milestone | Production-ready OpenFX host support | Not about quantity of plugins, but "any OFX plugin loads without crashing" |
| 0.4 | Color, Audio & Performance | .cube/.3dl support, scopes (waveform/vectorscope/histogram), three-way color wheels, waveform auto-sync, BWF timecode sync, audio meters (LUFS/VU), proxy media workflow, hardware-accelerated export (NVENC/VideoToolbox), batch render queue |
Combines the previous 0.4-0.6 scope into one usability milestone: color workflow, audio sync, and 4K/8K performance |
| 0.5 | Animation, Tracking & Collaboration | Bézier keyframe curve editor, basic point tracking, image stabilizer, full multicam angle switching, OpenTimelineIO, EDL/XML import/export | Combines the previous 0.7-0.8 scope into one timeline/interchange milestone |
| 0.6 | Stability Milestone | Project file format freeze (backward compatibility promise), crash recovery, autosave, memory optimization | "Feature freeze" testing period before 1.0 |
| 1.0 | Production Ready | Complete documentation, installers, known issues list, community support channels | Declared "ready for serious projects" |
Languages
Rust
82.2%
HTML
11.9%
C
4.8%
C++
0.7%
Shell
0.4%