Skip to content

Releases: Domica/CapRust

CapRust 0.7.0-beta.1 - first beta

Pre-release

Choose a tag to compare

@Domica Domica released this 01 Oct 13:48

First beta of the 0.7 line. A UI polish pass (design tokens,
widget library, feedback states, start-screen redesign), a crash
handler, and a Windows installer.

Install

Windows 10 / 11, 64-bit.

  1. Download CapRust-0.7.0-beta.1-win64-setup.exe below.
  2. Run the wizard. Per-user install by default (no UAC prompt);
    pick "Install for all users" if you prefer Program Files.
  3. Launch from the Start Menu.

On first run CapRust offers to download a static FFmpeg build
(~110 MB) if ffmpeg / ffprobe are not on your PATH.

Highlights

  • UI polish - design tokens, widget library, loading spinner,
    status banners, error toasts, and a redesigned start screen with
    a sidebar, New Project modal, and a grid of recent projects with
    cached thumbnails.
  • Crash handler - every uncaught panic writes a report with a
    full backtrace to %APPDATA%\CapRust\crashes\.
  • Windows installer - single .exe wizard, per-user by default,
    8 MB compressed download.

See CHANGELOG.md for the full list.

Requirements

  • Windows 10 1809 or later (x64)
  • ~150 MB free disk space, plus ~110 MB for FFmpeg and more for AI
    models if you want auto-captions or narration.

Known issues

  • Binary size is 22.3 MB (target was 20). Size optimization will
    land in beta.2.
  • Auto-update check is manual (no silent background updater yet).
  • Without code signing, Windows SmartScreen may show a warning;
    click "More info" then "Run anyway".

Verify

SHA-256 of the installer is listed under the asset below.

SHA-256: 4DAC4238FC6FB5394B0B999068296D0821F2DF438B0F1B241985271A31CFE457

CapRust 0.6.0-alpha.1 — settings sync, fonts, captions effects

Choose a tag to compare

@Domica Domica released this 30 Sep 10:12

First alpha of the 0.6 line. Settings portability, user-selectable
fonts, and captions parity.

Added

  • Settings export/import as JSON. File → Settings → Paths →
    Backup. Export writes a versioned SettingsFile envelope;
    import reads it back. Missing fields are defaulted, a newer
    format version is refused with a clear message.
  • Settings auto-sync via cloud folder. Point CapRust at a
    folder that Google Drive, OneDrive, Dropbox, Box, iCloud Drive,
    Syncthing, or Nextcloud keeps in sync. On every save a snapshot
    is written to <folder>/caprust-settings.json. On startup, if
    the folder holds a newer snapshot, a modal offers Load them /
    Keep local. Transport is the cloud client's folder sync;
    CapRust never talks to a cloud API.
  • User-selectable app font family + size. Settings →
    Appearance → Font. Families: Default (egui), Segoe UI, Arial,
    Consolas. Size 0.8–1.5× scales the entire UI via
    pixels-per-point. No font files bundled; the system font is
    read from %WINDIR%\Fonts.
  • Captions motion + procedural effects parity with text
    overlays.
    Captions clips now carry TextMotion (X/Y/Scale)
    and TextEffect (Blink/Pulse/ColorCycle), editable from the
    clip properties panel. Same command, same Ctrl+Z semantics as
    TextOverlay.
  • Issue templates for bug reports and feature requests.
  • Drift logger. The periodic preview state INFO line now
    includes audio_ms and delta for future sync regressions.

Changed

  • crates/mcp/Cargo.toml uses version.workspace = true so a
    release bump touches one place.

Fixed

  • Captions drawtext now respects the clip's motion and effect
    instead of hardcoding identity/none.

Known issues

  • CLAP bypass toggle is not undoable. Bypass flips the field
    in place; Ctrl+Z does not restore it. Remove and add are
    undoable as usual.
  • CLAP scan paths are fixed. Two directories only
    (C:\Program Files\Common Files\CLAP,
    %APPDATA%\CapRust\plugins). Custom paths in Settings are a
    follow-up.
  • Deferred audio start adds silence at the top of playback.
    With a transition in the project, audio begins ~2–3 s after you
    press Play, matching when the first frame arrives. Without a
    transition the gap is ~370 ms.
  • Transition easing is stored but not rendered. The
    EaseCurve on each clip is preserved in the project file, but
    the pinned ffmpeg build (gyan.dev essentials 2026-01-26) does
    not support fade=curve=. Renders emit plain linear fades.
  • MCP is single-session. No live sync with a running GUI yet.
  • No installer yet; download the nightly ZIP and extract it.
  • FFmpeg is not bundled. First run offers to download a BtbN
    build or to point at an existing install.
  • Windows only.
  • Text overlay rotation is stored in the model but neither
    rendered nor exposed in the UI.
  • YuNet face detection loads and runs but never fires
    detections on real frames. SCRFD is the primary detector.

Requirements

  • Windows 10/11 x86-64
  • ~150 MB free disk (plus ~110 MB if FFmpeg auto-download runs)
  • x86-64 CPU with SSE4.2 (baseline, no AVX-512)
  • First-run internet access for FFmpeg (unless ffmpeg.exe is
    already on PATH)-auto detected.

Tests

257 passing, 8 skipped (6 existing + 2 CLAP tests that require
ZebraHZ on a fixed path).

CapRust 0.5.0-alpha.1 — CLAP plugins, MCP server, xfade drift fix

Choose a tag to compare

@Domica Domica released this 29 Sep 15:06

Added

  • CLAP plugin hosting. CapRust scans the two standard CLAP
    folders (C:\Program Files\Common Files\CLAP and
    %APPDATA%\CapRust\plugins) and lists every .clap binary in a
    new Plugins tab in the asset browser. The scan is feature-gated
    behind clap so Linux CI without the CLAP SDK still builds.
    Plugin binaries are untrusted code; every load is wrapped in
    catch_unwind.
  • Master plugin chain. ProjectState.master_plugins: Vec<PluginInstance>. A + on any plugin card adds it to the
    chain. A new Master dock tab shows the active chain with
    per-instance Bypass and Remove. All mutations go through the
    undo stack (AddMasterPluginCommand, RemoveMasterPluginCommand,
    SetPluginParamCommand). render_hash includes the chain so any
    change respawns the preview.
  • CLAP audio processing. The master chain runs on the PCM
    reader thread, between the ffmpeg decode and the cpal ring
    buffer. Interleaved stereo is deinterleaved to planar, processed
    by each plugin in turn, then reinterleaved. Verified against
    u-he ZebraHZ 2.9.4 on Windows: loads, activates, and processes
    a test sine without NaN.
  • MCP server. caprust-mcp.exe is a standalone binary crate.
    Line-delimited JSON-RPC 2.0 on stdio; loads a .caprust project
    file and exposes read-only inspection plus mutating tools. 15
    tools total: get_project_summary, list_tracks, list_clips,
    list_media, add_media, add_clip_to_timeline, move_clip,
    split_clip, set_transition, set_clip_volume,
    set_clip_speed, set_clip_fade, undo, redo,
    save_project. Every mutating tool goes through UndoStack,
    same as the UI. No tokio, no rmcp — 200-line hand-rolled
    dispatch.
  • AddMediaCommand in core (was missing for the MCP
    add_media tool to satisfy DIRECTIVES 6).
  • docs/mcp.md with a Claude Desktop config template, tool
    reference, and known limits.
  • Drift logger. The periodic preview state INFO line now
    shows audio_ms=Some(N) delta=Some(N) — sample-counter position
    and the ms distance between playhead and audio. Handy for
    future sync regressions.

Fixed

  • Xfade audio drift in preview. The audio player started on
    the Play click, but the playhead anchors only on the first
    consumed video frame. A project without any transition delivered
    that frame in ~370 ms, so audio and playhead stayed in step. A
    project with an xfade or slide forces ffmpeg to decode both
    clips from their beginning to build the blend; the first frame
    arrived 2.2–2.4 s later. By then audio was already 2.2–2.4 s
    ahead of the playhead, and every sync log showed the same fixed
    delta (measured: 2285 ms fade, 2422 ms slide). Fix: audio is now
    deferred until the first frame is consumed. Audio and playhead
    both start from the same position, so audio_baseline is near
    zero regardless of transition complexity.
  • SetTransitionCommand clamp. The model shifted followers
    by the raw transition_duration_ms; the render clamps to half
    of the shorter clip. For a 3000 ms slide on a 4 s clip the model
    shifted 3000 ms while the render shortened by 2000 ms, adding a
    1000 ms gap after the transition. The model now uses the same
    clamp as the render.
  • commands.rs module ordering. Doc comment / pub mod order
    was fragile; the module list is now always below the doc block.

Changed

  • crates/mcp/Cargo.toml switched from a hardcoded version
    to version.workspace = true, so a release bump touches one
    place.

Known issues

  • CLAP bypass toggle is not undoable. Bypass flips the field
    in place; Ctrl+Z does not restore it. Remove and add are
    undoable as usual.
  • CLAP scan paths are fixed. Two directories only
    (C:\Program Files\Common Files\CLAP, %APPDATA%\CapRust\plugins).
    Custom paths in Settings are a follow-up.
  • Deferred audio start adds silence at the top of playback.
    With a transition in the project, audio begins ~2–3 s after you
    press Play, matching when the first frame arrives. Without a
    transition the gap is ~370 ms.
  • Transition easing is stored but not rendered. The EaseCurve
    on each clip is preserved in the project file, but the pinned
    ffmpeg build (gyan.dev essentials 2026-01-26) does not support
    fade=curve=. Renders emit plain linear fades.
  • MCP is single-session. No live sync with a running GUI yet.
  • No installer yet; download the nightly ZIP and extract it.
  • FFmpeg is not bundled. First run offers to download a BtbN
    build or to point at an existing install.
  • Windows only.
  • Text overlay rotation is stored in the model but neither
    rendered nor exposed in the UI.
  • YuNet face detection loads and runs but never fires
    detections on real frames. SCRFD is the primary detector.

CapRust 0.4.0-alpha.2 — transitions, batch undo, UX polish

Choose a tag to compare

@Domica Domica released this 29 Sep 10:26

Second alpha of the 0.4 line. Transitions on the timeline, batch
undo, and UX polish.

Added

  • Transition easing. Clips carry transition_in_easing and
    transition_out_easing (both EaseCurve, default Linear). The
    clip properties panel shows an Easing dropdown under any
    transition that is present. The render currently emits plain
    linear fades because the gyan.dev essentials build we test
    against (2026-01-26) rejects fade=curve= with "Option not
    found". The field is stored and preserved for the day we pin a
    newer ffmpeg.
  • Configurable transition duration. New
    Clip.transition_duration_ms (default 500) with a 100..3000 ms
    slider in the clip properties panel. Applies to both in and out
    edges of a clip.
  • Xfade shifts followers. Attaching an xfade between two
    adjacent clips on the same track now moves the follower clip and
    every clip after it on that track left by the transition
    duration. Removing the transition shifts them back. Changing the
    duration shifts by the delta. All in one command so Ctrl+Z
    restores the whole batch. Applied in SetTransitionCommand and
    SetTransitionDurationCommand.
  • Timeline overlap shading. Clips that carry an xfade on their
    in-edge show an accent-tinted slice with thin diagonal hatching
    over the overlap region. The crossfade footprint is visible at a
    glance.
  • Fade-out on the last clip of an xfade run. The earlier
    clips' ends are consumed by the next clip's xfade, but the tail
    of the run can now fade back to black when its clip has
    transition_out == Some("fade").
  • MacroCommand. Runs a list of commands as a single undoable
    step, with rollback on mid-batch failure. Used by the media bin
    batch drop so a 4-clip drop is one Ctrl+Z.
  • Ctrl+Z / Ctrl+Y / Ctrl+Shift+Z keyboard shortcuts for
    undo/redo. Previously only reachable through the timeline
    toolbar icons.
  • App icon embedded in the .exe via winres, runtime window
    icon, README header logo.
  • Material-style egui_dock theme. Tab bar matches the panel
    fill, 30px tall, active tab uses an accent wash. Close button
    subtle, brightens on hover.
  • Brighter toasts. Accent border, top highlight line, and a
    fill lift so notifications read as elevated.

Fixed

  • Media bin multi-select and long-press drag. Ctrl+click
    toggles membership, plain click replaces. Holding the primary
    button for 500 ms on a card starts a drag; a shorter click only
    selects. The X button on a multi-selection removes every
    selected item at once.
  • Batch drag to timeline. Dropping a multi-selection chains
    the clips left-to-right at the drop position and selects the
    result so a follow-up move or delete acts on the whole batch.
  • Group move on the timeline. Ctrl+click or marquee selects
    multiple clips; dragging one of them moves the entire group by
    the same time and track delta in a single undoable step.
  • Captions and text overlays seek-shift correctly. Their
    timeline_start_sec now follows the playhead seek, matching
    video and audio. Previously a seek into the middle of a long
    project left their enable windows on the original timeline.
  • Apostrophes in caption text no longer break the preview.
    ASCII apostrophe and double quote substitute to U+2019 / U+201C
    at render time; both are safe inside a filtergraph single-quoted
    value.
  • Media bin X button clickable on hover. The enclosing drag
    source claimed the pointer, so the button vanished mid-click.
    Rewritten to use the raw pointer position for visibility and the
    raw primary-click edge for the action.
  • Total render duration accounts for xfade shortening. A
    3-second crossfade used to leave a 3-second black tail at the
    end of the render because the base and audio bed were sized to
    the unshortened sum.
  • Overlapping clip detection. Run grouping now accepts a
    positive overlap equal to the transition duration, not just
    butt-joined clips.
  • Dragging a clip that carries an xfade now removes the
    transition
    with a toast, restoring every follower to its
    original position. The user re-adds after the move.

Changed

  • SetTransitionCommand rewritten: the shift is applied to the
    follower clip and every clip after it on the same track.
  • Clip gained applied_xfade_shift_ms to track the shift the
    transition command applied.
  • move_many::MoveManyCommand and macro_command::MacroCommand
    new core modules.
  • VideoEncoder enum (H264/H265/AV1 x CPU/NVENC/AMF) added to
    ExportSettings in the previous alpha; unchanged here.

Known issues

  • No installer yet; download the nightly ZIP and extract it.
  • FFmpeg is not bundled. First run offers to download a BtbN build
    or to point at an existing install.
  • Windows only.
  • Transition easing stored but not rendered on the current ffmpeg
    build. Needs a build with fade=curve= support.
  • Text overlay rotation is stored in the model but neither
    rendered nor exposed in the UI.
  • Preview A/V sync has a residual 100-300 ms lead/lag on some
    hardware. Tunable via CAPRUST_AV_DELAY_MS.

CapRust 0.4.0-alpha.1 — editor interaction pass

Choose a tag to compare

@Domica Domica released this 28 Sep 20:50

Fourth public alpha. Editor interaction pass: media bin multi-select,
group drag on the timeline, and the caption pipeline.

Added

  • Media bin multi-select. Ctrl+click toggles membership, plain
    click replaces. Selected cards get a thicker accent border. The X
    button on a card that belongs to a multi-item selection removes
    every selected item at once, with Ctrl+Z restoring the clips that
    referenced them.
  • Long-press drag from the media bin. Holding the primary button
    on a card for 500 ms starts a drag; a shorter click only selects.
    The card preview badge follows the cursor and shows how many items
    are being dragged ("1 clip" / "N clips").
  • Batch drag to the timeline. Dropping a multi-selection chains
    the items left-to-right at the target drop position, using each
    item's duration. The inserted clips come back selected, so a
    follow-up move or delete acts on the whole batch.
  • Group move on the timeline. Ctrl+click or marquee selects
    multiple clips; dragging one of them moves the entire group by the
    same time and track delta in a single undoable step. Previously a
    multi-select drag moved only the clip under the pointer.

Fixed

  • Captions and text overlays rendered at the wrong time after a
    seek.
    Video and audio already shifted their timeline_start_sec
    by seek_sec and skipped clips before the seek. Captions and text
    overlays did not, so a seek into the middle of a long project left
    their enable windows on the original timeline. Same seek
    arithmetic now applies to both arms.
  • Apostrophes in caption text broke the preview. Both \\' and
    the shell-style '\\'' escape fail on the BtbN / gyan ffmpeg
    builds; ffmpeg's filter option parser does not implement
    close-reopen semantics. The first leaks the rest of the option
    list as a new filter name (the classic 'No such filter: '
    error), the second terminates the text value early and renders
    fragments of the filtergraph on the frame. Fix: substitute ASCII
    apostrophe and double quote with U+2019 / U+201C at render time;
    these are not filtergraph special chars and never need escaping.
  • Media bin X button was unclickable on hover. The button was
    only drawn when the card was hovered, but the enclosing
    dnd_drag_source claimed the pointer the moment it entered the
    card. egui's hover arbitration then reported the card as
    not-hovered as soon as the pointer reached the X, so the button
    vanished mid-click. Rewrote visibility and hit test against the
    raw pointer position.
  • Every plain click in the media bin started a drag. egui's
    dnd_drag_source uses the whole available UI rect as its interact
    area, so inside a scrollable grid every click anywhere in the
    panel started a drag on the last-registered card. Replaced with
    per-card allocate_exact_size + manual DragAndDrop::set_payload.

Changed

  • last_dnd_payload, pending_drop and the timeline drop handler
    now carry Vec<Uuid> instead of a single Uuid.
  • MediaBinState gained selected_media: Vec<Uuid>.
  • New core module commands::move_many with MoveManyCommand.

Known issues

  • No installer yet; download the nightly ZIP and extract it.
  • FFmpeg is not bundled. First run offers to download a BtbN build
    or to point at an existing install.
  • Windows only.
  • A batch drop emits one RippleInsertCommand per item; undo takes
    N presses. A follow-up will collapse them into one command.
  • Text overlay rotation is stored in the model but neither rendered
    nor exposed in the UI.
  • Preview A/V sync has a residual 100-300 ms lead/lag on some
    hardware. Tunable via CAPRUST_AV_DELAY_MS.

CapRust 0.3.0-alpha.1 — audio, seek, hardware encoders

Choose a tag to compare

@Domica Domica released this 28 Sep 14:48

Third public alpha. Audio pipeline rewritten, seek made usable, and
hardware encoders wired in.

Added

  • Hardware-accelerated export (NVENC, AMF). The export dialog
    probes the running ffmpeg build on first open and offers only the
    encoders that actually open on this machine. CPU H.264/H.265/AV1
    remain always available. HEVC and AV1 output carry the correct
    mp4 tags (hvc1, av01). Measured 5-15x faster on an RTX 2060.
  • Pre-rendered audio PCM cache. A background ffmpeg process
    renders the whole project's audio mix to a stable PCM file in
    %TEMP%. The play path prefers this cache over the preview's own
    PCM output, so audio survives a preview respawn instead of
    restarting on every edit and seek.
  • Seek optimization in the preview renderer. plan_from_project
    now takes the current playhead and rewrites each input to
    -ss/-t so ffmpeg demuxer-seeks instead of decoding from t=0.
    A seek into the second half of a 3-minute project goes from 5-10 s
    to ~200-500 ms. Projects with transitions fall back to the old
    output-side seek.
  • Missing-media relink flow. On project load, if any media file
    is gone, a dialog lists the missing items, offers a folder picker,
    and matches files by basename (case-insensitive, depth-capped
    scan). The whole batch runs as one undoable RelinkManyCommand.
  • Media bin shows a red "Missing" badge on cards whose source file
    is gone.
  • Timeline clips without a source file are drawn with a red
    diagonal hatch so a broken clip cannot hide under its normal
    fill colour.
  • Paused seek now spawns a one-shot preview render at the new
    playhead. Previously a timeline click while paused moved the
    playhead but left the old frame on screen and no renderer alive.

Fixed

  • Final audio mix was attenuating clips cumulatively. A chain
    of N sequential amix filters with the default normalize=1
    divided the signal by 2 at each stage, so the first clip on a
    17-clip project played at roughly 1/2^17 of the last. Replaced
    with a single amix across all inputs at normalize=0. The
    opening clip is now at full level and a lone m4a no longer plays
    ~10x louder than video-embedded audio.
  • Video frame rate and playback stayed silent on a seek past the
    first clip. PTS was not reset before the filtergraph's trim, so
    the trim saw an empty window and selected zero frames. Reset
    before trim in both video and audio chains.
  • RenderPlan::total_duration_sec was zero when a seek was applied
    because it had already been derived from the seek-shifted clips;
    subtracting again collapsed the base black / silence bed to 0 s.
  • The 650 ms A/V delay compensation is now skipped on
    seek-optimized plans. The fixed value pushed video behind audio
    whenever the audio was cache-fed and the video was already
    seeked.

Changed

  • Cargo.lock regenerated; workspace version bumped to
    0.3.0-alpha.1.
  • ExportSettings.codec_index values 3..=8 now select NVENC and
    AMF variants. 0/1/2 keep their old meaning. Existing projects
    load unchanged.

Known issues

  • No installer yet; download the nightly ZIP and extract it.
  • FFmpeg is not bundled. First run offers to download a BtbN build
    (~110 MB) or to point at an existing install. NVENC and AMF
    require a build that was compiled with --enable-nvenc /
    --enable-amf; the BtbN and gyan.dev builds both satisfy that.
  • Windows only.
  • Text overlay rotation is stored in the model but neither rendered
    nor exposed in the UI.
  • MyMemory translation quality is below DeepL.
  • Preview A/V sync has a residual 100-300 ms lead/lag on some
    hardware. Tunable via CAPRUST_AV_DELAY_MS; a UI slider is
    planned.

CapRust 0.2.0-alpha.1 — dock layout + captions translation

Choose a tag to compare

@Domica Domica released this 28 Sep 11:22

Second public alpha. Feature additions since 0.1.0-alpha.1:

  • Dockable panel layout (egui_dock 0.16) with presets and
    persistence.
  • Captions translation via MyMemory, one Captions track per
    language.

Fixes since 0.1.0-alpha.1:

  • Preview survives missing source files.
  • Speed slider drag debounced (250 ms).
  • Audio clips hide the Video tab.
  • Video-only blocks hidden on TextOverlay clips.

Changed:

  • eframe default-features = false (AccessKit off, egui_dock
    mid-frame panic).
  • Nightly baseline x86-64, no AVX-512.
  • Media bin toolbars wrap on narrow zones.

See CHANGELOG.md for the full list."

CapRust 0.1.0-alpha.1 — first public alpha

Choose a tag to compare

@Domica Domica released this 27 Sep 22:04

First public alpha of CapRust — a social-first video editor for Windows. Pre-release: expect rough edges.

Download

  1. Download caprust-nightly-win64.zip below and extract it anywhere.
  2. Run caprust-app.exe.
  3. On first launch, click Download FFmpeg (~110 MB) when prompted, or point CapRust at an existing FFmpeg install.

Highlights

  • Timeline: magnetic mode, snap, ripple, multi-select, marquee, trim-follow
  • Preview: filtergraph-based (same plan as export), auto-refreshes while paused on any edit
  • Export: video + audio + xfade sync + caption burn-in, live ETA and size estimate
  • Captions: Whisper transcription, per-word progressive reveal, per-clip style (font, position, color, outline, background)
  • Text overlays: content editor, motion (x/y/scale), effects (blink/pulse/color-cycle), drag and resize directly in the preview pane
  • Effects: 17 built-in
  • Audio: fade in/out, volume keyframes, auto-ducking, speed ramp with easing
  • AI: auto-reframe (SCRFD), background removal (u2netp), karaoke captions
  • i18n: English and Croatian

Known issues

  • Installer not yet provided; use the ZIP below
  • FFmpeg is not bundled; the first-run prompt downloads it
  • Windows only
  • Text overlay rotation is stored but not rendered

Requirements

  • Windows 10/11 x64
  • ~150 MB free disk for FFmpeg, more for models
  • Whisper / Piper models download on first use (per feature)