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

45 total results found

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 ...

Decode & HW Acceleration

Venturi Architecture 3. Media Pipeline (vv-media)

vv_media::Decoder decodes one video stream, sequentially ( next_frame) or after seek_to_time. Every source, software or hardware, ends up as the same FrameYuv420, so the cache and the compositor never know which path produced a frame. Choosing the GPU The Pl...

Voiceover Recording

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

Voiceover records the microphone onto the armed audio tracks while the timeline plays at 1x, over whatever is already there. The recorder lives in vv_audio::recorder; the take logic is in vv-app/src/voiceover.rs. Step Detail Input Recorder::start opens a cp...

Frame Cache

Venturi Architecture 3. Media Pipeline (vv-media)

Playback and scrubbing read decoded frames from one SharedFrameCache ( vv-media/src/cache.rs), filled ahead of the playhead by the RenderAhead thread ( vv-app/src/render_ahead.rs). The UI thread only reads it and composites; it never decodes. One cycle Key p...

Silence Detection

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

Silence removal tells speech apart from pauses with voice activity detection rather than a volume threshold, so clicks and room noise do not count as speech. The model is Silero VAD (MIT, 1.3 MB, embedded in vv-vad) run by tract, which is pure Rust: there is...

Proxies, Thumbnails, Waveforms

Venturi Architecture 3. Media Pipeline (vv-media)

Three artifacts are derived from every imported media, each by its own background worker in vv-app (one job at a time per worker). Whatever is already on disk is skipped, so reopening a project costs nothing. Proxies On long-GOP sources a scrub must decode fr...

Session

Venturi Architecture 6. Application Core (vv-session)

vv_session::Session is an open document without any UI: the Project, its History, where it is saved, and the background jobs working on it. The editor window and the headless MCP server both drive the same type, so import, relink, export and editing behave i...

Encode

Venturi Architecture 3. Media Pipeline (vv-media)

vv_media::Encoder writes the export: H.264 video plus optional AAC audio, muxed into MP4. It receives frames already composited and converted to I420 on the GPU, and audio already mixed; it only adapts the audio to the encoder's sample format and frame size. T...