Release dates are taken from the corresponding repository release tags. The duplicate
numeric and v5.1 tags are consolidated into one v5.1 entry.
- Added automatic multi-video Batch mode for Browse, drag-and-drop, Open With, CLI, and second-instance selections, with separate start/end trims, standard Compress controls, two-worker parallel encoding, adaptive serial fallback, continue-on-error processing, and grouped completion actions.
- Batch queues now probe and display per-file source details, expose queued/encoding/completed/failed/cancelled states, remain scrollable for long selections, and let users remove items before export. Returning to one selected video restores the previous single-file workflow.
- Batch trim fields default to zero seconds and clamp overlapping start/end requests proportionally so every source retains at least one second. Aggregate progress and ETA now account for the whole remaining queue instead of jumping between active workers.
- Batch output allocation stays collision-safe. Ask when done stages successful outputs for one folder selection, then publishes the full set without overwriting existing files; completion actions copy successful outputs as one clipboard group or reveal each distinct output folder once with every successful output selected.
- Fixed macOS Batch completion clipboard copies so Discord receives each output as a separate file item.
- Batch Reveal now selects all successful output files together in each destination folder.
- Updated the Discord target presets for the 20 MB free upload limit: 20 MB at 480p, 50 MB at 720p, 100 MB at 1080p, and 500 MB at native resolution. GIF Mode now uses a 20 MB Free target as well.
- Centered the active Lossless Trim tab label and refreshed the main-window and Batch mode website screenshots.
- Reduced preview-scrubbing contention with bounded background filmstrip work, shared encoder discovery, source-scoped frame caching, and memoized trim-insensitive controls.
- Added independent Ed25519 release-signature verification to in-app updates. Installers now require a valid signature bound to the release tag, asset name, and downloaded SHA-256 digest before they can be opened.
- Pinned GitHub Actions and the Rust/Node toolchains, installed the Tauri CLI from the lockfile, verified build-tool integrity, and added signed artifact provenance checks before release publication.
Released: 2026-08-10
- Added per-video Advanced mode audio track controls with a mixer popup that lists track names and estimated sizes, supports selecting individual tracks or all tracks, and reserves 128 kbps per selected AAC track in the target video bitrate.
- Changed audio normalization to measure the highest sample peak and apply fixed gain to reach 0 dB, without EBU R128 loudness normalization or dynamic compression.
- Changed automatic audio selection to start with the first source track and switch to a later track only when it has at least 20% more estimated data.
- Size-target video exports now apply encoder-specific peak-rate bounds and skip redundant native-size filtering, reducing oversized full-encode retries while retaining the bounded CPU fallback.
- Standard exports reuse the audio track identified during import instead of running a second FFprobe scan.
- Frame snapshots serialize concurrent requests and enforce bounded FFmpeg work, so repeated shortcut presses cannot pile up overlapping jobs.
- Exact scrub-frame work is isolated from background filmstrip generation, so cancelling a stale frame no longer interrupts the fallback timeline.
- Static previews and generated fallback clips request display-sized, bounded in-memory media; generated clips omit unused audio and repeated direct-preview attempts stop after a source failure.
- Lossless Trim keyframe discovery cancels superseded probes and reuses recent results for the current import.
- Anchored the version, links, and settings preset controls to the bottom of the window so they stay in place when switching export modes.
- Added the aspect-ratio crop selector to standard Compress mode alongside Advanced and GIF Mode.
- Hid the standard FPS choice that matches the imported video's frame rate while retaining the Source option for unchanged output.
- Added the active crop setting to the compact export summary above the action button.
- Kept preview frames at an exact 16:9 output ratio so 16:9 videos do not show side gaps.
- Fixed the compress button glow being clipped at the footer boundary.
Released: 2026-07-31
- Added a dedicated Lossless Trim mode beside Advanced that preserves source streams with a fast, keyframe-aligned stream copy, hides unrelated settings, can remove all audio tracks without re-encoding the video, and falls back to normal compression when stream copying is incompatible. Trim boundaries snap outward to source keyframes, and exports prefer MP4 before using a validated source container.
- Size-based compression now offers Lossless Trim when the selected segment is estimated to fit the chosen target at the source bitrate; accepting the offer switches to less-precise keyframe trimming so the user can choose trim points again before exporting.
- Added named settings presets alongside Autosave, with save, restore, delete, case-insensitive name replacement, and up to 20 persisted presets. Changing a compression or mode setting after restoring a preset returns the footer label to Autosave so it no longer implies the saved preset is active.
- Kept the persisted aspect-ratio crop selector visible in GIF Mode so switching workflows does not hide a crop that still applies to the export.
- Refreshed the website's Compress, Advanced, Lossless Trim, and GIF mode screenshots and added a dedicated Lossless Trim showcase section.
- Reorganized the export workflow around labeled Compress, Advanced, Lossless Trim, and GIF tabs, collapsed loaded videos into a compact file summary, kept the preset footer controls visible, placed trim controls directly beneath the preview, added target-aware summaries and action labels, and moved secondary timeline tools into an overflow panel.
- Stabilized the loaded-video layout, hid idle progress chrome, improved light-mode contrast, reduced the frame-snapshot overlay to a hover control, and constrained expanded keyboard shortcuts within the app window.
Released: 2026-07-28
- EBU R128 Loudness Normalization: Added optional audio loudness normalization (
-af loudnorm=I=-14:TP=0.0:LRA=11) targeting a 0 dB True Peak limit to eliminate quiet audio without clipping or distortion. - Smart Multi-Track Audio Selection: Automatically detects multi-track audio recordings (such as OBS or ShadowPlay multi-stream MP4s) and extracts/encodes only the primary audio stream with the most data, preferring the first stream on ties and reliably falling back to that first stream if discovery fails.
- Aspect Ratio Cropping Presets: Added aspect ratio crop options (
16:9,1:1Square,9:16Vertical/Shorts,4:3Standard,3:4,4:5,5:4) prepended ahead of scaling filters in FFmpeg's video pipeline. - Native Aspect Ratio Detection & Filtering: Detects the input video's native display aspect ratio and dynamically excludes matching crop presets from the selector dropdown to avoid redundant crop operations (e.g. excluding 16:9 for a 1920×1080 clip).
- Frame Snapshots: Added a 📷 Snapshot overlay button and
Cmd+Shift+S/Ctrl+Shift+Sglobal keyboard shortcut to extract full-resolution PNG frames at any playback position. - Integrated Snapshot Output Workflow: Frame snapshot saving respects the user's configured output destination (Downloads, source clip folder, custom directory, or save prompt) and completion action (copies saved PNG to clipboard with reveal fallback, or reveals in file explorer).
- OS Taskbar & Dock Progress Bar: Real-time encoding progress is now reflected on the OS taskbar/dock app icon (macOS Dock, Windows Taskbar button, Linux Unity launcher bar) so you can monitor compression progress while unfocused.
- Native System Notifications: Every in-app banner and error is mirrored in order as a matching desktop notification while vidcord is unfocused, using delivery paths that report failures consistently on Windows, macOS, and Linux. Clicking a notification now restores and focuses the vidcord window on every platform, and macOS builds now carry the stable app identity required for Notification Center authorization.
- Increased in-app banner opacity so notification text stays legible over the controls behind it.
- Made GIF sizing progressive, kept Linux GPU discovery off the cold-import path, validated hardware encoders before first-run auto-selection, and remembered failed preview hardware-decode paths.
- Bounded compression cancellation and desktop helper processes, capped preview-frame cache memory by bytes, and invalidated generated preview clips when a same-path source is re-imported.
- Isolated high-frequency playhead movement from full-app React renders, preserved toast memoization, removed redundant FFmpeg setup probes, and started website release requests concurrently with platform detection.
- Removed unnecessary backdrop filters from opaque app controls and aligned the direct
dirsdependency with Tauri's runtime version. - Deferred cold encoder and GPU discovery until the interface is idle, while immediately restoring the last detected encoder capabilities.
- Encoder discovery now waits for a quiet startup/import window, and superseded FFmpeg preview-frame requests are terminated so the newest scrub position is not blocked behind stale work.
- Avoided redundant live-video seeks during playhead dragging and skipped expensive filmstrip generation when native preview seeking is available.
- New installs prefer an available H.264 hardware encoder, while saved encoder choices remain unchanged and failed hardware decode or encode paths fall back automatically.
- Long encodes run below normal process priority to keep the app and desktop responsive, and GIF exports use a short sizing sample to avoid unnecessary full-size retry passes.
- File imports cancel superseded FFprobe processes and cap metadata analysis at six seconds instead of leaving stale probes active.
- Ask-when-done saves use a same-filesystem hard-link publish path when possible, avoiding a second full output copy while retaining the safe copy fallback.
- Fixed Windows ask-when-done publishing so hard-linked output files can complete their durability sync instead of failing with an access-denied error.
- FFmpeg filmstrips now start only after the first exact frame, decode keyframes into fewer lower-resolution thumbnails, and remain available as a fallback on Linux or when native preview loading fails.
- Preview frame, filmstrip, and fallback-clip jobs now enforce time and output-size limits instead of waiting indefinitely on a stalled FFmpeg process.
- Failed or stopped preview playback now preserves the current scrub position, while generated fallback clips remain autoplay-safe on WebKit instead of briefly starting and stopping.
- Replaying a preview after it reaches the trim end now restarts from the trim start instead of resuming at the out point.
- Long Linux filmstrips use eight representative frames, and fallback playback keeps only the latest generated clip in the webview to reduce FFmpeg work and memory copying.
- Single Horizontal Line Advanced Controls: Layout Advanced Mode controls (
Size,Resolution,Crop,FPS,Encoder,Mute,Norm,Info) into a clean 5-column single horizontal row. - Icon-Only Audio Controls: Updated
MuteandNormcontrols to compact 28px square icon-only SVG buttons with tooltips and accessible aria-labels. - Maxed-Out Active Waveform Icon: The active audio normalization button displays a full-amplitude 5-bar waveform icon when enabled.
- Memoized Controls Render Pipeline: Added
audioNormalize,cropAspectRatio, and dynamiccropOptionstoMemoizedSubtreedependencies so control state updates instantly without re-rendering the trim timeline. - Video imports now show an explicit “Reading video…” state, and missing FFmpeg uses the non-blocking in-app setup banner instead of an automatic system confirmation dialog.
- Trim controls use a tighter segmented layout and compositor-driven range/playhead motion to reduce layout work inside the glass timeline card. Unchanged import and settings controls are also skipped during trim-only renders.
- The timeline playhead now follows an actively moved trim handle in both directions instead of retaining a stale position when the handle reverses.
- Reduced glass-filter compositor cost, honored reduced-transparency settings across every glass control, and removed duplicate taskbar-progress and desktop-notification updates.
Released: 2026-07-23
- Reliable Windows FFmpeg detection: vidcord now recognizes WinGet's FFmpeg aliases and package directory immediately after installation, even before the running app receives an updated PATH, and no longer reports a successful setup when either
ffmpegorffprobeis still unavailable.
- Discord-ready GIF exports: a bottom-right GIF Mode switches the app to focused 10 MB Free and 50 MB Nitro Basic targets with selectable 15, 30, or Discord-safe maximum 50 FPS, removes unrelated video controls, and creates optimized animated GIF files with automatic size retries that preserve the chosen frame rate.
- Long-video timeline controls: the trim timeline can now show hours, minutes, and seconds, and its zoom range extends from 20× to 100× for more precise edits in long videos.
- Direct trim-time entry: Advanced Mode turns the timeline's start and end labels into editable fields that accept seconds or hours, minutes, and seconds.
- Source-bitrate exports: leaving the Advanced mode size field empty now encodes at the source video's bitrate without enforcing a target file size.
- Refreshed the main and Advanced mode screenshots and added a dedicated GIF Mode showcase.
Released: 2026-07-16
- Less intrusive playback controls: Stop now appears only while hovering the preview during playback instead of remaining visible after Play retains focus.
- Contained playback previews: live video playback now stays clipped to the preview instead of painting artifacts over nearby output controls.
- Clearer compression results: successful compression messages now show the percentage reduction from the original file size without repeating the selected target size.
- Richer import details: imported videos now show source resolution, frame rate, codec, average bitrate, and length in a compact one-line summary, while the preview uses a single playhead-over-duration readout.
- System-matched macOS title bar: the native title bar now follows the current macOS Light or Dark appearance instead of remaining white in Dark Mode.
- Flexible output completion: compact, always-visible settings-style controls above Compress let you choose Downloads, the imported clip's folder, a remembered custom folder, or an after-compression save prompt. Completed files are copied to the system clipboard by default, with a reveal fallback if copying fails, or can always be revealed instead.
- Feature idea credit: output destination and completion action ideas were suggested by wvbzy (WubzyFN on X).
- Reliable folder selection: custom output folders now open through the already-loaded native dialog API instead of failing when a deferred module cannot be fetched.
Released: 2026-07-15
- In-app update installer prompt: update notices can now download the matching installer for the current platform to Downloads and open it directly, with a release-page fallback.
- Safer update downloads: update installers are streamed asynchronously to disk with size, completeness, and GitHub-published SHA-256 integrity checks, then published under a collision-safe filename without replacing an existing Downloads file, including on FAT, exFAT, and network filesystems without hard-link support.
- Less intrusive update checks: automatic GitHub release checks now wait until startup work has settled instead of competing with initial file loading and encoder detection.
- Race-free cancellation: cancelling an encode now keeps the app in a cancelling state until FFmpeg exits, prevents overlapping compression jobs, and keeps stale cleanup from affecting a newer job.
- Faster size correction: strict-size compression now caps adaptive work at four full attempts for hardware encoders and two for CPU encoding, giving both the selected encoder and CPU fallback one measured bitrate correction instead of retrying as many as six times.
- More resilient encoding: hardware failures fall back to CPU even without a target-size retry, invalid command options are rejected early, malformed FFmpeg output is memory-bounded, and failed jobs are killed, reaped, and cleaned up consistently.
- Collision-safe output files: output names are atomically reserved before FFmpeg starts and remain owned across adaptive retries, preventing a late Downloads-file collision from being overwritten.
- Faster startup and file import: encoder discovery now overlaps settings loading, native media loading begins while FFprobe validates the file, and probes request only the metadata vidcord uses.
- Documented Linux preview limits: Linux continues to use FFmpeg-generated frame and filmstrip scrub previews; live video scrubbing and trim playback remain disabled because WebKitGTK's playback path can crash the renderer on some systems.
- Cancellable preview work: obsolete frame, filmstrip, fallback-clip, and pending playback work is invalidated when a new file loads, compression starts, playback stops, or the preview unmounts.
- Lighter filmstrips: sparse seeking now starts at three minutes, and preview images scale to the actual display pixel ratio instead of always rendering at 2x resolution.
- More stable preview caching: duplicate clip replacements now keep exact cache accounting, while oversized clips no longer evict useful cached previews.
- Automated FFmpeg setup assistance: Windows installers and first launch can offer package-manager FFmpeg installation while still keeping FFmpeg as a system dependency.
- More accurate FFmpeg detection: startup checks now require both
ffmpegandffprobe, so missingffprobestill shows setup help before video probing fails. - Faster startup detection: GPU discovery now overlaps encoder enumeration where safe, skips unnecessary work when FFmpeg cannot launch, reuses that successful probe instead of spawning a redundant version check, and terminates stalled GPU, FFprobe, encoder, and VAAPI discovery commands at bounded deadlines.
- Fixed Fedora AppImage detection: system FFmpeg tools no longer inherit incompatible libraries bundled inside the AppImage, preventing false missing-FFmpeg errors on newer Fedora releases.
- More reliable Open With routing: file-open events now wait for the React listener to register before delivering cold-start, reload, or second-instance file paths.
- Fixed Linux output reveal: Browse File now launches desktop helpers without AppImage-bundled library paths, preventing host file managers from failing with incompatible GLib symbols.
-
Fixed app and preview sizing: the main window now stays locked at 460×690, and preview/filmstrip thumbnails use a fixed 16:9 surface instead of resizing to content or source aspect ratio.
-
Accurate VideoToolbox labels: macOS hardware encoders are now labeled for macOS instead of implying they are limited to Apple Silicon.
-
Safer file switching: rapid file selections can no longer let an older probe replace the newest video, and unsupported drops leave the current selection intact.
-
More accessible controls: the file picker is fully keyboard-operable, compression progress is exposed to assistive technology, update/encoder dialogs trap and restore focus correctly, and native Space/right-click behavior is preserved on interactive fields.
-
Restored liquid-glass window styling: the app shell, cards, controls, footer, and light/dark palette once again match the established main-branch design while retaining the denser trim toolbar.
-
Clearer trim editing: trim commands are grouped into an intuitive native toolbar with a recognizable magnet, honest zoomed/off-screen handles, undoable keyboard edits, and
?shortcut help. -
Fixed-size window layout: standard and advanced controls continue to fit the 460×690 window without horizontal overflow, while the main-branch vertical scroll behavior remains available when platform title-bar space is tighter.
-
Readable encoder suggestions: the advanced encoder dropdown now uses a fully opaque, content-sized surface so names remain visible without controls showing through.
-
Responsive trim previews: dragging either the in or out handle keeps the thumbnail updated even when the WebView cannot seek the source directly or filmstrip generation is unavailable; on supported platforms, releasing a handle keeps the already-seeked video frame visible immediately while the exact FFmpeg fallback frame is generated in the background, and Play/Stop no longer reloads or clears that frame.
-
Selection-centered timeline zoom: zoom buttons and Ctrl/Cmd-wheel zoom now focus the visible timeline on the current in/out range instead of the full clip midpoint.
-
Stable compression hover state: the Compress Video button now keeps its gradient surface while hovering instead of flashing between gradient and solid-color paints.
-
More reliable preferences: repeated settings changes now replace the persisted file atomically on Windows instead of failing after the first save.
-
Restored footer spacing: version and link controls use the main-branch spacing, with Advanced Mode anchored at the opposite edge.
- Live release download count: the landing page now shows the aggregate GitHub release download total and falls back cleanly when the count service is unavailable.
- Stronger release safeguards: CI now enforces frontend bundle-size budgets and high-severity npm audits on pull requests, validates structured data and the sitemap, rejects empty tagged changelog sections, pins the write-enabled release action, and prevents published tag builds from being cancelled by later pushes.
- More reliable cross-platform builds: Rust caches are isolated by compatible Linux runner and Windows target architecture, packaged artifacts use bounded retention without redundant recompression, site-only validation avoids installing the full app dependency tree, and source text uses consistent LF line endings across platforms.
- Dependency hardening: updated
anyhowto 1.0.103 to resolve itsError::downcast_mut()soundness advisory.
- Updated the README, FFmpeg setup guide, website copy, structured data, and AI grounding files for package-manager FFmpeg setup and selectable encoder behavior.
- Corrected Discord tier, update-networking, package-size, trim-precision, retry-order, Linux compatibility, and encoder-selection claims across the README and website.
- Updated the README, website, structured data, AI grounding files, and contributor guidance to document Linux preview limitations and the FFmpeg-generated scrub-preview fallback.
- Aligned the public and maintainer documentation with bounded compression retries, race-safe cancellation, collision-safe output reservation, verified update downloads, and website network behavior.
Released: 2026-07-04
- Reimplemented video preview: the preview system has been rebuilt around source-shaped playback, live scrub updates, display-sized thumbnails and filmstrips, and a more accurate trim playback loop.
- Sharper preview frames and filmstrips: trim previews now request images sized to the rendered preview pane, including HiDPI displays, instead of using fixed low-resolution thumbnails.
- More reliable preview generation: preview frames and filmstrips try FFmpeg hardware decode first and automatically retry with software decode when hardware acceleration fails.
- Faster long-video filmstrips: videos over 10 minutes now use sparse frame seeks and lower frame counts so loading long clips does less upfront thumbnail work.
- Hardware-accelerated preview clips: generated scrub preview clips now try platform H.264 hardware encoders where available before falling back to
libx264. - Playhead-aware fallback preview clips: generated fallback preview clips now start from the current playhead and stay bounded to a short preview window so long selections do not generate huge in-memory clips.
- Auto-fitting compact window: the main window now starts at 460×690, keeps a fixed width, and automatically adjusts height to fit content and the available monitor space while saved window state restores position only.
- Tighter settings layout: target, FPS, and encoder controls now use fixed-width sizing where needed so the standard and advanced rows fit cleanly in the compact window.
- Cleaner shortcut help: the trim shortcut reference is now a hover/focus popover so it no longer expands the timeline layout.
- Safer encoder warning tooltip: the H.265 compatibility tooltip now opens above the encoder row and layers over neighboring controls reliably.
- Refreshed the website screenshots with corrected compact-window captures.
- Updated the README, website copy, structured data, and AI grounding files for scrub preview and preview-from-playhead behavior.
- Preview frame cache keys now include requested output dimensions, and preview clip cache keys include the source file path and bounded time window to avoid stale preview reuse across files or display sizes.
- Rust audit ignores now include the current upstream
quick-xmladvisories that are blocked on the Tauri/plist dependency chain.
Released: 2026-07-01
- Output FPS controls: standard mode can leave frame rate unchanged or cap output at 24, 30, or 60 FPS, with options above the source frame rate hidden. Advanced mode accepts a custom FPS value or an empty field shown as Off for no change.
- Updated output metadata: compressed video comments now point to
vidcord.app.
- Compact H.265 warning: the H.265 compatibility warning now appears behind a hover/focus warning icon instead of taking up space as inline text.
- Updated the README, website copy, structured data, and AI grounding files for the new FPS controls.
Released: 2026-06-23
- Strict target-size verification: finished outputs are measured against the selected size limit. Oversized results are removed and retried automatically.
- Smarter retry order: if the first attempt misses the target, vidcord now tries
libx264CPU encoding at the original bitrate before stepping down through 80%, 70%, and lower safety levels with the original encoder and CPU fallback. - Clearer progress and results: progress now shows the current attempt number, encoder, bitrate, and ETA. Success reports the final output size; failure reports the smallest oversized result.
- Advanced encoder autocomplete: replaced the browser datalist with a keyboard-friendly menu that filters installed encoders, keeps inline completion, and avoids horizontal overflow in the fixed-size window.
- H.265 grouping: normal-mode encoder choices now group H.264 and H.265 options separately, with a compatibility warning when an HEVC encoder is selected.
- Fixed preview race conditions so stale frame loads are ignored when switching files or scrubbing quickly.
- Tightened TypeScript and CI configuration for cleaner release checks.
- Updated frontend and Rust transitive dependencies to clear release audit advisories.
Released: 2026-04-25
- H.265 / HEVC support:
libx265(CPU) and the hardware variantshevc_nvenc,hevc_amf,hevc_qsv,hevc_vaapi, andhevc_videotoolboxnow appear directly in the normal-mode encoder dropdown. Hardware encoders are gated on the same vendor / VAAPI-device detection as their H.264 counterparts and are only listed when the installed FFmpeg actually exposes them.
- Dropdown readability on Windows: option lists in the encoder, target, snap, and resolution dropdowns now render with an explicit opaque background and text colour. The native popup ignores
backdrop-filter, so on Windows the transparent select previously fell back to system colours and rendered options as white-on-white. - Solid window background:
--bgis now fully opaque and the body no longer carries a transparent background, eliminating desktop bleed-through after the v6.2 transparency fix.
- The 6-hour throttle now advances on update-check failure as well as success, so a transient network error no longer causes every subsequent app launch to refire the request immediately.
- Banner dismissal persists across launches: dismissing the "Version X available" banner skips it until a newer release appears.
- Update-check failures are routed through the rotating log so opaque "no banner" reports are diagnosable.
- The GitHub API request now includes
CARGO_PKG_VERSIONin its User-Agent.
- Rewrote
README.mdto production standards: badges, table of contents, hero screenshot, feature list grouped by capability, per-platform install table, FFmpeg setup, usage walkthrough, keyboard shortcuts, hardware-encoder matrix, build-from-source and CI notes, troubleshooting, and contributing guidelines. - README also tuned for search and LLM retrieval: keyword-rich H1, "At a glance" facts block, supported-input-formats list, FAQ section, and descriptive screenshot alt text.
- Added MIT license at the repo root with a corresponding README section noting that FFmpeg remains a separate system dependency under its own terms.
Released: 2026-04-23
- Draggable playhead: the playhead can now be grabbed and dragged directly on the timeline in addition to click-to-seek.
- Free-roam playhead: playhead is no longer clamped to the trim range — it moves freely across the full clip duration, matching Premiere Pro's model. Trim handles define the export region only.
- I / O shortcuts: press
IorOto stamp the trim start or end handle to the current playhead position; dedicated In / Out buttons flank the time labels for mouse users. - Shortcuts panel: press
?to open a full cheat-sheet of every keybinding;Escor backdrop-click dismisses. - Fixed ref-staleness bug where rapid undo/redo and pointer drags could read stale
startTime/endTimevalues during scrubbing.
- Removed
backdrop-filterblur / saturation from the app window (#root). The liquid-glass Mica effect has been stripped; the window now renders with a solid background.
Released: 2026-04-20
- Restyled the entire interface to match the macOS Tahoe liquid glass design language: semi-transparent surfaces with
backdrop-filterblur + saturation, white glass-edge borders, inset top-highlight, and layered shadows. - Window is now transparent so the OS desktop wallpaper shows through the frosted glass shell.
- Accent color updated to macOS blue (
#0A84FFdark /#007AFFlight); font switched to-apple-system / SF Pro Text. - Larger border radii (12 / 8 / 6 px) throughout; toggle switches match the macOS pill style.
- Compress button gets a gradient blue fill with ambient glow; cancel state gets a red-tinted glass treatment.
- Video preview container, overlay play/stop buttons, time badges, and toast notifications all carry the glass
backdrop-filtertreatment.
- Scrubbing: click or drag anywhere on the timeline to move the playhead; click inside the selected range without dragging seeks rather than no-ops.
- Persistent playhead: playhead is visible whenever a video is loaded, not only during playback. Resuming picks up from the last scrubbed position.
- Handle polish: handles bumped to 18 px with hover/active scale-up and accent glow on the focused handle. Double-click a handle to snap it to 0 % / 100 %.
- Floating time chip: a live timestamp floats above the handle being dragged.
- In / Out buttons: next to the time labels; work whether playing or paused since I / O operate on the persistent playhead.
- Snap tick marks: render on the track when snap is active; auto-hide when the view is too dense to be useful.
- Minimap: appears above the main timeline when zoomed in — shows the full video with trim range, viewport window, and playhead. Click or drag to pan.
- Shortcuts overlay: press
?or click the footer button to open a cheat-sheet of every keybinding;Escor backdrop-click dismisses. - Timeline zoom up to 20×; Shift +
,/.nudges the active handle by one frame.
| Key | Action |
|---|---|
Space |
Toggle play / stop |
, / . |
Step 1/30 second backward / forward |
J / K |
Jump playhead to trim start / end |
[ / ] |
Nudge trim start / end |
I / O |
Set trim in / out to current playhead |
Shift + Arrow |
Fine-nudge active handle by one frame |
R |
Reset trim to full duration |
? |
Open shortcuts overlay |
- Filmstrip pre-generation: on file load a single FFmpeg pass extracts ~60 evenly-spaced JPEG frames. Scrubbing shows the nearest filmstrip frame instantly (0 ms) instead of spawning a new FFmpeg process per seek; the exact frame is fetched as a refinement after 80 ms.
- Frame cache: 20-entry LRU cache in the backend so scrubbing back over recently-seen positions returns immediately.
- Hardware decode for previews:
-hwaccel autoadded to single-frame extraction and filmstrip generation, activating VideoToolbox / DXVA2 / VAAPI where available. - Encoder presets: encoder-specific
-presetflags now set at compression time (libx264/libx265 → fast,nvenc → p4/hq,qsv → veryfast,amf → quality=speed). Previously the backend used encoder defaults (medium / slow), which was slower than necessary at a fixed target bitrate. - Encoder detection cache:
get_available_encoders()is now memoised behind aMutex<Option<Vec>>. Skips re-runningffmpeg -encoderson every call; invalidated automatically after a successful FFmpeg install. - Playhead polling eliminated: replaced the 80 ms
setIntervalpoll with aPreviewPane → onTimeUpdatecallback driven by the media element's nativetimeupdateevent, stopping the main thread from waking ~12.5× / s while paused. - IPC parallelism:
resolve_output_pathandget_vaapi_devicenow run inPromise.allon compression start, saving one round-trip. - Probe caching: FFmpeg probe results are cached per file path to avoid redundant re-probes.
- Window state persistence: window position and size are restored between launches via
tauri-plugin-window-state.
rustls-webpkibumped; Tauri-upstream advisories added to audit ignore list.
Released: 2026-04-12
vidcord has been fully rewritten from Python + PyQt6 to Tauri (Rust + React). This is a ground-up rebuild — not an incremental update.
- New runtime: Replaced PyInstaller + Python with a native Tauri binary. No Python interpreter, no PyQt6, no bundled runtime.
- Smaller installer: ~10 MB vs ~80 MB — Tauri uses the OS WebView (Edge on Windows, WebKit on macOS/Linux) instead of bundling one.
- Faster startup: Near-instant launch; hardware detection and settings load happen in the background.
- Rust backend: All FFmpeg orchestration, file I/O, GPU detection, settings, and update checking are now in Rust.
- React frontend: UI rebuilt in React + TypeScript with a Fluent Design stylesheet.
- Video playback preview: Play the trimmed segment in-app before compressing (Windows + macOS; disabled on Linux due to WebKit limitations).
- Linux VAAPI hardware acceleration: Added
h264_vaapiencoder support alongside NVIDIA, AMD, Intel, and Apple Silicon. - Apple Silicon VideoToolbox: Native
h264_videotoolboxencoder on M-series Macs. - ARM64 support: New aarch64 installers for Windows (NSIS) and Linux (AppImage); macOS ships as a universal binary.
- Single-instance enforcement: Opening a second instance forwards the file to the existing window instead of launching a duplicate.
- Settings persistence: Remove Audio, advanced mode values, and encoder selection are saved across sessions.
- Auto-increment output: Output is saved to
Downloads/<name>-vidcord.mp4; if that name is taken,-1,-2, etc. are appended instead of overwriting. - Trim frame preview: Live thumbnail updates as you drag the trim sliders.
- File associations:
.mp4,.avi,.mov,.mkv,.flv,.wmv, and.webmregistered with the OS so "Open with vidcord" works from Explorer/Finder. - Update checker: Background GitHub release check with proper semver comparison, respecting a user-configurable cadence.
- Error boundary & toasts: Frontend crashes surface as a recoverable error instead of a blank window, and notifications use a non-blocking toast system.
- Windows: NSIS installer (x86_64 + aarch64), replacing the previous Inno Setup script.
- macOS: Universal
.dmgcontaining both aarch64 and x86_64 slices. - Linux:
.AppImagefor x86_64 and aarch64.
- Windows:
CREATE_NO_WINDOWon every FFmpeg/probe invocation (no console flash); fixed WebView2AbortErroron seek;explorer /selecthandles paths with spaces and the\\?\extended-length prefix. - macOS: Fixed "Open With" cold-launch race condition; Apple Events file delivery via
RunEvent::Opened; installer hard-locked to/Applications. - Linux: Fixed GStreamer/GIO module errors in the AppImage; KDE Plasma white-window rendering; LXQt/minimal-WM startup; Wayland + X11 compatibility.
- Python source (
vidcord.py),requirements.txt, PyInstaller specs, and all legacy build scripts. - Old Linux platform scripts (
build_appimage.sh, Debian/Fedora/Arch packaging). verify_bitrate.py,benchmark_startup.py,debug_encoders.py, and othertools/debug scripts.
Released: 2026-02-10
- Added Advanced Mode for custom target size, resolution, and encoder settings.
- Added in-app playback preview for the selected trim region with audio and play/stop controls.
- Improved preview documentation, advanced-settings layout, and release/update fixes.
Released: 2026-01-21
- Added Windows ARM64 build support and hardened installer filename and release-build handling.
- Improved Linux VAAPI discovery, device selection, AMD memory handling, AMF support, logging, and FFmpeg path detection.
- Optimized startup and fixed preview reliability issues.
Released: 2026-01-13
- Improved Linux hardware-encoder detection and release reliability.
Released: 2026-01-13
- Added Linux hardware acceleration and improved Linux build support.
- Added macOS Finder "Open With" integration and fixed macOS encoder/context-menu behavior.
- Refreshed the cross-platform build and documentation workflow.
Released: 2025-12-20
- Added Linux x86_64 and ARM64 build outputs.
- Fixed GPU detection and continued the cross-platform packaging and release workflow.
Released: 2025-12-18
- Migrated the desktop UI from PyQt5 to PyQt6 and expanded native builds to Windows, macOS, and Linux.
- Added lazy startup, background hardware detection, GPU-aware encoder selection, and platform-specific packaging.
- Improved output naming, macOS encoder handling, Linux build support, and release automation.
Released: 2025-12-02
- Added macOS support and a Fluent Design interface across the desktop app.
- Added asynchronous preview generation to keep the UI responsive.
- Improved settings persistence, packaging, and the five Discord-oriented size presets.
Released: 2025-11-21
- Added the modern Fluent Design interface.
- Added audio removal, trimming, hardware encoder support, progress/ETA reporting, and Windows Explorer integration.
Released: 2025-05-21
- Refined the Discord target presets, including the 10 MB free tier, legacy 25 MB option, 50 MB, 100 MB, and 500 MB targets.
- Improved context-menu integration, packaging, screenshots, and documentation.
Released: 2025-05-06
- Tightened bitrate limiting for target-size exports.
- Updated release packaging and product documentation.
Released: 2025-04-20
- Added the 10 MB target and support for the 100 MB Clips Bypass preset.
- Improved bitrate calculation, target-size handling, and preview suggestions.
Released: 2025-02-28
- Fixed platform compatibility issues and improved output-location handling.
- Updated the Windows packaging and release workflow.
Released: 2025-01-23
- Improved startup and post-import window focus behavior.
- Refined target-size encoding and Windows release metadata.
Released: 2025-01-10
- Refreshed screenshots and documentation.
- Updated release metadata and packaging.
Released: 2024-12-07
- Added automatic hardware-encoder selection with CPU fallback.
- Reworked preview-frame extraction around FFmpeg and improved encoder labels and output controls.
- Added PyInstaller packaging metadata and cleaned up runtime dependencies.
Released: 2024-09-03
- Fixed process-launch flags across platforms to prevent console flashes.
- Improved the release packaging workflow.
Released: 2024-08-15
- Added slider-based trimming with a live preview of the selected segment.
- Added stronger duration/error handling and FFmpeg setup guidance.
- Improved the Windows installer and context-menu packaging.
Released: 2024-08-14
- Fixed Windows context-menu registration and installer packaging.
Released: 2024-08-13
- Refined Windows context-menu assets and release packaging.
- Updated documentation and added the context-menu screenshot.
Released: 2024-08-13
- Added an icon to the Windows context-menu entry.
- Refreshed screenshots and installer metadata.
Released: 2024-08-13
- Fixed application behavior and updated the Windows installer configuration.
Released: 2024-08-13
- Refined the Windows installer script and release packaging.
Released: 2024-08-13
- Added visible encoding progress and ETA reporting.
- Added the first Windows installer script and refreshed the application icon/documentation.
Released: 2024-08-12
- Added ETA reporting during compression.
Released: 2024-08-12
- Added an encoding progress bar.
- Improved the Windows context-menu import workflow and documentation.
Released: 2024-08-12
- Fixed application behavior and added Windows context-menu registration.
- Refreshed screenshots and release assets.
Released: 2024-08-12
- Expanded the app to four Discord-oriented quality presets, including 100 MB/1080p and 500 MB/native output.
- Added improved context-menu support, hardware/software encoder choices, trimming, and packaging updates.
Released: 2024-08-09
- Refined the encoder-selection workflow and hardware/software encoder support.
Released: 2024-08-09
- Expanded encoder support and stabilized overwrite behavior for output files.
Released: 2024-08-09
- Added encoder selection and safer output overwrite handling.
Released: 2024-08-09
- Added bitrate improvements and refined hardware/software encoder choices.
Released: 2024-08-07
- Added Windows Explorer "Compress with vidcord" integration.
- Refined file-import behavior so the app regains focus after opening a video.
Released: 2024-08-07
- Added system-argument handling for opening files through the operating system.
Released: 2024-08-07
- Added the application window icon.
Released: 2024-08-07
- Added editable trim start and end times.
- Added an encoder dropdown and updated the application documentation.
Released: 2024-08-07
- Added duration editing for the output clip.
Released: 2024-08-06
- Initial public release: a Python/PyQt5 desktop app for compressing videos under Discord's size limits with FFmpeg.
- Added drag-and-drop and file-dialog imports, 25 MB/480p and 50 MB/720p presets, and output-file reveal in File Explorer.