You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
New Color Grade effect with color wheels, curves, LUT support, and video scopes
New screen, webcam, microphone, and system-audio capture readers
New Audio Visualization, Beat Sync, Film Grain, Denoise, Shadow, Glow, Displacement
Map, Timer, Color Grade, and Object Mask effects
Local ONNX object detection, segmentation, and tracked masks
Qt 6 support and improved cross-platform compatibility
Faster Blur, Sharpen, color analysis, audio visualization, and waveform processing
Numerous stability, rendering, caching, and media-handling fixes
libopenshot Changelog (Version: 1.0.0, SO: 31)
732f182 2026-08-18 Jonathan Thomas Recover stale timeline clip reader state HEAD, origin/release-20260725
9f64248 2026-08-17 Jonathan Thomas Load PipeWire capture backend on demand
7bf0aeb 2026-07-26 Jonathan Thomas Harden Wayland PipeWire window capture
d4d87d8 2026-07-25 Jonathan Thomas Synchronize screen capture shutdown
ffcff36 2026-07-25 Jonathan Thomas Bumping version to 1.0.0, SO 31, requiring OpenShotAudio 1.0.0
eac81cf 2026-07-22 Jonathan Thomas Merge pull request #1081 from OpenShot/audio-recording origin/develop
a2709d5 2026-07-22 Jonathan Thomas Install FFmpeg avdevice in GitHub CI
114f25a 2026-07-19 Jonathan Thomas Synchronize initial system audio capture
2547c82 2026-07-19 Jonathan Thomas Fix MinGW Core Audio GUID linking
46a5c2c 2026-07-18 Jonathan Thomas Add system audio to screen capture
3b6291f 2026-06-28 Jonathan Thomas Fix frame timestamp test compatibility
4898073 2026-06-27 Jonathan Thomas Preserve live capture timestamps
60c4359 2026-06-27 Jonathan Thomas Add clip margin and corner radius support
d3e3c6b 2026-06-26 Jonathan Thomas Fix live screen capture startup on macOS
98f797d 2026-06-25 Jonathan Thomas Add timer effect
b18c147 2026-06-23 Jonathan Thomas Interrupt blocking screen capture reads on close
7a71278 2026-06-23 Jonathan Thomas Use full display size for mac crop capture
b575dbb 2026-06-23 Jonathan Thomas Fix recording waveform and mac screen crop capture
9e8d226 2026-06-22 Jonathan Thomas Preserve live capture timing gaps
2abd35e 2026-06-21 Jonathan Thomas Harden macOS AVFoundation screen defaults
2c18616 2026-06-21 Jonathan Thomas Enable macOS AVFoundation capture backends
325beed 2026-06-20 Jonathan Thomas Allow capture devices to use default modes
ac3baf5 2026-06-20 Jonathan Thomas Fix Windows capture frame buffer cleanup
4c100e0 2026-06-20 Jonathan Thomas Enumerate DirectShow cameras with COM
d1fbd83 2026-06-19 Jonathan Thomas Support older FFmpeg input format API
2034b34 2026-06-19 Jonathan Thomas Support older FFmpeg avdevice headers
a8191a0 2026-06-19 Jonathan Thomas Fix recording build compatibility
4eebfe8 2026-06-19 Jonathan Thomas Drop invalid Wayland PipeWire capture frames
1cde209 2026-06-19 Jonathan Thomas Add Windows capture backends for recording
caae5b5 2026-06-17 Jonathan Thomas Request Wayland stream crop metadata
9660b5c 2026-06-17 Jonathan Thomas Handle Wayland cropped window streams
1e75b9d 2026-06-17 Jonathan Thomas Refine Wayland portal capture handling
5f49df8 2026-06-16 Jonathan Thomas Add Wayland screen capture backend
8bae3af 2026-06-15 Jonathan Thomas Add Linux screen and camera capture readers
3e9de94 2026-05-29 Jonathan Thomas Reverting changes to python detection in libopenshot, so we don't break our Mac builder by including the wrong version of python at this moment. We'll revisit in the future.
70ec155 2026-05-28 Jonathan Thomas Add JUCE audio recorder and fix FFmpegWriter FLAC duration
8f1f091 2026-05-24 Jonathan Thomas Merge pull request #1079 from OpenShot/cmake-cleanup
e3151d5 2026-05-24 Jonathan Thomas Clean-up and modernization of our cmake build system
0a68c88 2026-05-22 Jonathan Thomas Merge pull request #1078 from OpenShot/object-mask-effect
8d9b8c2 2026-05-21 Jonathan Thomas Improve Cutie object mask memory and aspect handling
d01ffe1 2026-05-20 Jonathan Thomas Merge pull request #1077 from OpenShot/black-frames
cf354e1 2026-05-20 Jonathan Thomas Merge pull request #1075 from OpenShot/object-detection-v2
da35707 2026-05-20 Jonathan Thomas Merge branch 'object-detection-v2' into object-mask-effect
5dc3724 2026-05-20 Jonathan Thomas Fixing Codacy nitpicks
9f228c9 2026-05-20 Jonathan Thomas Improve Object Mask prompts and conservative GPU selection
395f662 2026-05-20 Jonathan Thomas Improve Object Mask model compatibility
8bd98a5 2026-05-18 Jonathan Thomas Replace ObjectMask EdgeSAM seed masks with EfficientSAM ONNX
1f0b1b9 2026-05-18 Jonathan Thomas Add Object Mask effect with EdgeSAM and XMem propagation
ec37040 2026-05-15 Jonathan Thomas Add YOLO segmentation mask support to Object Detection
9fbe600 2026-05-15 Jonathan Thomas Updated compatibility for CVObjectDetection to support:
30e3ba6 2026-05-14 Jonathan Thomas Repair rpath for new OpenCV 4.13.0 version on Mac, during libopenshot build, so it's linked correctly.
d1aa207 2026-05-14 Jonathan Thomas Updating GitLab CI to use parallel builds, dynamic cpu counts, so each build server is using all available cores.
8a5fd4d 2026-05-14 Jonathan Thomas Updating Mac builder to use OpenCV 4.13.0, and passing in correct paths for it in our CI build
f7586af 2026-05-13 Jonathan Thomas Fallback to CPU backend for OpenCV when CUDA backend not available.
c9380a8 2026-05-13 Jonathan Thomas Updating OpenCV on Linux and Windows builders to use a newly installed 4.13.0 version (built from source)
47d1784 2026-05-13 Jonathan Thomas Validate YOLO ONNX models in libopenshot
4f6cb7c 2026-05-13 Jonathan Thomas Updating gitlab builder for Linux to use new /opt installed OpenCV 4.5.5 folder, and return error message on < 4.3.0 OpenCV versions for Object Detection effect.
195632a 2026-05-12 Jonathan Thomas Fix persistent black frames after clip open failure
ae3d769 2026-05-12 Jonathan Thomas Fix stale timeline cache after adding clips
14c63f3 2026-05-12 Jonathan Thomas Fix margin-bounded effects to avoid invalid image access
4f289bc 2026-05-12 Jonathan Thomas Fix saturation stride and parent effect updates
eae93e1 2026-05-10 Jonathan Thomas Protecting crash when reading ONNX model with wrong format (Object Detection effect)
be99ec0 2026-05-10 Jonathan Thomas Migrate object detection to YOLOv5 ONNX
d274163 2026-05-10 Jonathan Thomas Improve tracked object rendering controls - Remove unused tracked-object rotation property from JSON, properties, and box values - Add per-object Draw Text support alongside Draw Box - Use deterministic class colors for Object Detector instead of random seeded colors - Scale tracked-object stroke widths based on preview raster size - Keep Object Detector text rendering gated by both global and per-object text settings
0751153 2026-05-09 Jonathan Thomas Merge pull request #1074 from OpenShot/tracked-mask-source
07e60a8 2026-05-09 Jonathan Thomas Improve Caption margins and default visibility
ec71b73 2026-05-09 Jonathan Thomas Added top/bottom/left/right margins to Blur effect, similar to Pixelate one (for consistency). Renamed the user-facing JsonProperty labels across all effects with similar keyframes to: - Margin: Left - Margin: Top - Margin: Right - Margin: Bottom
a6e7d85 2026-05-09 Jonathan Thomas Adding the ability to use TrackedObjectMask as "Mask: Source" for any effect (i.e. blur/pixilate only the tracked area)
22ec091 2026-05-09 Jonathan Thomas Merge pull request #1073 from OpenShot/source-rotation
0081cda 2026-05-08 Jonathan Thomas Apply reader-side orientation metadata and stabilize tracker stroke rendering
a8d956a 2026-05-08 Jonathan Thomas Merge pull request #1072 from OpenShot/ffmpeg-version-parsing
6011e73 2026-05-08 Jonathan Thomas Merge pull request #1071 from OpenShot/small-svg-thumbnails
eb2411e 2026-05-08 Jonathan Thomas Fix FFmpeg version fallback parsing
204925c 2026-05-08 Jonathan Thomas Merge pull request #1070 from OpenShot/black-frame
226f686 2026-05-08 Jonathan Thomas Fix SVG thumbnail rasterization with max decode size (SVG upscaling for tiny sizes) -Treat SetMaxDecodeSize as the rasterization target for parentless SVG readers, instead of only as a downscale ceiling. This lets thumbnail generation render tiny SVG files at the requested decode size, avoiding blurry thumbnails caused by first rasterizing at the SVG document size. -Raster images and SVGs with a parent clip/timeline keep their existing sizing behavior.
6ccb526 2026-05-08 Jonathan Thomas Fixing GetMaxFrame() to fix tiny float overshoot, causing occasional black frames at the end of an export. For example, it might have concluded that we had 505.00001 frames, and this would then be converted later to 506 with ceil().
fbc37e2 2026-05-07 Jonathan Thomas Merge pull request #1069 from OpenShot/denoise
5874815 2026-05-07 Jonathan Thomas Merge pull request #1068 from OpenShot/fps-fix
9f4df7e 2026-05-06 Jonathan Thomas Merge branch 'fps-fix' into denoise
51ee44a 2026-05-05 Jonathan Thomas Adding new Denoise effect - Adds a new DenoiseImage video effect for reducing luma grain and color speckles with adaptive spatial filtering, conservative temporal blending, motion protection, and brightness response controls. - Added to openshot-benchmark - New unit tests
3ebe4ea 2026-05-05 Jonathan Thomas Changing caption unit tests to use minimal QT_QPA_PLATFORM, to avoid unit test crashes on our gitlab builders.
033d577 2026-05-05 Jonathan Thomas Fix FFmpegWriter MP4 frame duration metadata -Ensure FFmpegWriter sets nominal video stream frame rates and assigns packet durations before muxing video packets, including delayed packets flushed from encoders. This prevents FFmpeg 4.2-era MP4 output from ending the video stream one frame short, which caused avg_frame_rate to report values like 30.14 instead of 30 fps. -Add a regression test that writes a 30-frame, 30 fps MP4 with B-frames and verifies r_frame_rate, avg_frame_rate, and stream duration remain exact.
235a5c8 2026-05-03 Jonathan Thomas Merge pull request #1067 from OpenShot/mask-fixes
117012e 2026-05-03 Jonathan Thomas Merge pull request #1066 from OpenShot/beat-sync
cababff 2026-05-03 Jonathan Thomas Merge remote-tracking branch 'origin/develop' into beat-sync
ce560f1 2026-05-03 Jonathan Thomas Cap Mask contrast factor at maximum contrast -Raise the Mask contrast denominator floor from 0.00001 to 0.5, capping the contrast factor at 40. This prevents contrast values near 20 from turning the 8-bit gray lookup into a one-value step function, where tiny mask image differences can create hard transparent edge artifacts during gradient wipes. -Add a regression test covering the maximum contrast transition band.
118fc2d 2026-05-02 Jonathan Thomas Merge pull request #1065 from OpenShot/benchmark-fps-metric
fc897ec 2026-05-02 Jonathan Thomas Add Beat Sync audio-reactive flash effect -Generates a full-frame color layer from low/high colors, shaped by audio energy and a response curve, for beat-synced compositing. - Really useful effect for generating, shaping, and outputting a flashing white or black image (to be composited into another clip)
d986d6e 2026-05-02 Jonathan Thomas Improving performance on blur and sharpen effect by reducing unnecessary computations.
ab93363 2026-05-02 Jonathan Thomas Improved performance on FrameScope class, basically doubling performance - Inline fast-path bin indices for alpha=255 pixels: raw byte value == rounded bin, no float needed - Replaced byte_bin() (std::round + clamp) with (int)(val * 255.0f + 0.5f) - Pre-computed waveform_offset_map[] to eliminate a multiply per pixel in inner loop - Pointer increment instead of row + x * 4 per pixel - int64_t pixel_count instead of double pixel_total - Result: 49 → 89 FPS (~1.8x), all unit tests pass
561a233 2026-05-02 Jonathan Thomas Adding more classes/effects to openshot-benchmark, and still using our new FPS metric, processing 120 frames at 720p/24fps source. - Effect_Blur (Gaussian: radius=4, sigma=3.0, 3 iterations) - Effect_Sharpen (amount=1.0, radius=3.0, threshold=0.1) - Effect_Hue (shift=0.25) - Effect_Negate - Effect_Pixelate (5% pixelization, full frame) - Effect_Wave (wavelength=0.5, amplitude=3.0, multiplier=0.5, speed_y=2.0) - Effect_Caption (WEBVTT captions, skipped when QT_QPA_PLATFORM=offscreen) - Effect_Displace (front3.png map, strength=0.5, H/V=10%) - FrameScope (waveform_columns=256, vectorscope_size=128, individual getters matching openshot-qt playback path)
0be564d 2026-05-02 Jonathan Thomas Improved the performance of the "Color Grade" effect by around 8 FPS (small but meaningful optimization) - Replaced std::round() with +0.5f cast in clampByte — equivalent for non-negative values, significantly cheaper - Removed redundant clamp01() inside sample_curve_lut — inputs are already clamped at all call sites - Added early exit when all parameters are at default values — skips the pixel loop entirely for no-op frames - Marked clamp01, clampByte, and smooth_midtones as inline — makes inlining intent explicit for the hot-path helpers
cb7c8c1 2026-05-01 Jonathan Thomas Merge branch 'develop' into benchmark-fps-metric
f872efc 2026-05-01 Jonathan Thomas Merge pull request #1064 from OpenShot/audio-visualizations
515fe7b 2026-05-01 Jonathan Thomas Fixing 5 Codacy nitpicks in the audio-visualization branch
cfd9b76 2026-05-01 Jonathan Thomas Merge branch 'develop' into audio-visualizations
055ae45 2026-05-01 Jonathan Thomas Merge pull request #1063 from OpenShot/film-grain
bec9f4b 2026-05-01 Jonathan Thomas Merge branch 'develop' into film-grain
c2dee77 2026-05-01 Jonathan Thomas Merge pull request #1062 from OpenShot/color-grade
f7c77d4 2026-05-01 Jonathan Thomas Merge branch 'audio-visualizations' into benchmark-fps-metric
91f4684 2026-05-01 Jonathan Thomas Merge branch 'film-grain' into benchmark-fps-metric
3b765ae 2026-05-01 Jonathan Thomas Optimize FilmGrain hot path — ~6× fewer hash calls per pixel - Cache y-pre-lerped bilinear columns for soft and clump noise, refreshing only when the x-cell index changes (~every 7 px for soft, ~every 9 px for clump at defaults). Fine grain hash is similarly cached per cell. This cuts amortized hash_coords + mix32 calls from ~56 to ~9 per pixel in the fully-featured case. - hoist all y-dependent values out of the x-loop; replace std::round in clampByte; extract salt magic numbers to named constants; move alpha_percent to the write-back branch where it's actually needed; collapse the color-apply branch to use_color_variation directly.
3bb5f9f 2026-05-01 Jonathan Thomas Improving performance on filled waveforms, to use a different image format: Format_ARGB32_Premultiplied, and a simplified glow rendering. Much faster on both Qt5 and Qt6.
3ebd6aa 2026-05-01 Jonathan Thomas Merge branch 'audio-visualizations' into benchmark-fps-metric
2dd3de9 2026-05-01 Jonathan Thomas Improve phase scope rainbow rendering and performance - Render phase scope rainbow colors against the trace bounds instead of the full canvas so centered scopes show a full color range at normal intensity. - Replace the expensive antialiased QPainterPath rendering path with a reserved polyline, lower the max trace detail, and use cheaper pen joins for faster painting.
b12379c 2026-05-01 Jonathan Thomas Redesign benchmark: FPS metric, stable median-of-3, mid-video seek, new effects
fec6e90 2026-04-30 Jonathan Thomas Preserve audio-only reader dimensions on pasted clips -Set the parent timeline before hydrating clips inserted through JSON diffs, matching full project JSON load behavior. This lets copied/pasted clips expose timeline context while their nested readers are rebuilt. -Avoid clobbering valid stored dimensions for audio-only FFmpeg readers with the 720x480 fallback. The fallback is now only used when width or height are missing, while parent timeline preview dimensions can still override when available. -Add regression coverage for audio-only FFmpegReader JSON hydration and timeline JSON-diff insertion preserving 1280x720 dimensions.
aea12d2 2026-04-30 Jonathan Thomas Improve audio visualization styles, opacity, waveform, and rainbow color - Fix Neon/Soft/Clean fill alphas — were far too low, colors appeared nearly invisible on dark backgrounds - Fix Neon glow on waveform — double-reduced alpha and too-narrow spread made it invisible - Fix Rainbow mode on waveform/filled waveform — now sweeps hue horizontally via QLinearGradient, no per-segment loop - Line waveform now follows true ±signal instead of magnitude envelope; remove unused bottom_edge - Remove Retro style — too visually similar to Clean to justify - Minimal style is now fully opaque (fill alpha 1.0) - Clip waveform shortcut defaults to Minimal style + Filled Waveform
9ef7017 2026-04-30 Jonathan Thomas Improving performance of audio visualization modes. Redesigning waveform and filled waveform to be more CPU efficient. Adding audio visualizations to our benchmark tool.
dd18401 2026-04-29 Jonathan Thomas Merge branch 'film-grain' into audio-visualizations
337e0d3 2026-04-29 Jonathan Thomas Merge branch 'develop' into film-grain
2a9a480 2026-04-28 Jonathan Thomas Fixed a long standing bug related to CROP scale mode, where -1/+1 location_x/y did not correctly calculate the offscreen coordinates. This will have backwards compatibility implications, since old projects that combine custom location_x/y + CROP scale mode will calculate position differently now.
ebf69ec 2026-04-27 Jonathan Thomas Fix spectrum fill artifacts, add style-aware fill behavior, and improve rainbow glow rendering.
2f2e04c 2026-04-27 Jonathan Thomas Implemented style-aware fill behavior in audio visualization effect - minimal: solid, flatter, more opaque fills with little visual softness. - retro: stronger opaque/banded fills instead of glassy fades. - clean: still polished, but more controlled gradients. - soft: keeps the translucent gradient look. - neon: reduces fill weight and keeps focus on edge/glow.
7d42942 2026-04-26 Jonathan Thomas Add audio visualization effect and waveform modes - Add AudioVisualization effect with waveform, bars, radial, spectrum, particles, VU, and related modes - Add styling, color spread/rainbow, channel layout, frequency, glow, detail, and background controls - Wire Clip::waveform to use the new effect and add waveform_mode - Register the effect and add focused unit coverage for rendering, JSON, and clip properties
8ede4d7 2026-04-24 Jonathan Thomas Add Film Grain effect with deterministic, keyframeable controls, profile-scaled grain rendering, bindings, registration, and unit tests. Also update Analog Tape artifact scaling so preview and export sizes stay visually consistent.
81aa6d9 2026-04-23 Jonathan Thomas Refactor of FrameScope and adding new vectorscope data, so we can easily render high performance vectorscope density planes. Updated unit tests, and did some light refactoring to ensure performance.
816cd3d 2026-04-22 Jonathan Thomas Some low hanging optimizations on Color Grade effect for faster processing of color grading in real-time.
291d3a5 2026-04-22 Jonathan Thomas Huge refactor of color grade effect, including keyframable curves for R,G,B, and All using a new AnmiatedCurve class which supports a variable # of nodes for adjusting colors. Also, keyframable color wheels, amount sliders, and luma sliders. So now our color grade effect is fully controllable and keyframable. Including new unit tests for color grade effect.
0c1e0cd 2026-04-22 Jonathan Thomas Fixing byte order bug in FrameScope, so our analysis uses RGBA8888_Premultiplied format, and adding unit test to verify.
de4da1e 2026-04-21 Jonathan Thomas Renaming "Apply before clip keyframes" to "Apply to Source", as a shorter more consise way of saying the same thing (without text wrapping in the UI)
a585652 2026-04-20 Jonathan Thomas Merge pull request #1060 from OpenShot/shadow-and-glow
0ddcdf6 2026-04-20 Jonathan Thomas Changing Glow and Shadow to use "Before Keyframes False", so the blue is applied after other keyframes are applied, to allow correct bleed/blur sizes that expand beyond their initial image sizes. Also, improved "spread" arg to be more accurate.
7698f76 2026-04-20 Jonathan Thomas Rename user facing "Wheels" label to "Color Wheels".
b16bda0 2026-04-19 Jonathan Thomas FrameScope no longer generates JSON during normal per-frame analysis. Json handling is now lazy, only when needed, and new swig getters and available for faster access to analysis data for image and audio data.
5910ab5 2026-04-19 Jonathan Thomas pdated FrameScope so the video scope payload now includes the full practical waveform dataset the UI needs:
449a4f5 2026-04-19 Jonathan Thomas Add a new FrameScope class which analyzes color and audio data for a frame.
874f6e0 2026-04-17 Jonathan Thomas Add the new ColorGrade effect with JSON-based wheels and curves, optimize its curve processing using per-frame LUTs for faster OMP rendering, expand backend ColorGrade test coverage for disable/alpha behavior, and include the new ShadowGlow effect sources
7af626a 2026-04-17 Jonathan Thomas Add Shadow and Glow effects with unit tests - add new Shadow effect with soft drop shadow controls for color, opacity, blur, spread, distance, and angle - add new Glow effect with outer/inner glow modes and controls for color, opacity, blur, and spread - add focused unit tests covering shadow rendering, glow rendering, and JSON/property round-tripping
a36dcb5 2026-04-16 Jonathan Thomas Merge pull request #1059 from OpenShot/displacement-effect
614d308 2026-04-16 Jonathan Thomas Merge pull request #1027 from OpenShot/qt6-support
c95b57d 2026-04-16 Jonathan Thomas Add displacement-map effect with separate map and mask readers
7ae7362 2026-04-13 Jonathan Thomas Adding new override widget method for Android video renderer display support - works differently than our desktop support.
1141745 2026-04-10 Jonathan Thomas When compiling without RESVG support, use QSvgRenderer instead of QIcon/QPixmap for SVG rendering.
991b29c 2026-04-10 Jonathan Thomas Merge remote-tracking branch 'origin/develop' into qt6-support
bda1d68 2026-04-09 Jonathan Thomas Merge pull request #1057 from OpenShot/flac-ext
f1544b6 2026-04-09 Jonathan Thomas Add flac extension to common extension list so FFmpegReader is the first reader we attempt to open it.
228e052 2026-04-07 Jonathan Thomas Merge pull request #1054 from OpenShot/release-20260402
d699b36 2026-04-02 Jonathan Thomas Merge pull request #1053 from OpenShot/optimize-preview
bc4e41d 2026-03-13 Jonathan Thomas Fixing ffmpeg audio channel layout fallback - for Qt6 builds on Ubuntu 25.04.
867473a 2026-03-12 Jonathan Thomas Merge remote-tracking branch 'origin/develop' into qt6-support
6c1f687 2026-02-13 Jonathan Thomas Merge branch 'develop' into qt6-support
c7b36d9 2026-02-03 Jonathan Thomas Slight refactor to our Python swig bindings to better support Arm64 pointer address space (required for Android)
44f92a0 2026-02-02 Jonathan Thomas Improving swig to wrap pointers as PyLong_AsVoidPtr - to avoid Android memory addresses overflowing as an int.
23b4e74 2025-12-22 Jonathan Thomas Improving swig bindings for Python, Java, and Ruby for access direct pixel byte array:
a26ed32 2025-12-22 Jonathan Thomas Adding missing packages to our linux install instructions doc: python3-zmq python3-pyqt5.qtwebengine
bfca7ee 2025-12-17 Jonathan Thomas Adding Qt6 detection and compatibility, without breaking Qt5. -DUSE_QT6=AUTO|ON|OFF (default: AUTO; prefers Qt6 when available and CMake ≥3.16, ON forces Qt6, OFF forces Qt5). Also, a few version specific changes for API changes on Qt6, but it appears to work well.