At this point, this implementation is only a way to evaluate if KDDockWidgets fits our workflow.
Although in the initial testing it looks nice, we need to ensure our implementation is solid enough to cover all use cases.
**Blocker**
- [x] when a detached widget is focused, keyboard shortcuts don't work
**Currently works**
- [x] saving and restoring the current layout
- [x] saving the layout in the project file
- [x] View menu to show/hide individual widgets
- [x] Undock/redock all widgets including timeline
**To improve**
- [x] Hide / Show title bars sometimes creates 2 titlebars in undocked widgets
- [x] On re-opening, in some cases undocked widgets are hidden
- [ ] Undocked widgets position is not properly restored on re-opening: this is a [Wayland limitation](https://github.com/KDAB/KDDockWidgets/issues/662)
**To fix**
- [x] Docking widget to tab it on a QtQuickWidget with qml like the monitors or the timeline does not work (see https://github.com/KDAB/KDDockWidgets/issues/658)
The aim of this merge request is to make the menu structure more logical and intuitive. This has been initially discussed during the sprint in 2023 and was re-evaluated during the sprint in 2025.
This change is mostly focused on the structure. Changes to the terminology have also been discussed, but should be done in a different patch.
# Changes done
## Structure and names
- Move all file related operations to the `File` menu
- Rename the `Clip` menu to `Media` (actions and other places are not renamed yet)
- Move the `Add clip…` options from the `Project` menu to the `Media` menu
- Remove `View Mode` from `Media` menu, leaving it only in the bin hamburger menu of the bin widget
- Rename `Timeline` menu so `Sequence`
- Make a new `Marker` menu to gather marker/guides actions from the `Clip` and `Timeline` menus
- Rename `Delete Effect` to `Remove Effect` and move to `Edit` menu below `Paste Effect`
- Move the `Add effects` list from `Timeline` menu to the `Edit` menu
- Monitor menu: move Switch Monitor and Focus Timeline to the top of the menu.
- Follow the KDE convention and remove the duplicated `Find Action…` from `View` (leave it in `Help`)
- Move `Reset Configuration` from `Help` menu to `Settings` menu
- Bring menus to this order: File - Edit - View - Media - Sequence - Tool - Monitor - Marker - Settings - Help
## Other changes
- Cleanup leftovers of already removed `force_icon_theme` action
- Rename `Clean Project` to `Remove unused media` to make it more obvious what the action does and icon `edit-clear-all`
# Changes that should be done in follow ups
- [ ] Rename `Render…` to `Export…`
- `Media` menu:
- [ ] Remove the `[ ] Clip Properties` checkbox to make it only pop up the clip properties widget
- Remove all transcode entries, leave only `Transcode`. Add a checkbox in the Transcode dialog to show all transcoding codecs instead of only edit friendly
- [ ] Merge marker/guide actions. We currently have 2 different actions (add guide and add marker), so merge them and only keep the term "marker" for everything.
- [ ] Rename `Disable Timeline effects` to `Disable Sequence effects`
- Rename Project Bin to Media
- [ ] Clip jobs, rename to Media Jobs
- [ ] Monitor menu, rename `Insert Zone in Project Bin` to `Create Subclip from Zone`
- Use term "Bin" more consistently and aligned with how other (video editing) software does it
- [ ] Use "New Bin" to create new folders in the project
- [ ] `Open current Folder in New Bin` would be: `Open Bin in New Window`
## Long term
- [ ] Add a `Go to Sequences` submenu listing the existing sequences
- [ ] Tools menu: remove Normal mode and make the Selection Tool do the same thing. Rename Overwrite mode and Insert mode to Overwrite Tool and Insert Tool using an arrow icon with color.
- [ ] In monitor, Multicam View is confusing. Some user confuse it with Multicam Tool. We have not yet found a perfect solution, to be discussed more.
This adds a filter button with a menu in the Effects / Transitions List. In this menu, a new option allows to hide assets not compatible with a 10 bit pipeline, as well as an option to only show reviewed assets.
This adds a new "Kdenlive" component in the About Dialog showing the git revision and package type.
It also makes it available in the debug info.
{width=540 height=528}
Found via `codespell -S "*.po,*.svg,*.pgm,*.appdata.xml,*.knsrc,*.kdenlive.xml,*.notifyrc,./po,./tests/fakeit.hpp,./src/lib/external/kiss_fft,./src/dialogs/speechdialog.cpp" -L abitrate,abl,acount,afile,aline,alls,atleast,anid,buildin,build-in,filterin,filetest,filesnames,indx,inout,ivocations,nd,nin,originaly,parth,reenable,renabled,re-use,re-used,re-using,seh,shotcut,splitted,superceded,wheight,worl`
Leftover from the leftovers.
Found via: `codespell -S "*.po,*.svg,*.pgm,*.appdata.xml,*.knsrc,*.kdenlive.xml,*.notifyrc,./po,./src/lib/external/kiss_fft,./src/dialogs/speechdialog.cpp" -L abitrate,abl,acount,afile,aline,alls,atleast,anid,buildin,build-in,filterin,filetest,filesnames,indx,inout,nd,nin,originaly,parth,reenable,renabled,re-use,re-used,re-using,seh,shotcut,splitted,superceded,wheight,worl`
Fixes any leftover typos.
Includes some source changes.
Found via:
`codespell -S "*.po,*.svg,*.pgm,*.appdata.xml,*.knsrc,*.kdenlive.xml,*.notifyrc,./po,./src/lib/external/kiss_fft,./src/dialogs/speechdialog.cpp" -L abitrate,abl,acount,afile,aline,atleast,anid,buildin,build-in,filterin,filesnames,indx,inout,nd,nin,originaly,parth,reenable,renabled,re-use,re-used,re-using,seh,shotcut,splitted,wheight`
This is a bit rough, but also because the structure of effect files itself is not perfect. Longterm it would be nice to change the format a bit, but that requires more work also in the C++ code
neon was already shipping mlt 7.30 and an updated freior-plugins, so added the user archive to be able to access those debs. also removed the gzipped icon workaround as it caused the build to fail.
- Introduced slotCreateRangeMarkerFromZone and slotCreateRangeMarkerFromZoneQuick methods in Monitor and MainWindow.
- Added corresponding actions in the timeline ruler and monitor context menus for user-triggered marker creation.
- Implemented validation to ensure a valid zone is defined before marker creation.
- Added user feedback with success and error messages upon marker creation attempts.
- Add Q_INVOKABLE resizeMarker(...) in MonitorProxy and TimelineController
- MonitorRuler.qml/Clip.qml: add left/right resize handles for range markers
- live visual feedback, cursor/hover states, binding restore on end/cancel
- Support both Clip Monitor (MarkerModel) and Project Monitor (GuideModel)
- Added UI elements for range marker support, including a checkbox and duration display.
- Updated MarkerDialog logic to handle range markers, ensuring proper duration calculations.
- Enhanced marker creation and editing methods to accommodate range markers.
- The "End Time" and "Duration" fields are synchronized, so changing one correctly updates the other.
- Implemented parsing of optional duration from comments in the `importFromTxt` method.
- Added logic to differentiate between standard and range markers based on parsed duration.
- Updated marker addition to handle cases where duration is specified in brackets.
-Added new template variables for text export: {{duration}}, {{durationtimecode}}, {{endtimecode}}, {{endframe}}, {{hasrange}}
-Enables custom export formats with timing info
-FFmpeg chapter export with accurate durations
- Introduce tests for adding, editing, and converting range and point markers.
- Validate JSON import/export functionality with duration support.
- Ensure backward compatibility with legacy JSON markers lacking duration fields
- Handle duration in `importFromJson` to support backward compatibility
- Update marker addition logic to differentiate between standard and range markers based on duration
- Add `addRangeMarker` method to handle range markers with duration.
- Update `editMarker` to preserve duration when editing markers.
- Introduce `addOrUpdateRangeMarker_lambda` for adding or updating existing range markers.
- Extend role names in the model to include duration and range-related roles.
- Adjust undo/redo functionality for range marker operations.
v4l dependency was used when we implemented a webcam capture feature. This feature has been dropped for some time and is not working anymore.
So there is no point in keeping the dependency. If we one day decide to reimplement it, we should probably try to do it through QtMultimedia, not through v4l.
CCBUG: 467391
A few days ago, frei0r released a new filter with two new filters (plus a few changes to other filters, but this just concerns the new ones).
[mirr0r](https://github.com/dyne/frei0r/tree/master/src/filter/mirr0r) is the first one which repeats and flips the input image when it goes out of bounds and [ntsc](https://github.com/dyne/frei0r/tree/master/src/filter/ntsc) which emulates and distorts a static-y VHS tape. This is honestly a mess right now and just wanted this PR to be made so it can be changed later. Fedora 42 which I'm using doesn't even have the newer frei0r on it or at least I don't think it does, so I didn't get a chance yet to test it.
Fixes various user-facing and non-user-facing typos. Found via:
`codespell -S "*.po,*.svg,*.pgm" -L acount,afile,aline,atleast,buildin,build-in,indx,inout,nd,originaly,parth,seh,shotcut,splitted,wheight`
Implements #2037
* replace zoom toggle button with zoom-in and zoom-out buttons
* replace zoom toggle action with zoom-in and zoom-out actions
* move zoom functionality from track header to status bar, made audio thumbs button a split button
* removed zoom toggle action from Timeline main menu (debatable, but though it's not worth the space given that it is now available in status bar, key-bindable and maybe not used that often...)
Also fixes peak indicators *not* resetting when muting via track header (they only got reset when using mute buttons of the Mixer)
Regression introduced in 25.08.0 compared to 25.04.3 and earlier
Also fixes peak indicators *not* resetting when muting via track header (they only got reset when using mute buttons of the Mixer)
Regression introduced in 25.08.0 compared to 25.04.3 and earlier
On my system (Arch Linux, Qt 6.9.1 KDE Frameworks 6.17.0) the Clip Properties Panel looks like this:

I assume this not always looked like this so maybe this is a Breeze or Qt bug?
I found a workaround by overwriting the style sheet for QTabBar, this is how it looks then:

Another Alternative would be to set DocumentMode to false then these ugly gray overlays will not be shown either. Then it would look like this on my system:

I tested 24.12 AppImage and get the same result so it's probably not a recent change/bug in Breeze/Qt)
The docs about QTabBar DocumentMode mention MacOS so maybe this is specific to Linux? 🤔 Can you check if you can reproduce this issue on Windows/MacOS?
AFAIK it did not have any negative effects except spamming the logs with
```
QMetaObject::invokeMethod: No such method ClipMonitor_QMLTYPE_80::updatePoints(QVariant,QVariant)
```
This became apparent when using built-in effects which adds a disabled transform effect to all clips.
This bug was introduced in b8ffac30 but I don't remember or understand why I wanted to force this update even if the effect is disabled... This commit reverts this change and removes the hasRotation condition.
Implements #2038
I don't think this is needed / intuitive to use. If the user doesn't need the Color Scopes they could rather switch to a layout without them or enable/disable the widget(s).
* Reimplement Solid Level style from C++ audio levels widget for a simplified but consistent look with other level visualizations
* numerous smaller tweaks for recording button: switch to more common disabled (locked) state, adjust/fix style of paused state to look more like a general pause button/icon, color-theme fixes for recording state, added animation for active recording state, subtle click animation
* Apply red recording tint exclusively instead of both recording and highlight tint for selected track. Semantically this might be correct but as highlight color can be arbitrary mixing it with fixed red color on top of theme-dependent background color will produce ugly colors in most cases.
On my system (Arch Linux, Qt 6.9.1 KDE Frameworks 6.17.0) the Clip Properties Panel looks like this:

I assume this not always looked like this so maybe this is a Breeze or Qt bug?
I found a workaround by overwriting the style sheet for QTabBar, this is how it looks then:

Another Alternative would be to set DocumentMode to false then these ugly gray overlays will not be shown either. Then it would look like this on my system:

I tested 24.12 AppImage and get the same result so it's probably not a recent change/bug in Breeze/Qt)
The docs about QTabBar DocumentMode mention MacOS so maybe this is specific to Linux? 🤔 Can you check if you can reproduce this issue on Windows/MacOS?
AFAIK it did not have any negative effects except spamming the logs with
```
QMetaObject::invokeMethod: No such method ClipMonitor_QMLTYPE_80::updatePoints(QVariant,QVariant)
```
This became apparent when using built-in effects which adds a disabled transform effect to all clips.
This bug was introduced in b8ffac30 but I don't remember or understand why I wanted to force this update even if the effect is disabled... This commit reverts this change and removes the hasRotation condition.
This bug happened when loading a project that uses subtitles and has subs on lower layers (not 0).
In this case all subs are visually shown at the top (layer 0) even though they should be shown in lower layers.
This bug happened when loading a project that uses subtitles and has subs on lower layers (not 0).
In this case all subs are visually shown at the top (layer 0) even though they should be shown in lower layers.
This is needed because with pkg-config the linking of libav or better its depdencies like zlib does not work properly with MSVC
The FindFFmpeg.cmake file is assembled from kfilemetadata and krita. It is currently also in review to be added to extra-cmake-modules, however until this is accepted and we have a dependency on that ECM version we need a copy of the file in our code base
* Replace neon green filled square with Save icon. The icon should hopefully make it more self-explanatory what this indicator is for. The neon green didn't fit well in with the rest of the themes color palette and was a bit too distracting I think
* Adjust background color, which was same as the Layout Switcher with a similar but slightly different color and only show it when the icon is shown. Previously, when the indicator was not showing it looked a bit off as there was now visually a larger gap on the left side of the switcher compared to its right
* Replace neon green filled square with Save icon. The icon should hopefully make it more self-explanatory what this indicator is for. The neon green didn't fit well in with the rest of the themes color palette and was a bit too distracting I think
* Adjust background color, which was same as the Layout Switcher with a similar but slightly different color and only show it when the icon is shown. Previously, when the indicator was not showing it looked a bit off as there was now visually a larger gap on the left side of the switcher compared to its right
SVT-AV1 code uses the ffmpeg option `crf` to set set the rate factor for
VBR and constrained VBR mode, rather than `qscale`.
Preserve custom quality scale when editing presets.
BUG: 492708
* Fixes#2033
* Make position, Size, Rotation text overlays more readable by flipping the text on high rotation angles
* Keep rotation angles between -360 and + 360 degrees so it matches the range that's used for the rotation parameter in the Transform effect in the Effects Panel
* Adjust Resize corner and edge handles cursor shape depending on rotation handle so they point roughly in the correct correction (e.g. if rotated by 90 deg the top edge handle visually becomes the right edge handle)
* When resizing with rotation keep the rectangle in its position by aligning/moving it after resize so it lines up with its rotated position (e.g. 45deg rotation and user pulls bottom-left corner we keep the rectangle fixed to it's top-right corner)
* Enable antialiasing for drawing the red Rectangle so it looks smoother when rotated
* Fix circular updates Monitor -> cpp -> Monitor when resizing, moving, rotation via Monitor. There was - I assume - a partial fix for this in the code `updateEffectRect` called via Monitor/cpp but it didn't work and was spamming `QMetaObject::invokeMethod: No such method QQuickItem_QML_317::updateEffectRect(QRect)`. Implemented a different approach where the QML side ignores updates from cpp while it is in a moving, resizing or rotation operation.
SVT-AV1 code uses the ffmpeg option `crf` to set set the rate factor for
VBR and constrained VBR mode, rather than `qscale`.
Preserve custom quality scale when editing presets.
BUG: 492708
* Fixes#2033
* Make position, Size, Rotation text overlays more readable by flipping the text on high rotation angles
* Keep rotation angles between -360 and + 360 degrees so it matches the range that's used for the rotation parameter in the Transform effect in the Effects Panel
* Adjust Resize corner and edge handles cursor shape depending on rotation handle so they point roughly in the correct correction (e.g. if rotated by 90 deg the top edge handle visually becomes the right edge handle)
* When resizing with rotation keep the rectangle in its position by aligning/moving it after resize so it lines up with its rotated position (e.g. 45deg rotation and user pulls bottom-left corner we keep the rectangle fixed to it's top-right corner)
* Enable antialiasing for drawing the red Rectangle so it looks smoother when rotated
* Fix circular updates Monitor -> cpp -> Monitor when resizing, moving, rotation via Monitor. There was - I assume - a partial fix for this in the code `updateEffectRect` called via Monitor/cpp but it didn't work and was spamming `QMetaObject::invokeMethod: No such method QQuickItem_QML_317::updateEffectRect(QRect)`. Implemented a different approach where the QML side ignores updates from cpp while it is in a moving, resizing or rotation operation.
We've been using Link color instead of highlight. For default breeze theme that's practically the same color but for other non-bluish themes this looked out of place as Link color is blue in all tested themes but we're using Highlight color in all other places to highlight text/icons.
We've been using Link color instead of highlight. For default breeze theme that's practically the same color but for other non-bluish themes this looked out of place as Link color is blue in all tested themes but we're using Highlight color in all other places to highlight text/icons.
* Fix spin box non-neutral value not getting styled when initially set (worked only if changed by user but not on initial project loading) -> Extracted this logic into a custom class so it cannot be forgotten to update the style after updating the value
* Fix not updating neutral value of the spinbox when switching to recording mode (we only updated the slider neutral value position)
* Fix spin box non-neutral value not getting styled when initially set (worked only if changed by user but not on initial project loading) -> Extracted this logic into a custom class so it cannot be forgotten to update the style after updating the value
* Fix not updating neutral value of the spinbox when switching to recording mode (we only updated the slider neutral value position)
BUG: 465766
* the minimum height of the subtitle edit widget was reduced in bug 506899 by JBM.
* tested the 5 default layouts and they now fit a screen with a low resolution of 1280x720
BUG: 465766
* the minimum height of the subtitle edit widget was reduced in bug 506899 by JBM.
* tested the 5 default layouts and they now fit a screen with a low resolution of 1280x720
BUG: 503985
Fixes adding results twice producing garbage transcription results. E.g. on the small-en-us model it would produce lots of 'the' subtitles as reported in the linked bug report.
BUG: 503985
Fixes adding results twice producing garbage transcription results. E.g. on the small-en-us model it would produce lots of 'the' subtitles as reported in the linked bug report.
* fix: repaint background on initial palette change (Widget background was drawn using default/light theme not using the selected theme -> replaced our custom event (which is only fired on manual theme change) with Qt default PaletteChange event)
* fix: use correct bottom position when drawing the bars (was off-by-one)
* change: make style consistent with color scopes (background, border and line colors)
* change: draw vertical lines at frequency label position
* change: use white instead of green color for the bars. I think this could avoid confusion as this green color is also used for the first audio channel when drawing the Audio Thumbnails so it could indicate that the Audio Spectrum is showing only the first channel of the Audio. I checked the fft filter in MLT and it uses the average of all channels so probably better to avoid green (channel color) here and go with a more neutral fill color.
* fix: repaint background on initial palette change (Widget background was drawn using default/light theme not using the selected theme -> replaced our custom event (which is only fired on manual theme change) with Qt default PaletteChange event)
* fix: use correct bottom position when drawing the bars (was off-by-one)
* change: make style consistent with color scopes (background, border and line colors)
* change: draw vertical lines at frequency label position
* change: use white instead of green color for the bars. I think this could avoid confusion as this green color is also used for the first audio channel when drawing the Audio Thumbnails so it could indicate that the Audio Spectrum is showing only the first channel of the Audio. I checked the fft filter in MLT and it uses the average of all channels so probably better to avoid green (channel color) here and go with a more neutral fill color.
* removed custom greenish/reddish background color for audio tracks (doesn't work well with most color themes, especially our default breeze as its using blue accents)
* use same background color for video and audio tracks (I think the difference in track headers is enough so we don't need another visual clue here and reduce a potential distraction)
* replaced timeline focus from highlighted top border to highlighted timecode in Timeline toolbar similar to what we do with highlighting the Monitors. This reduces the visual overload as the previous highlight line is very close to the multiple other highlight lines from the widget tab groups above (at least if the user did not change their tabs from bottom to top positioning)
* changed the track settings / timeline toolbar settings icon to a good'ol hamburger menu icon. This is more consistent with menus in other widgets, also the previously used settings icon looks very similar to the Audio Mixer button
* fix: update Monitor Timecode and ToolMessage of the MainWindow after user changed the color scheme and redraw them using new colors
* removed custom greenish/reddish background color for audio tracks (doesn't work well with most color themes, especially our default breeze as its using blue accents)
* use same background color for video and audio tracks (I think the difference in track headers is enough so we don't need another visual clue here and reduce a potential distraction)
* replaced timeline focus from highlighted top border to highlighted timecode in Timeline toolbar similar to what we do with highlighting the Monitors. This reduces the visual overload as the previous highlight line is very close to the multiple other highlight lines from the widget tab groups above (at least if the user did not change their tabs from bottom to top positioning)
* changed the track settings / timeline toolbar settings icon to a good'ol hamburger menu icon. This is more consistent with menus in other widgets, also the previously used settings icon looks very similar to the Audio Mixer button
* fix: update Monitor Timecode and ToolMessage of the MainWindow after user changed the color scheme and redraw them using new colors
* fix: use palette text color for I/Q and HUD text (text was not visible on light themes)
* fix use palette dark color for circle border on light themes (border was barely visible on light themes)
* fix: consider circle border pen width when drawing (circle was cut-off by 1px)
* change: enable antialiasing for drawing the HUD circle
* change use palette highlight color for drawing the HUD (more consistent with other color scopes)
* fix: use palette text color for I/Q and HUD text (text was not visible on light themes)
* fix use palette dark color for circle border on light themes (border was barely visible on light themes)
* fix: consider circle border pen width when drawing (circle was cut-off by 1px)
* change: enable antialiasing for drawing the HUD circle
* change use palette highlight color for drawing the HUD (more consistent with other color scopes)
* fix: adds small border around the Waveform to guarantee good contrast regardless of the surrounding background color (was a problem on light themes)
* fix: make axis line color less distracting / lower opacity (now uses same color as used in RGB parade)
* fix: prevent clipping bottom y value
* change: instead of drawing current y value in the HUD scale below/above top/bottom scale values to prevent clipping let's hide the scale value instead and only show the current y value
* change: draw current y value and horizontal line in highlight color instead of text color (think this looks better when drawing the parade only in black/white color mode; same color as used in RGB parade)
* change: use same margin between drawing area and scale on the right for both Waveform and RGB Parade
* fix: adds small border around the Waveform to guarantee good contrast regardless of the surrounding background color (was a problem on light themes)
* fix: make axis line color less distracting / lower opacity (now uses same color as used in RGB parade)
* fix: prevent clipping bottom y value
* change: instead of drawing current y value in the HUD scale below/above top/bottom scale values to prevent clipping let's hide the scale value instead and only show the current y value
* change: draw current y value and horizontal line in highlight color instead of text color (think this looks better when drawing the parade only in black/white color mode; same color as used in RGB parade)
* change: use same margin between drawing area and scale on the right for both Waveform and RGB Parade
* fix: adds small border around the parade to guarantee good contrast regardless of the surrounding background color (was a problem on light themes)
* fix: fill area between individual color channels with this border color instead of palette background color (on light themes this looks better as there is too much contrast between parade background and palette background)
* fix: consider device pixel scaling when drawing axis (fixed bug on HiDPI displays where the axis did not fully extend to the parade right border)
* fix: make axis line color less distracting
* change: instead of drawing current y value in the HUD scale below/above top/bottom scale values to prevent clipping let's hide the scale value instead and only show the current y value instead
* change: draw current y value and horizontal line in highlight color instead of text color (think this looks better when drawing the parade only in black/white color mode)
* change: use same color for gradient reference line as is used for drawing the axis lines but with higher opacity
---
Most of these issues are regressions caused by my previous change to use the system palette for the surrounding area like the min/max values or the drop-down selection on top of the widget. The HiDPI bug is ancient and also present in latest release.
Before:
<img src="/uploads/57df01a3162714c1e720148375ccddbe/before_breeze_light.png" width=200>
<img src="/uploads/5b66098b110f25ac36db9820bec38d2d/before_breeze_dark.png" width=200>
After:
<img src="/uploads/33243b7c868dcf748e9cc35b043f06d0/after_breeze_light.png" width=200>
<img src="/uploads/70d63fd9d0b054b6c11a526ff7899895/after_breeze_dark.png" width=200>
* fix: adds small border around the parade to guarantee good contrast regardless of the surrounding background color (was a problem on light themes)
* fix: fill area between individual color channels with this border color instead of palette background color (on light themes this looks better as there is too much contrast between parade background and palette background)
* fix: consider device pixel scaling when drawing axis (fixed bug on HiDPI displays where the axis did not fully extend to the parade right border)
* fix: make axis line color less distracting
* change: instead of drawing current y value in the HUD scale below/above top/bottom scale values to prevent clipping let's hide the scale value instead and only show the current y value instead
* change: draw current y value and horizontal line in highlight color instead of text color (think this looks better when drawing the parade only in black/white color mode)
* change: use same color for gradient reference line as is used for drawing the axis lines but with higher opacity
---
Most of these issues are regressions caused by my previous change to use the system palette for the surrounding area like the min/max values or the drop-down selection on top of the widget. The HiDPI bug is ancient and also present in latest release.
Before:
<img src="/uploads/57df01a3162714c1e720148375ccddbe/before_breeze_light.png" width=200>
<img src="/uploads/5b66098b110f25ac36db9820bec38d2d/before_breeze_dark.png" width=200>
After:
<img src="/uploads/33243b7c868dcf748e9cc35b043f06d0/after_breeze_light.png" width=200>
<img src="/uploads/70d63fd9d0b054b6c11a526ff7899895/after_breeze_dark.png" width=200>
* restyle audio mixer
* create new styles for audio levels
* share the same component for audio levels in the mixer and monitor toolbar
* refactor mixer and level widgets
* make channels readable on non-stereo projects (especially on HiDPI displays with fractional scaling they have been pretty much unreadable)
implements: #2008
implements: #2010
* restyle audio mixer
* create new styles for audio levels
* share the same component for audio levels in the mixer and monitor toolbar
* refactor mixer and level widgets
* make channels readable on non-stereo projects (especially on HiDPI displays with fractional scaling they have been pretty much unreadable)
implements: #2008
implements: #2010
Unfortunately the script to add the version to the appstream files
relies on cmake and at the moment it grabs the version from imath, which
is included with OpenTimeLineIO, which is fetched by default.
GIT_SILENT
Unfortunately the script to add the version to the appstream files
relies on cmake and at the moment it grabs the version from imath, which
is included with OpenTimeLineIO, which is fetched by default.
GIT_SILENT
Gave OTIO export a try and noticed that the video tracks were reversed when opening the .otio file with the official `otioviewer` app (audio tracks are fine).
Found this [bug report](https://bugs.kde.org/show_bug.cgi?id=503692) which describes the same issue using Davinci Resolve.
The documentation https://opentimelineio.readthedocs.io/en/latest/tutorials/otio-timeline-structure.html mentions this:
> Rendering of the image tracks in a timeline is done in painter order. The layers in a stack are iterated from the bottom (the first entry in the stack) towards the top (the final entry in the stack)
So when we have the timeline V3, V2, V1, A1, A2, A3 in Kdenlive it seems like that the tracks should be added to the stack in this order: V1, V2, V3, A1, A2, A3. I did not find an answer if video or audio should/must come in a specific order though, but this seems to work with `otioviewer` so is probably fine.
I don't have an application to test this with other than `otioviewer` (or know anything else about OTIO 😅 ) so if someone has Davinci Resolve or some other thing that can import .otio files would be nice if you could test the issue and this change.
We call drawComponent with bins in y and max always set to 256.
so std::max_element gets two indices while the first is inclusive and the last exclusive so by &y[max - 1] we always exclude the last/highest bin.
When you pass in a white color clip then there is only data in the highest bin with index=255. If we skip this then maxBinSize will be 0 leading to infinity in the log function leading to funny results when trying to call setPixel at minus infinity.
Note1: Its not a crash but the app will become unresponsive/blocked and you can see infinite log messages complaining about setPixel
Note2: There is probably another issue unrelated to the Histogram. I would have expected this to die on almost all color clips like #ff0000 or #ffff00. For yellow for example I can reproduce but not for red. For some reason all these red pixels are not 255 but 254...
* Fixes rounding error when converting between cpp and qml offsets. In cpp we use top-left integer offset but in QML centered x/y floating point coords. This accumulated in a misalignment by a few pixels. Also affected drawing the overlays / grids being off slightly.
* Fixes zoombar compensation when setting qml offsets. This was hardcoded to 10 pixels but on my system this is 14. This resulted in major misalignment on higher zoom levels as the error is multiplied by the zoom factor.
2nd problem is most noticable when using rotoscope on a high zoom level but affected all tools. Notice yellow rectangle is off as well as red rotoscope mask border
misaligned:

fixed:

1st problem was also noticable when not zoomed. See slight offset of red rectangle at the bottom
misaligned:

fixed:

I was pulling my hair out trying to understand what `10 * m_zoom` is supposed to be until I understood that is supposed to be the size of the opposite zoombar...
This is definitely a fix for
https://bugs.kde.org/show_bug.cgi?id=498337
and I think also for
https://bugs.kde.org/show_bug.cgi?id=461219
but I'm not exactly sure about the 2nd report or if reported meant something different.
We call drawComponent with bins in y and max always set to 256.
so std::max_element gets two indices while the first is inclusive and the last exclusive so by &y[max - 1] we always exclude the last/highest bin.
When you pass in a white color clip then there is only data in the highest bin with index=255. If we skip this then maxBinSize will be 0 leading to infinity in the log function leading to funny results when trying to call setPixel at minus infinity.
Note1: Its not a crash but the app will become unresponsive/blocked and you can see infinite log messages complaining about setPixel
Note2: There is probably another issue unrelated to the Histogram. I would have expected this to die on almost all color clips like #ff0000 or #ffff00. For yellow for example I can reproduce but not for red. For some reason all these red pixels are not 255 but 254...
When zoomed (gain > 1.0) we did not plot additional pixels in the zoomed region so those remain as fill color producing visible artifacts making it hard to see anything on the scope.
Fixed by interpolating these additional in-between pixels so we get a smooth continuous view without artifacts.
Using QImage SmoothTransformation method here for a smooth/blurry look. With FastTransformation we'd be 2x faster but compared to the time it takes to draw the vectorscope overall the scaling time doesn't really matter.
Testing on a 1080p clip:
Before:
**101_000 us**

After:
**102_000 us**
This includes scaling with SmoothTransformation which itself took **700 us**.

Interpolation Method:
I went with SmoothTransformation but other options would be possible.
FastTransformation would be faster at around **300 us**. But given the time it takes to draw the unscaled Vectorscope this gain is pretty much negligible.
This is how it would look using FastTransformation instead of Smooth:

This is what it looks like in Davinci Resolve: https://youtu.be/m1F9TJzfo1s?feature=shared&t=483
Too me this looks blurry so I guess they use Bilinear/Smooth interpolation.
@emohr was in favor (via Chat) of following Davinci here.
Kdenlive is part of KDE Gear which means furtunately a lot of work is done by the KDE release team. The KDE release team cares of tagging and releasing the source code tarballs to https://downloads.kde.org. However, the Kdenlive team still needs to take care of writing a blog post for the release and of releasing the binaries like AppImage, Windows (`*.exe`) and macOS (`*.dmg`). This process is tracked below.
The schedule of KDE Gear can be found at https://community.kde.org/Schedules
## Tasks
### Preparation (~ 2 weeks before release)
- [ ] For major releases: if it was decided to change the splash screen, make sure it has been merged/committed
- [ ] Update MLT and other dependencies [in Craft](https://invent.kde.org/packaging/craft-blueprints-kde/)
- [ ] Run the [render test suite](https://invent.kde.org/multimedia/kdenlive-test-suite) on stable nightly
- [ ] Open a draft merge request on the Kdenlive website [for the announcement](https://invent.kde.org/websites/kdenlive-org/-/wikis/Posts/Release-Annoucements)
### Release Binaries
Start with the following steps after the source tarballs have been released by the KDE release team:
- [ ] Open a pull request to update Kdenlive and dependencies [on Flathub](https://github.com/flathub/org.kde.kdenlive). Check if there is already a feasible pull request by another person or the flathub-bot.
- [ ] Run again the [render test suite](https://invent.kde.org/multimedia/kdenlive-test-suite) on stable nightly
- [ ] Download binaries right after the test suite succeeded from https://cdn.kde.org/ci-builds/multimedia/kdenlive/
- [ ] Create Windows standalone version:
- Extract the 7zip file
- Put a file `qt.conf` with the following content into the `bin` folder (to help Qt find `qwindows.dll` in platforms/folder, see https://github.com/owncloud/client/issues/7034):
```
[Paths]
Plugins = .
```
- Compress as self-extracting exe file with 7zip
- [ ] [Upload](https://download.kde.org/README_UPLOAD) all binaries for https://download.kde.org/stable/kdenlive/. The structure and file names should be like:
- 25.08/
- linux/
- kdenlive-25.08.0-x86_64.AppImage
- macOS/
- kdenlive-25.08.0-arm64.dmg
- kdenlive-25.08.0-x86_64.dmg
- windows/
- kdenlive-25.08.0.exe
- kdenlive-25.08.0_standalone.exe
- [ ] Wait for sysadmins to do the actual publishing
### Announcement and Documentation
- [ ] Write the announcement (see [here](https://invent.kde.org/websites/kdenlive-org/-/wikis/Posts/Release-Annoucements) for technical instructions)
1. Take the input from the full log with all commits
2. Start with a general paragraph or two about what has been done in the release cycle
3. Then add detailed sections of each feature with a structure like this:
- Title of feature
- Explanation
- Descriptive images
4. It is good practice to put a list of important fixes or changes after all the features.
4. Finish it with the full log [(to be put to `changelog.md`)](https://invent.kde.org/websites/kdenlive-org/-/wikis/Posts/Release-Annoucements#change-log)
- [ ] After binaries are published: Publish the announcement by merging the merge request. Make sure date and time are set correctly in UTC in the `date` tag of the release announcement. It needs to be set to a time prior the merge time, otherwise it won't show up.
@@ -129,6 +129,12 @@ For double values these placeholders are available:
* represented by a checkbox
##### `"multiswitch"`
* 2 possible options defined by strings (max / min)
* this special parameter type will affect 2 different parameters when changed. the `name` of this parameter will contain the name of the 2 final parameters, separated by a LF character: ` `. Same thing for the `default`, `min` and `max` which will contain the values for these 2 parameters, separated by an LF character. See for example the fade_to_black effect.
* represented by a checkbox
##### `"list"`
* multiple choice
* represented by a drop-down menu
@@ -207,7 +213,7 @@ You can set `default` to `"adjustcenter"` to adjust the geometry to the frame s
| attribute name | description |
| :------------- | :------------- |
| `filter` | Filter for file extensions. Example : `"Source Files (*.cpp *.cc *.C);;Header files (*.h *.H)"` (warning: this format is different to `url`!) |
| `newstuff` | _(optional)_ KNewStuff config file (usually placed in `kdenlive/data` and added to to `kdenlive/src/uiresources.qrc` so the value looks like `":data/kdenlive_wipes.knsrc"`). If this is empty no download button is shown|
| `newstuff` | _(optional)_ KNewStuff config file (usually placed in `kdenlive/data` and added to `kdenlive/src/uiresources.qrc` so the value looks like `":data/kdenlive_wipes.knsrc"`). If this is empty no download button is shown|
| `paramlist` | list of possible values separated by semicolon (no whitespaces!). Special keywords `%lumaPaths` and `%lutPaths` are available to show files in the applications luma/lut directories |
<description>Apply a two-pole all-pass filter with central frequency (in Hz) frequency, and filter-width width. An all-pass filter changes the audio’s frequency to phase relationship without changing its frequency to amplitude relationship.</description>
<description>Apply a two-pole Butterworth band-pass filter with central frequency, and (3dB-point) band-width width. The csg option selects a constant skirt gain (peak gain = Q) instead of the default: constant 0dB peak gain. The filter roll off at 6dB per octave (20dB per decade). </description>
<description>Apply a two-pole Butterworth band-reject filter with central frequency frequency, and (3dB-point) band-width width. The filter roll off at 6dB per octave (20dB per decade).</description>
<description>Apply a two-pole all-pass filter with central frequency (in Hz) frequency, and filter-width width. Boost or cut lower frequencies.</description>
<paramlistdisplay>BT.709,BT.470M,BT.470BG,Constant gamma of 2.2,Constant gamma of 2.8,SMPTE-170M,SMPTE-240M,SRGB,iec61966-2-1,iec61966-2-4,xvycc,BT.2020 for 10-bits content, BT.2020 for 12-bits content</paramlistdisplay>
<name>Output transfer characteristics</name>
<paramlistdisplay>BT.709,BT.470M,BT.470BG,Constant gamma of 2.2,Constant gamma of 2.8,SMPTE 170M,SMPTE 240M,SRGB,IEC 61966-2-1,IEC 61966-2-4,xvYCC,BT.2020 for 10-bits content, BT.2020 for 12-bits content</paramlistdisplay>
<paramlistdisplay>BT.709,BT.470M,BT.470BG,Constant gamma of 2.2,Constant gamma of 2.8,SMPTE-170M,SMPTE-240M,SRGB,iec61966-2-1,iec61966-2-4,xvycc,BT.2020 for 10-bits content, BT.2020 for 12-bits content</paramlistdisplay>
<name>Override input transfer characteristics</name>
<paramlistdisplay>BT.709,BT.470M,BT.470BG,Constant gamma of 2.2,Constant gamma of 2.8,SMPTE 170M,SMPTE 240M,SRGB,IEC 61966-2-1,IEC 61966-2-4,xvYCC,BT.2020 for 10-bits content, BT.2020 for 12-bits content</paramlistdisplay>
<description>Compensation Delay Line is a metric based delay to compensate differing positions of microphones or speakers.
For example, you have recorded guitar with two microphones placed in different locations. Because the front of sound wave has fixed speed in normal conditions, the phasing of microphones can vary and depends on their location and interposition. The best sound mix can be achieved when these microphones are in phase (synchronized). Note that a distance of ~30 cm between microphones makes one microphone capture the signal in antiphase to the other microphone. That makes the final mix sound moody. This filter helps to solve phasing problems by adding different delays to each microphone track and make them synchronized.
Crossfeed is the process of blending the left and right channels of stereo audio recording. It is mainly used to reduce extreme stereo separation of low frequencies.
<comment><![CDATA[Banding detection range in pixels. Default is 16.<br>
If positive, random number in range 0 to set value will be used. If negative, exact absolute value will be used. The range defines square of four pixels around current pixel.]]></comment>
<comment><![CDATA[Sets direction in degrees from which four pixel will be compared.<br>
If positive, random direction from 0 to set direction will be picked. If negative, exact of absolute value will be picked. For example direction 0°, -180°, or -360° will pick only pixels on same row and -90° will pick only pixels on same column]]></comment>
<comment><![CDATA[If enabled, current pixel is compared with average value of all four surrounding pixels.<br>
The default is enabled. If disabled, current pixel is compared with all four surrounding pixels. The pixel is considered banded if only all four differences with surrounding pixels are less than threshold.]]></comment>
Simulates image dilation, an effect which will enlarge the lightest pixels in the image by replacing the pixel by the local (3x3) maximum.]]></description>
Simulates image erosion, an effect which will enlarge the darkest pixels in the image by replacing the pixel by the local (3x3) minimum.]]></description>
<description>Fill borders of the input video, without changing video stream dimensions. Sometimes video can have garbage at the four edges and you may not want to crop video input to keep size multiple of some number</description>
<description>Fill borders of the input video without changing video stream dimensions. Sometimes video can have garbage at the four edges and you may not want to crop video input to keep the size multiple of some number</description>
<description><![CDATA[Debands video quickly using gradients.<br>
<description><![CDATA[<b>-= Deprecated =-</b><br>
Debands video quickly using gradients.<br>
Fix the banding artifacts that are sometimes introduced into nearly flat regions by truncation to 8-bit color depth.<br>
Interpolate the gradients that should go where the bands are, and dither them.<br>
<b>It is designed for playback only. Do not use it prior to lossy compression, because compression tends to lose the dither and bring back the bands</b>.]]></description>
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.