Skip to content

Releases: cyroz1/vidcord

v5.6

10 Feb 21:45

Choose a tag to compare

Full Changelog: v5.5...v5.6

vidcord v5.6

Added

  • Preview playback of the selected trim region with audio and play/stop overlay controls.
  • Cross-platform preview playback fallback using QVideoSink with QVideoWidget fallback.
  • GitHub release update check with in-app notification when a newer version is available.
  • Advanced mode (allows user to choose custom target size, resolution, and encoder independently).

Fixed

  • build.py now defines main() and runs correctly.
  • UI alignment changes

v5.5

22 Jan 15:55

Choose a tag to compare

Full Changelog: v5.4...v5.5

vidcord v5.5 Release Notes

Highlights

This release focuses on faster start times, improving build stability across platforms, and enhancing hardware acceleration support on Linux.

Build System Improvements (Windows)

  • Direct Compilation: Switched from using a third-party GitHub Action to directly invoking the Inno Setup Compiler (ISCC.exe) via Chocolatey. This ensures ensuring build arguments (version, architecture) are correctly passed.
  • Robustness: Resolved PowerShell parsing errors in the CI workflow by enforcing cmd shell execution for build steps.

Linux Improvements

  • Hardware Acceleration: Improved detection and support for h264_vaapi encoding.
  • Robustness: Added retry logic and verbose logging for dependency downloads (ffmpeg, appimagetool) during the AppImage build process to handle transient network failures.

Bug Fixes

  • Fixed OutputBaseFileName "invalid value" errors during Windows release builds.
  • Fixed Undeclared identifier errors in Inno Setup scripts by refining preprocessor logic.
  • Fixed initial preview frame not being loaded.

v5.4

14 Jan 02:31

Choose a tag to compare

Full Changelog: v5.3...v5.4

v5.4 (2026-01-13)

Bug Fixes

  • Linux Hardware Acceleration: Fixed an issue where h264_vaapi and other hardware encoders were not correctly detected on Linux.
  • Robust Encoder Detection: Improved the encoder detection mechanism to be more robust across different FFmpeg versions and environments.

Features

  • Expanded Linux Support: Enabled NVIDIA (nvenc), AMD (amf), and Intel (qsv) encoder support on Linux when compatible hardware is detected.

v5.3

13 Jan 21:11

Choose a tag to compare

Full Changelog: v5.2...v5.3

Changelog

v5.3 (2026-01-13)

Features

  • Dynamic Versioning: Automated version extraction from vidcord.py for Windows build artifacts, ensuring consistency between application version and installer filename.
  • Multi-Platform Consistency: Synchronized versioning across all platform-specific configurations (Inno Setup, macOS PKG, Arch PKGBUILD, Debian Control, and Fedora Spec).

CI/CD & Automation

  • Workflow Optimization: Updated GitHub Actions to dynamically pass the version string to Inno Setup compiler.

Bug Fixes

  • Fixed issue where Windows installer filenames had incorrect or hardcoded version numbers.
  • Fixed Linux hardware acceleration.
  • Fixed context menu integration on macOS.
  • Fixed build scripts on local environment.

v5.2

20 Dec 20:59

Choose a tag to compare

Full Changelog: 5.1...v5.2

Changelog

v5.2 (2025-12-20)

Features

  • Linux ARM64 Support: Added support for building and distributing Linux AppImages on ARM64 (aarch64) architecture.
  • Improved Hardware Detection: Replaced deprecated wmic with PowerShell for more reliable GPU detection on Windows, with a robust fallback mechanism.

CI/CD & Automation

  • Concurrency Control: Implemented GitHub Actions concurrency settings to prevent duplicate workflow runs on the same branch.
  • Enhanced Release Workflow:
    • Added support for numeric tags (e.g., 5.1) in addition to prefixed tags (e.g., v5.1).
    • Fixed release permission issues to ensure automated asset uploads.
    • Optimized multi-architecture builds for Linux.

Bug Fixes

  • Fixed potential crashes or detection failures in Windows GPU identification.
  • Resolved permission errors during the automated release process.

Maintenance

  • General stability improvements and workflow refinements for faster and more reliable builds.

v5.1

19 Dec 02:58

Choose a tag to compare

Full Changelog: 5.0...5.1

Changelog v5.1 (Cumulative Changes since v5.0)

  • Fixed critical Windows build error related to ffmpeg.exe path.
  • Resolved issue with rober710/iscc-action by switching to a reliable alternative.
  • Improved macOS stability and fixed minor UI alignment issues.
  • Updated Linux build scripts and AppImage generation process.
  • Refined GPU detection for multi-platform hardware acceleration.
  • Optimized startup time with lazy-loading of heavy modules.
  • Enhanced settings persistence and encoder mapping.

vidcord v5.0

02 Dec 17:46

Choose a tag to compare

Release Notes (v5.0)

Changes since v4.9:

New Features

  • MacOS Support: Added support for MacOS packaging and execution (2a2acf2).
  • Async Video Preview: Implemented async video preview generation to prevent UI freezing (0849ca6).

Improvements & Fixes

  • Settings: Fixed settings issues (ce3b91e).
  • Naming: Fixed naming conventions (830c692).

vidcord v4.9

21 Nov 16:44

Choose a tag to compare

vidcord v4.9

🎨 Visual Overhaul

  • Fluent Design Interface: Completely redesigned using PyQt-Fluent-Widgets for a modern, native Windows 11 look and feel.
  • New Window Chrome: Implemented a custom title bar and window frame using FluentWindow.
  • Enhanced Components: Replaced standard widgets with styled counterparts (Buttons, Sliders, ComboBoxes, Cards).

🚀 New Features

  • Remove Audio Option: Added a checkbox to easily strip audio from the video during compression.
  • Improved Preview: Smoother preview generation with debouncing for better performance while dragging sliders.
  • Settings Persistence: Enhanced settings management to remember your last used quality and encoder preferences.

🛠️ Technical Improvements

  • Code Refactoring: Restructured application logic into dedicated classes (VideoProcessor, SettingsManager) for better maintainability.
  • Resource Handling: Fixed icon loading issues in compiled versions using improved resource path detection.
  • FFmpeg Integration: Optimized command generation and process handling.

vidcord v4.8

21 May 15:16

Choose a tag to compare

I. GUI Responsiveness & Preview Optimization

1. Debounced Video Preview Updates

  • Change: Introduced a QTimer (self.previewUpdateTimer) with a debounce mechanism. The debounce time (self.previewDebounceTime) was set to 120ms.
  • Reason: Prevents the updatePreview function from being called excessively on every single mouse movement of the start/end time sliders, and reduces the delay for updates after slider movement stops.
  • Impact: Significantly improves UI responsiveness when adjusting trim times, allowing for finer adjustments as ffmpeg is no longer invoked repeatedly in rapid succession and updates more promptly.
  • Implementation:
    • updateStartTime() and updateEndTime() now set self.lastSliderValueForPreview and start the self.previewUpdateTimer.
    • A new method _actualUpdatePreview() is called when the timer times out, which then calls the original updatePreview() logic with the last known slider value.

2. Faster Preview Frame Generation

  • Change: Optimized the ffmpeg command within the updatePreview function for speed.
  • Reason: To accelerate the generation of the preview thumbnail, making fine adjustments easier.
  • Impact: Reduces the time taken for each preview frame to appear.
  • Implementation: The ffmpeg command was modified to:
    • Disable audio (-an) and subtitle (-sn) processing.
    • Adjust JPEG quality/speed (-q:v 4).
    • Use a fast scaling algorithm (-vf "scale=320:-1:flags=fast_bilinear").
    -                "-frames:v", "1", "-q:v", "2", "-vf", "scale=320:-1", temp_image_path
    +                "-an", "-sn", "-frames:v", "1", "-q:v", "4", "-vf", "scale=320:-1:flags=fast_bilinear", temp_image_path

3. Slider Value Synchronization and UI Feedback

  • Change: Added logic in updateStartTime() and updateEndTime() to prevent sliders from crossing over and to ensure labels update correctly.
  • Reason: To provide a more intuitive user experience when adjusting sliders.
  • Impact: Sliders now behave more predictably, and their respective time labels are kept in sync if one forces the other to move.
  • Implementation:
    • Used blockSignals(True) and blockSignals(False) to prevent recursive updates while programmatically setting slider values.
    • Ensured the corresponding label (start/end) is updated if a slider's value is adjusted due to the other slider's movement.

4. Preview Clearing

  • Change: Added self.videoPreview.clear() in error paths of loadVideo and updatePreview.
  • Reason: To ensure no stale preview is shown if loading or preview generation fails.
  • Impact: Cleaner UI state on error.

II. Video Metadata Handling Efficiency

1. Consolidated Video Metadata Probing

  • Change: Refactored loadVideo() to use a single ffmpeg.probe(self.file_path) call to fetch all necessary video metadata at once.
  • Reason: To avoid multiple redundant ffmpeg.probe or ffprobe subprocess calls when a video is loaded and later when conversion is initiated.
  • Impact: Reduces the initial processing time when a video is loaded and makes the setup for conversion faster.
  • Implementation:
    • New instance attributes were added to store probed data: self.probed_duration, self.probed_width, self.probed_height, self.probed_bitrate_kbps.
    • loadVideo() now populates these attributes directly from the comprehensive probe_data.

2. Fallback for Video Resolution

  • Change: Introduced a helper method _get_video_resolution_fallback() which uses an ffprobe subprocess call.
  • Reason: To provide a fallback mechanism if the primary ffmpeg.probe() in loadVideo() fails to return valid width/height from the video stream information.
  • Impact: Increased robustness in fetching video dimensions.

3. Usage of Stored Metadata in Conversion

  • Change: Modified convertVideo() to use the stored self.probed_duration, self.probed_width, self.probed_height, and self.probed_bitrate_kbps attributes.
  • Reason: To eliminate redundant metadata lookups at the time of conversion.
  • Impact: Slightly faster initiation of the conversion process.

III. Video Conversion Process Enhancements

1. Precise Trimming with -to

  • Change: In the ffmpeg command within convertVideo(), replaced the -t str(clip_duration) option with -to str(end_time_sec).
  • Reason: -to specifies the absolute end time of the output, which is often more precise when used with -ss (start time).
  • Impact: More accurate video trimming.

2. Video Dimension Handling (Even Numbers)

  • Change: Ensured that target width and height for scaling operations are even numbers.
  • Reason: Many video codecs require frame dimensions to be even numbers.
  • Impact: Prevents potential ffmpeg errors or compatibility issues.
  • Implementation: Adjusted calculations for target_width, target_height_actual, and used scale='trunc(iw/2)*2':'trunc(ih/2)*2' for native resolution cases.

3. Improved ETA Calculation & Error Handling in Conversion Loop

  • Change: Added a try-except ValueError block around parsing the time= string from ffmpeg's stderr.
  • Reason: To make the ETA calculation more robust against unexpected ffmpeg output formats.
  • Impact: Prevents potential crashes during progress updates and provides fallback text.
  • Change: Added more detailed error handling and UI feedback if the ffmpeg process returns a non-zero exit code.
  • Reason: Better user feedback on conversion failure.
  • Impact: Clearer indication of success or failure.

4. Cleaner ffmpeg Command Output

  • Change: Added -hide_banner to the main ffmpeg conversion command.
  • Reason: Suppresses ffmpeg's version and build information.
  • Impact: Primarily a cosmetic change for logs/debugging.

IV. Initialization & Resource Handling

1. Robust _internal Path Resolution

  • Change: Improved the logic for setting the PATH environment variable to include the _internal directory.
  • Reason: To correctly locate bundled executables, especially when running as a packaged application (e.g., with PyInstaller using sys._MEIPASS).
  • Impact: More reliable ffmpeg/ffprobe execution.

2. Robust Icon Path Resolution

  • Change: Added fallback logic for loading icon.ico, checking sys._MEIPASS.
  • Reason: To ensure the application icon loads correctly in packaged distributions.
  • Impact: Consistent application branding.

V. Minor UI and Code Adjustments

  • File Display: Changed to display os.path.basename(filePath) in loadVideo() for a cleaner display.
  • Universal Newlines: Ensured universal_newlines=True (or text=True) for subprocess.Popen when reading stderr.
  • Version Display: The link label now dynamically uses CURRENT_VERSION.

vidcord v4.7

06 May 18:29

Choose a tag to compare

changes

  • limit bitrate to not go over original video bitrate (waste of data)
  • limit file types (only shows context menu on video files and only allows video files to be imported manually)

wip

  • full compatibility for all video files (haven't tested all, mov is buggy)