Commit Graph

  • 3e9de94ecc 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. audio-recording Jonathan Thomas 2026-05-29 10:03:43 -05:00
  • 70ec155627 Add JUCE audio recorder and fix FFmpegWriter FLAC duration Jonathan Thomas 2026-05-28 06:47:37 -05:00
  • 8f1f091c1d Merge pull request #1079 from OpenShot/cmake-cleanup develop Jonathan Thomas 2026-05-24 22:59:10 -05:00
  • e3151d577b Clean-up and modernization of our cmake build system Jonathan Thomas 2026-05-24 17:31:52 -05:00
  • 0a68c884e2 Merge pull request #1078 from OpenShot/object-mask-effect Jonathan Thomas 2026-05-22 14:50:34 -05:00
  • 8d9b8c22bf Improve Cutie object mask memory and aspect handling Jonathan Thomas 2026-05-21 14:43:55 -05:00
  • d01ffe1ea8 Merge pull request #1077 from OpenShot/black-frames Jonathan Thomas 2026-05-20 23:15:32 -05:00
  • cf354e19f3 Merge pull request #1075 from OpenShot/object-detection-v2 Jonathan Thomas 2026-05-20 22:34:45 -05:00
  • da35707966 Merge branch 'object-detection-v2' into object-mask-effect Jonathan Thomas 2026-05-20 21:42:07 -05:00
  • 5dc3724bba Fixing Codacy nitpicks Jonathan Thomas 2026-05-20 21:41:45 -05:00
  • 9f228c923b Improve Object Mask prompts and conservative GPU selection Jonathan Thomas 2026-05-20 18:45:57 -05:00
  • 395f66253c Improve Object Mask model compatibility Jonathan Thomas 2026-05-20 14:22:28 -05:00
  • 8bd98a592b Replace ObjectMask EdgeSAM seed masks with EfficientSAM ONNX Jonathan Thomas 2026-05-18 19:18:56 -05:00
  • 1f0b1b9698 Add Object Mask effect with EdgeSAM and XMem propagation Jonathan Thomas 2026-05-18 16:28:13 -05:00
  • ec370404d9 Add YOLO segmentation mask support to Object Detection Jonathan Thomas 2026-05-15 17:51:16 -05:00
  • 9fbe600244 Updated compatibility for CVObjectDetection to support: Jonathan Thomas 2026-05-15 09:15:09 -05:00
  • 30e3ba6b34 Repair rpath for new OpenCV 4.13.0 version on Mac, during libopenshot build, so it's linked correctly. Jonathan Thomas 2026-05-14 13:20:35 -05:00
  • d1aa207335 Updating GitLab CI to use parallel builds, dynamic cpu counts, so each build server is using all available cores. Jonathan Thomas 2026-05-14 13:14:59 -05:00
  • 8a5fd4d8b4 Updating Mac builder to use OpenCV 4.13.0, and passing in correct paths for it in our CI build Jonathan Thomas 2026-05-14 12:17:24 -05:00
  • f7586af1be Fallback to CPU backend for OpenCV when CUDA backend not available. Jonathan Thomas 2026-05-13 23:20:31 -05:00
  • c9380a8c0e Updating OpenCV on Linux and Windows builders to use a newly installed 4.13.0 version (built from source) Jonathan Thomas 2026-05-13 22:48:08 -05:00
  • 47d1784b1c Validate YOLO ONNX models in libopenshot Jonathan Thomas 2026-05-13 14:30:40 -05:00
  • 4f6cb7c50f 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. Jonathan Thomas 2026-05-13 00:00:29 -05:00
  • 195632ac86 Fix persistent black frames after clip open failure Jonathan Thomas 2026-05-12 22:31:12 -05:00
  • ae3d769f0a Fix stale timeline cache after adding clips Jonathan Thomas 2026-05-12 18:38:45 -05:00
  • 14c63f3714 Fix margin-bounded effects to avoid invalid image access Jonathan Thomas 2026-05-12 15:15:15 -05:00
  • 4f289bc442 Fix saturation stride and parent effect updates Jonathan Thomas 2026-05-12 14:22:06 -05:00
  • eae93e1ebf Protecting crash when reading ONNX model with wrong format (Object Detection effect) Jonathan Thomas 2026-05-10 22:26:18 -05:00
  • be99ec02c6 Migrate object detection to YOLOv5 ONNX Jonathan Thomas 2026-05-10 21:48:24 -05:00
  • d274163314 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 Jonathan Thomas 2026-05-10 14:34:38 -05:00
  • 0751153d5a Merge pull request #1074 from OpenShot/tracked-mask-source Jonathan Thomas 2026-05-09 20:40:18 -05:00
  • 07e60a8a60 Improve Caption margins and default visibility Jonathan Thomas 2026-05-09 16:27:10 -05:00
  • ec71b7335c 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 Jonathan Thomas 2026-05-09 14:50:36 -05:00
  • a6e7d85c93 Adding the ability to use TrackedObjectMask as "Mask: Source" for any effect (i.e. blur/pixilate only the tracked area) Jonathan Thomas 2026-05-09 11:27:49 -05:00
  • 22ec091a06 Merge pull request #1073 from OpenShot/source-rotation Jonathan Thomas 2026-05-09 10:55:48 -05:00
  • 0081cda5ee Apply reader-side orientation metadata and stabilize tracker stroke rendering Jonathan Thomas 2026-05-08 20:58:53 -05:00
  • a8d956a5ca Merge pull request #1072 from OpenShot/ffmpeg-version-parsing Jonathan Thomas 2026-05-08 17:54:02 -05:00
  • 6011e73716 Merge pull request #1071 from OpenShot/small-svg-thumbnails Jonathan Thomas 2026-05-08 17:34:06 -05:00
  • eb2411e973 Fix FFmpeg version fallback parsing Jonathan Thomas 2026-05-08 15:33:11 -05:00
  • 204925cfea Merge pull request #1070 from OpenShot/black-frame Jonathan Thomas 2026-05-08 15:04:09 -05:00
  • 226f686074 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. Jonathan Thomas 2026-05-08 14:22:33 -05:00
  • 6ccb526cb9 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(). Jonathan Thomas 2026-05-08 13:52:28 -05:00
  • fbc37e2223 Merge pull request #1069 from OpenShot/denoise Jonathan Thomas 2026-05-07 14:18:23 -05:00
  • 58748159ca Merge pull request #1068 from OpenShot/fps-fix Jonathan Thomas 2026-05-07 13:57:06 -05:00
  • 9f4df7eed4 Merge branch 'fps-fix' into denoise Jonathan Thomas 2026-05-06 15:48:14 -05:00
  • 51ee44ab33 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 Jonathan Thomas 2026-05-05 21:19:26 -05:00
  • 3ebe4ea964 Changing caption unit tests to use minimal QT_QPA_PLATFORM, to avoid unit test crashes on our gitlab builders. Jonathan Thomas 2026-05-05 15:05:33 -05:00
  • 033d5777ff 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. Jonathan Thomas 2026-05-05 14:25:27 -05:00
  • 235a5c8491 Merge pull request #1067 from OpenShot/mask-fixes Jonathan Thomas 2026-05-03 23:38:18 -05:00
  • 117012e7f5 Merge pull request #1066 from OpenShot/beat-sync Jonathan Thomas 2026-05-03 17:01:26 -05:00
  • cababff695 Merge remote-tracking branch 'origin/develop' into beat-sync Jonathan Thomas 2026-05-03 16:39:38 -05:00
  • ce560f105e 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. Jonathan Thomas 2026-05-03 16:36:12 -05:00
  • 118fc2dc15 Merge pull request #1065 from OpenShot/benchmark-fps-metric Jonathan Thomas 2026-05-02 23:33:23 -05:00
  • fc897ec522 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) Jonathan Thomas 2026-05-02 23:20:08 -05:00
  • d986d6e99b Improving performance on blur and sharpen effect by reducing unnecessary computations. Jonathan Thomas 2026-05-02 16:32:24 -05:00
  • ab93363747 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 Jonathan Thomas 2026-05-02 14:43:51 -05:00
  • 561a233327 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) Jonathan Thomas 2026-05-02 14:13:47 -05:00
  • 0be564dbdb 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 Jonathan Thomas 2026-05-02 13:21:59 -05:00
  • cb7c8c1f93 Merge branch 'develop' into benchmark-fps-metric Jonathan Thomas 2026-05-01 23:39:32 -05:00
  • f872efc0fa Merge pull request #1064 from OpenShot/audio-visualizations Jonathan Thomas 2026-05-01 23:33:52 -05:00
  • 515fe7b196 Fixing 5 Codacy nitpicks in the audio-visualization branch Jonathan Thomas 2026-05-01 23:27:31 -05:00
  • cfd9b76cdc Merge branch 'develop' into audio-visualizations Jonathan Thomas 2026-05-01 23:15:43 -05:00
  • 055ae4579a Merge pull request #1063 from OpenShot/film-grain Jonathan Thomas 2026-05-01 23:14:14 -05:00
  • bec9f4b080 Merge branch 'develop' into film-grain Jonathan Thomas 2026-05-01 22:59:52 -05:00
  • c2dee773bb Merge pull request #1062 from OpenShot/color-grade Jonathan Thomas 2026-05-01 22:56:00 -05:00
  • f7c77d4b11 Merge branch 'audio-visualizations' into benchmark-fps-metric Jonathan Thomas 2026-05-01 19:45:10 -05:00
  • 91f4684a1e Merge branch 'film-grain' into benchmark-fps-metric Jonathan Thomas 2026-05-01 19:44:59 -05:00
  • 3b765ae5c1 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. Jonathan Thomas 2026-05-01 19:44:40 -05:00
  • 3bb5f9f07e 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. Jonathan Thomas 2026-05-01 19:03:22 -05:00
  • 3ebd6aab12 Merge branch 'audio-visualizations' into benchmark-fps-metric Jonathan Thomas 2026-05-01 17:53:51 -05:00
  • 2dd3de9919 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. Jonathan Thomas 2026-05-01 17:53:40 -05:00
  • b12379ce8a Redesign benchmark: FPS metric, stable median-of-3, mid-video seek, new effects Jonathan Thomas 2026-05-01 16:31:54 -05:00
  • fec6e901ed 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. Jonathan Thomas 2026-04-30 23:45:14 -05:00
  • aea12d2d32 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 Jonathan Thomas 2026-04-30 23:37:16 -05:00
  • 9ef70177f2 Improving performance of audio visualization modes. Redesigning waveform and filled waveform to be more CPU efficient. Adding audio visualizations to our benchmark tool. Jonathan Thomas 2026-04-30 16:05:28 -05:00
  • dd18401242 Merge branch 'film-grain' into audio-visualizations Jonathan Thomas 2026-04-29 21:51:08 -05:00
  • 337e0d3c43 Merge branch 'develop' into film-grain Jonathan Thomas 2026-04-29 13:14:30 -05:00
  • 2a9a480870 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. Jonathan Thomas 2026-04-28 13:27:08 -05:00
  • ebf69ecdf1 Fix spectrum fill artifacts, add style-aware fill behavior, and improve rainbow glow rendering. Jonathan Thomas 2026-04-27 15:38:22 -05:00
  • 2f2e04c4f0 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. Jonathan Thomas 2026-04-27 00:10:08 -05:00
  • 7d429424b6 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 Jonathan Thomas 2026-04-26 23:05:44 -05:00
  • 8ede4d777e 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. Jonathan Thomas 2026-04-24 23:06:55 -05:00
  • 81aa6d97b0 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. Jonathan Thomas 2026-04-23 21:57:15 -05:00
  • 816cd3d9ef Some low hanging optimizations on Color Grade effect for faster processing of color grading in real-time. Jonathan Thomas 2026-04-22 19:10:59 -05:00
  • 291d3a5bf1 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. Jonathan Thomas 2026-04-22 15:59:50 -05:00
  • 0c1e0cd5ae Fixing byte order bug in FrameScope, so our analysis uses RGBA8888_Premultiplied format, and adding unit test to verify. Jonathan Thomas 2026-04-22 12:46:35 -05:00
  • de4da1ed47 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) Jonathan Thomas 2026-04-21 23:56:05 -05:00
  • a58565292c Merge pull request #1060 from OpenShot/shadow-and-glow Jonathan Thomas 2026-04-20 22:54:36 -05:00
  • 0ddcdf657f 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. Jonathan Thomas 2026-04-20 18:31:11 -05:00
  • 7698f76667 Rename user facing "Wheels" label to "Color Wheels". Jonathan Thomas 2026-04-20 13:04:34 -05:00
  • b16bda0291 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. Jonathan Thomas 2026-04-19 16:05:25 -05:00
  • 5910ab5f97 pdated FrameScope so the video scope payload now includes the full practical waveform dataset the UI needs: Jonathan Thomas 2026-04-19 15:38:10 -05:00
  • 449a4f5e9f Add a new FrameScope class which analyzes color and audio data for a frame. Jonathan Thomas 2026-04-19 15:11:54 -05:00
  • 874f6e0e7e 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 Jonathan Thomas 2026-04-17 22:47:12 -05:00
  • 7af626a963 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 Jonathan Thomas 2026-04-17 16:33:56 -05:00
  • a36dcb518b Merge pull request #1059 from OpenShot/displacement-effect Jonathan Thomas 2026-04-16 22:54:48 -05:00
  • 614d308084 Merge pull request #1027 from OpenShot/qt6-support Jonathan Thomas 2026-04-16 22:21:51 -05:00
  • c95b57d114 Add displacement-map effect with separate map and mask readers Jonathan Thomas 2026-04-16 17:15:33 -05:00
  • 7ae7362aa9 Adding new override widget method for Android video renderer display support - works differently than our desktop support. Jonathan Thomas 2026-04-13 18:34:11 -05:00
  • 1141745fe1 When compiling without RESVG support, use QSvgRenderer instead of QIcon/QPixmap for SVG rendering. Jonathan Thomas 2026-04-10 23:20:05 -05:00