Skip to main content
Advanced Search
Search Terms
Content Type

Exact Matches
Tag Searches
Date Options
Updated after
Updated before
Created after
Created before

Search Results

70 total results found

App Structure & Frame Loop

Venturi Architecture 7. Editor UI (vv-app)

vv-app is the only binary. main() picks one of three modes from the command line: Invocation What runs vv-app [file] [--mcp] The editor window. An optional file is imported at startup; --mcp serves MCP whatever the setting says. vv-app mcp [project] Headless...

Timeline UI

Venturi Architecture 7. Editor UI (vv-app)

timeline_ui.rs (~6.7k lines, the largest module) is the multi-track timeline widget. It is drawn with egui's painter and hand-written hit-testing rather than nested widgets: for a dense grid of rectangles that is far cheaper. Contract with the app show_timelin...

Viewer, Transport & Playback

Venturi Architecture 7. Editor UI (vv-app)

Playback is split across threads so the UI never waits on a decoder: video is decoded ahead by RenderAhead, audio is decoded by the mix_buffers workers and played by the mixer, and the UI thread only composes what is already in memory. Pipeline The audio clo...

Panels & Dialogs

Venturi Architecture 7. Editor UI (vv-app)

The window is built from egui docked panels plus floating windows. Each panel's visibility and size live in Settings::panels, so the layout survives restarts. Window layout egui allocates panels in the order they are added. The left column comes first and tak...

Settings, i18n, Theme

Venturi Architecture 7. Editor UI (vv-app)

User settings settings.rs holds preferences of the program, not of the project. They are stored as JSON in $XDG_CONFIG_HOME/venturi/settings.json (default ~/.config/venturi/settings.json). Group Fields General Language, kinetic scrolling (timeline, media poo...

Entities

Venturi Architecture 2. Data Model (vv-core)

The whole document is one plain struct, vv_core::Project ( model.rs). There is no node graph: every clip carries a fixed EffectStack. The project is owned by a vv_session::Session together with its undo History; every change goes through a command (see Com...

IDs & IdMap

Venturi Architecture 2. Data Model (vv-core)

Entities are referenced by id, never by pointer or index into a Vec that could shift. The core rule: an id is never reused, and an undo puts an entity back under the id it had. Commands, selections and ids handed to MCP clients therefore stay valid across any...

Keyframes & Transforms

Venturi Architecture 2. Data Model (vv-core)

Every animatable parameter is a Keyframed<T>: a sorted Vec<(FrameIdx, T, Interpolation)> plus a default used when there are no keyframes. Values are evaluated at render time and never baked into cached frames. Evaluation Keyframes live on source frames: the...

Commands, Undo/Redo

Venturi Architecture 2. Data Model (vv-core)

Undo uses the command pattern ( command.rs). Each command captures, when applied, the state it needs to invert itself, so the history holds small deltas rather than project snapshots and is unbounded. pub trait Command: Debug + Send + Any { fn apply(&mut s...

Persistence

Venturi Architecture 2. Data Model (vv-core)

A project is saved as one human-readable RON file, written straight from the Project struct by serde ( persistence.rs). RON keeps the file debuggable and diffable with git. Compatibility There is no format version number and no migration step: older files are...

OTIO Import/Export

Venturi Architecture 2. Data Model (vv-core)

Timelines travel to and from other NLEs as OpenTimelineIO JSON ( vv_core::otio), tested against DaVinci Resolve. The code writes and reads the JSON directly with serde_json; there is no OTIO library dependency. Mapping Three layers of data Where For whom Stan...

Thread Map

Venturi Architecture 8. Concurrency

Venturi has one owner of the document at a time: the UI thread holds the Session (project + undo history), and only lends it to the MCP host thread between frames when MCP is enabled. Edits are applied only by whoever holds it. Every other thread works on a c...

Data Flow Between Threads

Venturi Architecture 8. Concurrency

Two patterns cover almost all cross-thread traffic: the playback loop, where the audio clock drives video decode and compositing, and session jobs, where background work reports back through a waker and Session::tick. Playback Video. After an edit the UI send...

Architecture

Venturi Architecture 9. MCP Server (vv-mcp)

vv-mcp exposes Venturi to AI agents over the Model Context Protocol. The protocol side (rmcp on a tokio runtime) never touches the project: it turns each request into a ToolCall and submits it through a McpHandle. Whoever owns the Session drains the matchin...

Headless vs Editor-Hosted

Venturi Architecture 9. MCP Server (vv-mcp)

The same MCP server runs in two hosts. Headless, vv-app mcp [project] is the whole program: no window, the session lives on the main thread. Editor-hosted, the agent works on the project the user has open, through a Unix socket that a small bridge process con...

Mixer & Effect Chain

Venturi Architecture 5. Audio (vv-audio, vv-vad)

All timeline audio goes through one function, vv_audio::mixer::mix_range. The preview calls it from the cpal callback and the export calls it on its own thread, so both produce the same mix. Signal chain Constant Value and why PROJECT_SAMPLE_RATE 48 kHz for ...

Probe & Import

Venturi Architecture 3. Media Pipeline (vv-media)

Importing turns a file path into a MediaItem in the project's media pool. Probing is the only step on the critical path; everything derived from the file (proxy, thumbnail, waveform) is produced later by background workers. Flow Probing a video costs about 10...

Time-Stretch & Speed

Venturi Architecture 5. Audio (vv-audio, vv-vad)

Pitch-preserving time-stretch is libavfilter's rubberband filter, wrapped by vv_audio::stretch_samples. No extra bindings are needed: the system FFmpeg is built with librubberband. Stretching is used in two places. Clip speed pitch_correction How the clip's ...