Skip to content

Thursday, 29 April 2021

When visualizing the data, mapping of values to colors is one of essential steps. There is an extensive discussion in the literature about the proper selection of colors (see e.g. the publications mentioned here), and there are multiple publicly available collections of color maps that are designed to deliver best results in scientific visualization applications. For the coming release 2.9 we added some of the well-known collections to LabPlot. Currently available collections of color maps are:

The access to the color maps defined in these collections is done via the new Color Maps Browser:

Color Maps Browser

The switch between the different collections and their sub-categories is done directly in this browser:

Collection List in the Color Maps Browser

Additional short information is provided for every available collection together with the link to the original source:

Information in the Color Maps Browser

As the first application and usage of the color maps is LabPlot we implemented the conditional formatting in the spreadsheet. This feature, well-known from other spreadsheet applications like LibreCalc, etc., allows to highlight the cells in the spreadsheet according to some rules (or conditions). There’re multiple ways to defined such conditions, on of them is based on a “heatmap”. Heatmap based conditional formatting colors the cells according to a color map and the number. The number of “value levels” determining the way how the values are grouped or clustered corresponds to the number of colors defined in such a color map.
There is a new dialog in the spreadsheet now allowing the user to define the heatmap formatting according to the levels in a color map:

Heatmap Formatting Dialog

The formatting is either applied to all columns in the spreadsheet or to selected only. It is also possible to specify how and where the color hightlighting should be applied. The different options available here (“Background”, “Font Color” or “Icon”) lead to the results as on the screenshots below:

Heatmap Formatting

More usage of the color maps will be added in future, especially when we start adding heatmap visualizations or visualizations of 3D surfaces.

KDE Activities: How To

Wednesday, 28 April 2021

A lot of good things happen at the moment in Kate’s development.

We didn’t only implement plenty of new features for 21.04 and fix a lot of bugs in the last months and year, we did improve our overall product branding, too.

HUD style command palette with Fuzzy Matching in 21.04

Early in 2020, we introduced a new Kate icon designed by Tyson Tan to get some icon that is instantly recognizable compared to the generic ones we used in the past.

New Kate Icon

Naturally this was not without controversy, but it seems to be well perceived in general ;=)

Beside this, our web site got a major overhaul, now using Hugo and the common KDE styling.

Screenshot of Kate website

We even have now proper i18n support for the web site content using the normal KDE i18n infrastructure for translations, as done for other KDE sites. I hope this allows more people all over the world to enjoy our web presence.

Now, all this stuff leads to the topic of this post, Kate’s mascot.

Given that Tyson Tan helped out with the new icon in 2020, naturally another of our branding assets that could receive an update was our mascot.

Therefore I pinged Tyson if he can give that some love, too, after the icon redesign was finalized :=)

A bit of history about Kate’s mascot

2011 - The first (failed) try

Nearly ten years ago there was the first idea to have some mascot for our editor. Nothing much happened after that initial call and the topic was ignored for some years.

The whole approach for the outreach to people to design it was not that clever, just some random blog post on our homepage and then some not that helpful feedback in the comments as back channel. I think we didn’t even link that somewhere else ourself at any community where a larger base of artists could have found it at all.

2014 - Kate the Woodpecker

In 2014 I had again the motivation to take a look at this. This time I didn’t write some blog but directly reached out to Tyson Tan, the creator of the Krita mascot Kiki. I really liked that mascot and thought it would be awesome to have something in a similar art style for Kate. Some months later, Kate the Woodpecker was born.

Kate the Woodpecker

The short design summary by Tyson at that time was:

Why a woodpecker? I said I was going to draw a humming bird, but she turned out to look more like a woodpecker, and the sound a woodpecker makes knocking on a tree is coincidentally similar to the sound of keyboard strokes).

Kate is female because of her name. I thought about other names like Klicky and Katherine, but I would rather save them for other future KDE projects to pick up as their names.

Design elements: “{}” on the chest, “/” of the feathers, and “*” in the eyes. The wing feathers also resembles multiple document tabs. Color scheme inspired by doxygen source code highlighting.

Now if you compare the style of this with the overall polish our branding got in the last year, it seemed a refresh for the mascot would really be great.

Let’s welcome…

Therefore, without further delay, let’s reveal the new and improved Kate the Cyber Woodpecker mascot.

Kate the Cyber Woodpecker

Kate the Cyber Woodpecker

Kate the Cyber Woodpecker - Without text

Kate the Cyber Woodpecker - Without Text

Kate the Cyber Woodpecker - Without background

Kate the Cyber Woodpecker - Without Background

;=) I am personally VERY happy with this updated design.

Tyson did really put a lot of effort into this, thanks a lot!

For the licensing, to quote Tyson:

I hereby donate the new Kate the Cyber Woodpecker to Kate Editor project. The artworks are dual licensed under LGPL (or whatever the same as Kate Editor) and Creative Commons BY-SA. In this way you don’t need to ask me for permission before using/modifying the mascot.

Naturally we will use this mascot in a lot of places to promote Kate. We encourage others to do the same.

You want to print some cool Kate t-shirts? Be our guest ;=)

You want to create variations of this? Feel free! But it would be nice if you could drop us some link e.g. on our development list, that way we can re-use such things, too.

For future references, we have a dedicated page for our mascot.

Kate the Cyber Woodpecker’s design history

I asked Tyson if I can share the intermediate versions we exchanged to show the evolution and he agreed and even wrote some short summaries about the individual steps. This includes the initial mascot and the icon that fit into this design evolution. I therefore just quote what he wrote about the different steps below.

2014 - Kate the Woodpecker

2014 version - Kate the Woodpecker

The 2014 version was done perhaps during my lowest point as an artist. I had not been drawing much in years, and was on the verge of giving up completely. There were some interesting ideas in this version, namely the {} brackets on her chest, and the color scheme inspired by doxygen code highlighting. However, the execution was very simplistic – at that time, I deliberately stop using any fancy techniques to expose my inadequate base skills. In the followed years, I would be going through an arduous process to rebuild my broken, self-taught art foundation from the ground up. I’m grateful that the Kate team still kept this one on their website for many years.

2020 - The new Kate icon

2020 - The new Kate icon

The new Kate icon was the only time I attempted real vector art. It was at that time I began to develop some faint artistic sense. I had no previous experience of icon design, there was zero discipline like math-guided proportion. Every shape and curve was tweaked using my instinct as an artist. The concept was very simple: it’s a bird shaped like the letter “K”, and it has to be sharp. The bird was chunkier until Christoph pointed it out, I later turned it into a more sleek shape.

2021 - Mascot sketch

2021 version - Sketch of the new mascot

In this initial sketch, I was tempted to ditch the robotic concept and just draw a cute good looking bird instead.

2021 - Mascot design

2021 version - Redesign of the new mascot

Kate’s mascot re-design resumed after I finished drawing the new splash picture for the upcoming Krita 5.0. I was able to push myself to do more each time I attempted a new picture at that time, so I was determined to keep the robotic concept. Although the proportion was off, the mech design elements was more or less coined in this one.

2021 - Final Mascot

2021 version - Final Kate the Cyber Woodpecker

The proportion was adjusted after Christoph pointed it out. The pose was adjusted to feel more comfortable. The wings were re-drawn after studying on real bird wings. A cool-looking, detailed keyboard was hand-drawn to emphasize the main usage of the application. An abstract background was added with a proper 2D typography design. The general idea is: unmistakably cutting edge and artificial, but also unmistakably full of life and humanity.


A matching thread for this can be found here on r/KDE.

Tuesday, 27 April 2021

The Kdenlive team is happy to announce the release of version 21.04 with lots of interface and usability improvements and many bug fixes. This version also comes with new Typewriter and Strobing effects as well as Effect Zones, which give you the ability to apply effects to track and/or timeline regions. There is also new Speech-to-Text feature to automatically transcribe audio to text and a Media Browser widget to easily browse and add your source material to your project. The Online Resources has been converted into a widget and buffed with more media providers. Not to mention tons of under the hood polishing in preparation for Qt6 and MLT7.

We would like to thank the contributions of Rafal Lalik (Typewriter effect), Vivek Yadav (Media Browser), Martin Sandsmark (Alpha Strobe effect) and Julius Künzel (Online Resources), and also welcome Julius as a core team member. While the devs were busy hacking the bug squashing team managed to close these past months more than 500 bugs in the tracker.

Speech to text

The new Speech to Text feature allows to automatically transcribe any audio to text using the Vosk speech recognition toolkit. Currently there is support for 17 languages and dialects using the official models. Download the model and add it as a dictionary in the settings or simply drag and drop it.

You can find more information on how to install the needed dependencies and speech models in the user manual.

Interface and Usability Improvements

This cycle received a good amount of interface and usability improvements.

Besides the availability of zoombars in the monitor and keyframe scroll bars, zoombars are now available in the timeline as well. You can easily zoom in/out in the timeline by dragging the edges of the timeline scrollbar. (Vertical zoombars coming soon.)

Key binding information

Key binding info has been added on the left while context item information has been moved to the right of the status bar.

Improved timeline visuals
The timeline got a visual overhaul with more and better looking guides/marker colors, the guides have been moved above the timeline ruler while preview and zone bars have been moved below.

Before (above) and after (below)


New Media Browser
The new Media Browser allows you to easily navigate through your file system and add clips directly to the Bin or Timeline. You can enable it from View menu.


Improved Keyframe panel
The effect’s keyframe panel has new icons, improved keyframe grabbing and new functions like:

Move a selected keyframe to cursor
Duplicate a selected keyframe
Apply a value to selected keyframe(s)
Select keyframes with CTRL + click
Rubber select select keyframes with SHIFT + click
Move multiple keyframes at once


Besides the new shiny features a lot of enhancements have been added as well like the ability to delete all effects in selected clips, ability to download LUTs directly from the interface, added Drop Area to “Master” button to drop effects to it and polishing the rotoscoping monitor overlay to name a few.

The beloved typewriter effect is back with a vengeance with 3 animation modes.

Animation by character

Animation by word

Animation by line

Alpha Strobe The Alpha Strobe effect can be applied to text, images or videos.

Above the effect applied to a text clip. On the right the effect applied to a video track.

Effect Zones

The new Effect Zones allow you to apply effects to specific regions of tracks or the timeline. Zones can be set from the effect zone bar in the timeline or from the interface in the effect panel.

Track Effect Zone


Master Effect Zone

Online Resources

The new online resources widget features more source footage providers such as Pixabay and Pexels besides the already available Freesound and Internet Archive. Other possible providers are being considered, see here for more details.

It is important to give credit of the downloaded sources so we’ve added an option to directly import the license attribution as a project note.  

Other noteworthy fixes

  • Add AV1 render profile.
  • Add “unused clip” filter in Project Bin.
  • Add channel selection to audio waveform filter.
  • Add ITU 2020 colorspace in clip properties.
  • Re-enable audio playback on reverse speed.
  • Improved Flatpak support.
  • Allow keyboard grab of subtitles.
  • Treat GIFs as video, not as image.
  • Fix many compile warnings and prepare for Qt6.
  • Fix wipes for slideshow clips.
  • Alpha shapes: allow going outside screen.

See the full log for more.

Full log
  • Fix various spacer crashes. Commit.
  • Fix crash on remove space. Commit.
  • Fix crash on fade deletion from timeline. Commit.
  • Fix undo fade deletion when removed by dragging outside clip in timeline. Commit.
  • Add 21.04 splash-screen. Commit.
  • Fix nvidia’s proxy profile. Commit.
  • Workaround crash playing remote files in MLT 6.26.0. Commit.
  • Fix various focus issues (related to #859). Commit.
  • Fix in point calculation on speed revert. Commit. Fixes bug #424582
  • Alpha shapes: allow going outside screen. Commit.
  • Try to fix value change on hover issue (maybe Qt regression). Commit. See bug #435531
  • Monitor effect toolbar: center to prevent covering top/bottom handles. Commit.
  • When double clicking a title clip, seek to click pos before editing title to show correct background. Commit.
  • Fix effect parameter sliders with some ranges like bezier handles. Commit.
  • Fix possible crash on quit. Commit.
  • Fix bezier curves messy layout. Commit.
  • Bezier curve widget: adjust height to monitor resolution. Commit.
  • Allow drag & drop of vosk dictionaries urls. Commit.
  • Fix timeline preview parameters, add comments to make things cleaner. Commit.
  • FIx possible startup crash. Commit.
  • Fix bug in subtitle deletion undo. Commit.
  • Ensure subtitle track is displayed when dropping a subtitle file in timeline. Commit.
  • Backport nvenc codec name fix. Commit.
  • Fix proxy clips vaapi profiles. Commit.
  • Fix keyframe limit on import from clipboard. Commit. Fixes bug #433618
  • Show keyframe value in tooltip when editing in timeline. Commit.
  • Fix clip monitor refresh on title clip change. Commit.
  • Ensure subtitle track is always shown when adding a subtitle. Commit.
  • When selecting a bin clip from timeline, take care of speed in zone selection. Commit. Fixes bug #425417
  • Fix rotation behaving in unexpected way (automatically repeating). Commit. Fixes bug #425682
  • Fix spacer/insert/remove space with grouped clips on both sides of the move. Commit. Fixes bug #390668
  • Automatically update subtitle text when changing focus. Commit.
  • *Fix recent regression in timeline selection. Commit.
  • Ensure subtitle track is shown whenever a subtitle item is added. Commit.
  • Fix crash on project close. Commit.
  • Fix inconsistent opengl mode on Windows,. Commit.
  • Fix broken cache deletion. Commit. Fixes bug #434429
  • Minor fix for visual state for missing files. Commit.
  • Fix replacement of missing images in title clips. Commit. Fixes bug #411324
  • Backup subtitles too. Commit.
  • Archive import: Fix dialog, allow *.zip. Commit. See bug #386398
  • Appimage dependencies: Freeze vidstab version. Commit. Fixes bug #435147
  • Archive Project: fix subtile files are not added to archive. Commit. Fixes bug #434401
  • Archive Project: fix some lumas are not found. Commit.
  • Automatic Scene Split: apply zones correctly. Commit. Fixes bug #435263
  • Fix change speed for slideshow clips. Commit. See bug #429795. See bug #428263. See bug #392670
  • Fix archiving for generator mlt clips. Commit. Fixes bug #420623
  • Fix timeline keyframe position for opacity for affine and other non qtblend effects. Commit.
  • Fix composition keyframe view broken. Commit.
  • Fix crash on document close. Commit.
  • Unbreak audio spectrum. Commit.
  • Properly release timelinemodel on document close. Commit. See bug #409667
  • Fix crash when closing project while an effect monitor overlay was active. Commit.
  • Ensure new transcoding profiles appear even if user already has some custom ones. Commit.
  • Fix unconfigured consumer causing various crashes. Commit. See bug #409667
  • Revert commit 93dbb1f0995163d96a63c5e7a2a0c812542a681b. Commit.
  • Titler: update background alpha slider properly. Commit. Fixes bug #433889
  • Don’t call reconfigure from render thread. Commit. See bug #428632
  • Black font for project monitor markers. Commit.
  • Fix compile warnings. Commit.
  • Fix setting frame background color. Commit.
  • Start playback from beginning if on timeline ende at action start. Commit. Fixes bug #353051
  • Fix wipes for slideshow clips. Commit. Fixes bug #434360
  • Add/Edit marker/guide dialog: always show category color in combobox, always use black font for guides/markers. Commit.
  • Remove unused files. Commit.
  • Fix warnings. Commit.
  • Add some padding to guide labels, use black font. Commit.
  • Ensure guides are also drawn over subtitle track. Commit.
  • Fix incorrect cast. Commit.
  • Remove some debug output. Commit.
  • Move speed indicator in qml overlay. Commit.
  • Fix project duration label displaying one frame too much. Commit. Fixes bug #425639
  • Fix keyframes with master effects having a zone. Commit.
  • Fix Qt 5.15 / KF 5.78 warnings. Commit.
  • Fix clang-tidy / clazy warnings. Commit.
  • Clazy fixit (default checks, from qtcreator). Commit.
  • Fix timeline operation broken after aborted right resize operation. Commit.
  • Move clip markers below clip name to avoid overlap, fix markers position when track is collapsed. Commit.
  • Fix regression crash editing marker comment. Commit.
  • Ruler zones and guides now also snap to timeline cursor, drag+ shift disables snapping. Commit.
  • Improve timeline zone snapping when moving with mouse. Commit.
  • Rendering fixes: fix black frame at end of rendered project, enforce out point to avoid rendering trailing black frames, stop rendering before end guide. Commit. Fixes bug #425960
  • Don’t show zone duration while dragging it. Commit.
  • Now that we have effect zone, allow multiple unique effects (like fades) on tracks / master. Commit.
  • Make master effect zones use the same height as timeline zone for a cleaner look. Commit.
  • Fix master effect zones hidden. Commit.
  • Fix titler zoom incorrectly passed as integer. Commit.
  • Fix master effect zones hidden in recent change, ensure moving a zone with mouse always sticks to frames. Commit.
  • Fix timeline crashes. Qml === operator doesn’t work on clip producer type. Commit.
  • Comment out useless debug stuff. Commit.
  • Fix broken compositions (incorrect qml comparison change in recent commit). Commit.
  • Clip monitor: use marker category’s color as background. Commit.
  • Monitor overlay: use guide category as background color, ensure guide at timeline position appears above others. Commit.
  • Fix startup crash on empty config file. Commit.
  • Fix tests after last commit. Commit.
  • Workaround app translation mess, small fixes for locale matching. Commit. See bug #434179
  • Ensure timeline zoombar left handle is always visible. Commit.
  • Fix mono clip audio thumbnails broken. Commit.
  • Refactor guide model to fix several bugs (moving a guide over another on replaced it). Commit.
  • Fix some more warnings. Commit.
  • Fix some more warnings. Commit.
  • Fix some more warnings. Commit.
  • Fix some more warnings. Commit.
  • Fix some more warnings. Commit.
  • Fix some more warnings. Commit.
  • Fix QML comparisons warnings. Commit.
  • Fix various timeline ruler repaint issues. Commit.
  • Add pulse capture profile (needed for flatpak). Commit.
  • Timeline ruler: small UI improvements (add left/right handles to zones, move preview markers to bottom). Commit.
  • Cleanup timeline guides: increase number of guides categories(9), move guide label above timeline ruler. Commit.
  • Appimage: openssl for ffmpeg (#918), fix rubberband build. Commit.
  • Fix effect zone for bin clips. Commit.
  • Refresh monitor refresh latency on effect change. Commit.
  • Fix startup crash with preview scaling enabled. Commit.
  • Fix bunch of cast warnings (manual). Commit.
  • Auto fix warnings. Commit.
  • Cleanup for shortcut list. Commit.
  • Monitor: add possiblity to use shortcut for show/hide edit mode. Commit. Fixes bug #434405
  • Fix various monitor refresh issues. Commit.
  • Update requirements listed in speech to text config message. Commit.
  • Don’t show opacity when not relevant in the list of params in keyframe paste value. Commit.
  • Clang-tidy -fix: modernize-use-equals-default. Commit.
  • Clang-tidy -fix: modernize-use-emplace. Commit.
  • Clang-tidy -fix: modernize-use-default-member-init. Commit.
  • Clang-tidy -fix: modernize-use-bool-literals. Commit.
  • Clang-tidy -fix: modernize-use-auto. Commit.
  • Clang-tidy -fix: modernize-raw-string-literal. Commit.
  • Clang-tidy -fix: modernize-pass-by-value. Commit.
  • Fix warnings. Commit.
  • Clang-tidy -fix: modernize-make-unique. Commit.
  • Clang-tidy -fix: modernize-loop-convert. Commit.
  • Clang-tidy -fix: modernize-deprecated-headers. Commit.
  • Clang-tidy -fix: modernize-use-nullptr. Commit.
  • Clang-tidy -fix: modernize-use-override. Commit.
  • Improve ui for copy keyframe parameter. Commit.
  • Restore softness param in composite transition. Commit.
  • Zoom bar: always show handles. Commit.
  • Timeline zoombar, related to #651 !184. Commit.
  • Do not show timecode in shortcut list. Commit. Fixes bug #433679
  • Validate timecode in settings. Commit. Fixes bug #432580
  • Titler: use TimecodeDisplay for duration input. Commit.
  • Cleanup and improvements for titlewidget code. Commit.
  • Titler: Add ellipse item. Commit.
  • Fix timeline operation cannot be performed after group resize with no move. Commit.
  • Ensure ruler ticks don’t get over zones. Commit.
  • Include pango library in Appimage. Commit.
  • Improve audio thumbnail offset on clip cut or longer clips. Commit. See bug #423337
  • Include fribidi to ensure we have a working libass and avformat module in Appimage. Commit.
  • Fix active effect mess, resulting in incorrect monitor connection and crash. Commit. See bug #424809
  • README: update instruction for nightly flatpak. Commit.
  • Update nightly flatpak based on flathub script. Commit.
  • README: add build status for nightly builds, add flatpak nightly instruction. Commit.
  • Remove unnecessary debug message introduced with bf8dac93. Commit.
  • Rotoscoping: add center-based resize (by shift); improve key bind info. Commit.
  • Fix scaling of rotoscope mask. Commit.
  • Various fixes for effect zones, disable for clips. Commit.
  • QtWebEngine no more needed. Commit.
  • Allow building with Qt5.11 (debian buster). Commit.
  • Project Bin: do not allow zoom 0 for icon view (nothing is visible). Commit.
  • Further fixes on icon install. Commit.
  • Comment breeze-dark icon install leading to a file conflict. Commit.
  • Enable speech to text on playlist files. Commit.
  • Correctly update effect stack on effect zone undo. Commit.
  • Fix undo set effect zone. Commit.
  • Always show master effect zones. Commit.
  • Samll improvement in timeline ui scaling on low res monitors. Commit.
  • Hide frame on Master button. Commit.
  • Titler: Fix crash on load title during animation edit. Commit. Fixes bug #433010
  • Some fixed for timeline ruler (fix timecode sometimes stopping in the middle of timeline). Commit.
  • Fixes wrong version checking for typewriter and allows to work with development version of mlt-6.25. Commit.
  • Add missing icon file. Commit.
  • Comment out missing icon. Commit.
  • Allow setting effect zone for master / track effects, initial implementation. Commit.
  • Change subtitle icons. Commit.
  • Improve and fix “add-subtitle” icon. Commit.
  • Add icons for keyframe actions. Commit.
  • Update credits. Commit.
  • Use two digits for hours in SRT timecodes. Commit. Fixes bug #433193
  • Fix incorrect handling of mix transition when moving one of the clips to another track. Commit. See bug #433527
  • Refresh monitor after title edit from timeline. Commit.
  • Allow to edit title clip with double click on timeline. Commit.
  • Speech to text: always select full sequence when clicking on a no speech section. Commit.
  • Fix windows text edit speech recognition. Commit.
  • On windows, the official Python3 package installs the executable as “python”, not “python3”. Commit.
  • Fix upgrading python speech to text modules. Commit.
  • Fix focus issue after editing timeline item duration on double click. Commit.
  • Fix focus on item under mouse after switching back from another app. Commit.
  • Show error if speech modules were removed since last run. Commit.
  • Fix disambiguation found by gettext 0.21. Commit.
  • Display speech to text python modules version, improve config feedback. Commit.
  • Improve speech to text config. Commit.
  • Fix disambiguations found by gettext 0.21. Commit.
  • Fix recursive search broken on cancel. Commit. Fixes bug #433773
  • Grapped clips: jump to next free space within a track (left/right). Commit.
  • Change shortcut for Loop Zone to avoid conflict with windows system. Commit.
  • Fix various selection issues. Commit.
  • Give KeyframeView focus back to make shortcuts working. Commit.
  • Fix my typo: i18n->i18nc. Commit.
  • Fix disambiguations found by gettext 0.21. Commit.
  • Grapped clips: jump to next free track if neighbour is occupied. Commit.
  • Comment out recent lost timeline focus that made things worse. Commit.
  • Improve focus handling when switching to fullscreen monitor. Commit.
  • Fix disambiguations found by gettext 0.21. Commit.
  • Do not allow keyframe edit if keyframes are hidden. Commit.
  • Open duration window on double click on timeline item. Commit. Fixes bug #407574
  • Builtin typewriter for kdenlive titler. Commit.
  • Ensure we use an UTF-8 encoding for markers. Commit. See bug #433615
  • Don’t mark document modified when opening a project file with guides. Commit. See bug #433615
  • Fix animated param view when keyframes are hidden. Commit.
  • Make timeline tracks separator slightly more visible. Commit.
  • Comment out attempt to fix windows python’s env vars. Commit.
  • When focusing the app, ensure we have the correct timeline item under mouse referenced. Commit.
  • Render Dialog: remember state of “more options”. Commit. Fixes bug #433600
  • Attempt to fix python scripts exec on Windows. Commit.
  • Keyframes: Shift+drag now allows selecting last keyframe, fix corruption / crash on group keyframe move. Commit.
  • Transcode job: don’t silently overwrite exported files. Commit. Fixes bug #433623
  • Don’t enforce profile width multiple of 8. Commit.
  • Text edit: add bookmarks, save analysed speech in bin clip, various fixes. Commit.
  • Appimage: don’t fail on missing bigsh0t. Commit.
  • Titler: update tab order. Commit. Fixes bug #433590
  • Do not allow zero for values of a project profile (framrate, framesize,…). Commit. Fixes bug #432016
  • Profile width in MLT can be a multiple of 2, not 8. Commit.
  • Text based edit: save button now adds the edited clip to bin playlist, subsequent changes automatically update the playlist. Commit.
  • Update text based edit, allow preview. Commit.
  • Fix appimage creation on missing libva driver. Commit.
  • AnimatedRect: add “adjustcenter” default (Pillar Echo effect). Commit.
  • Adjust appimage final script with recent changes. Commit.
  • Don’t rebuild existing audio thumbs for playlist on project opening, display playlist audio thumbs in clip monitor. Commit.
  • Master disappeared… Commit.
  • Add missing patch files. Commit.
  • Appimage dependency: path frameworks to build without phonon, get rid of libcanberra. Commit.
  • Fix wrong duration for non-animated GIFs. Commit.
  • Fixuifiles. Commit.
  • Remove “Create Region” menu item (not re-implemented yet) #82. Commit.
  • Treat GIFs as video, not as image. Commit. Fixes bug #410908. See bug #411180
  • Build scripts: remove unused kdoctools dependency. Commit.
  • Another round of appimage dependency fixes. Commit.
  • Add more missing dependencies for Kdenlive Appimage dependency build. Commit.
  • Add missing KNewStuff file. Commit.
  • Add KNewStuff for “Apply LUT” effect. Commit.
  • Use urllist for lut effect. Commit.
  • Fix color picker corruption. Commit.
  • Titler: show correct outline color on first use. Commit.
  • Titler: minor ui improvements. Commit.
  • Effect and transition list: make it possible to search by id. Commit.
  • Effects: “save” mode for url (frei0r.bigsh0t_stabilize_360) #350. Commit.
  • Add appimage missing libva. Commit.
  • Add appimage missing fribidi dependency. Commit.
  • Use urllist for wipe, region, luma, dissolve and composite. Commit. Implements feature #356034
  • Add new assetparam ui type “urllist”. Commit.
  • Fix subtitle selection by keyboard shortcut. Commit.
  • Subtitles: fix crash on “select clip” shortcut. Commit.
  • Hide keyframe mode for rotoscoping (only linear supported). Commit.
  • Online Resources: fix crash and polishing #918. Commit.
  • Add missing appimage dependency file. Commit.
  • Online widget: minor ui cleanup. Commit.
  • Some fixes for text analysis on clip zones. Commit.
  • Fix reset config on windows #931. Commit.
  • Fix text editing selection/deletion. Commit.
  • Update Appimage dependencies. Commit.
  • Expanded track tag width only if >10 audio OR video tracks, not sum of. Commit.
  • Audiomixer: show track name. Commit.
  • Fix downloaded template titles and lumas not found on Windows. Commit.
  • Keep title text item editable if even if it is empty. Commit.
  • Apply !180 fixing #165. Commit.
  • Fix crash if no provider configs are found. Commit.
  • Fix invisible text cursor in title editor #165 and other minor tweaks. Commit. Fixes bug #403941. Fixes bug #407497
  • Apply !178 (drop effects on master button). Commit.
  • Apply !159. Commit.
  • Appimage: qt now needs networkauth. Commit.
  • Apply !171 (typewriter effect in latest MLT, only for title clips…). Commit.
  • Duplicated file with name clash on windows. Commit.
  • Apply !176. Commit.
  • Apply !177: dependency change! Qt NetworkAuth instead of Qt WebEngine. Commit.
  • Lighter export profiles names, allow tuning alpha & GPU profiles. Commit.
  • Apply !153. Commit.
  • Text edit: Fix search, remove deleted words from sequence on insert to timeline. Commit.
  • Text editing: switch to custom text editor, allow inserting selection to timeline. Commit.
  • Remove online resources from project menu. Commit.
  • Remove QtWebEngine from build. Commit.
  • Fix freesound config. Commit.
  • Add providers. Commit.
  • Cleanup and add documentation. Commit.
  • Remove qt-oauth-lib. Commit.
  • Fixed Colorize typo. Commit.
  • Speech to text: attempt to fix Windows UTF-8 encoding, fix crash when no clip selected and incorrect subtitle tooltip. Commit.
  • Disambiguated the string “Slide” for Slide Transition Name. Commit.
  • Disambiguated the string “Wipe” for Wipe Transition Name. Commit.
  • Disambiguated the string “Luma” for Luma Transition Name. Commit.
  • Disambiguated the string “Dissolve” for Dissolve Transition Name. Commit.
  • Disambiguated the string “Composite” for Composite Transition Name. Commit.
  • Fix context name from Effect to Transition. Commit.
  • Disambiguated the string “Stabilize” for Stabilize Effect Name. Commit.
  • Disambiguated the string “Regionalize” for Regionalize Transition Name. Commit.
  • Disambiguated the string “Regionalize” for Regionalize Effect Name. Commit.
  • Disambiguated the strings “Vinyl” for Vinyl Effect Name and “Year” for Vinyl Effect Year. Commit.
  • Disambiguated the string “Reverb” for Reverb Effect Name. Commit.
  • Disambiguated the string “Vectorscope” for Vectorscope Effect Name. Commit.
  • Disambiguated the string “Primaries” for Primaries Effect Name. Commit.
  • Disambiguated the string “Glow” for Glow Effect Name. Commit.
  • Disambiguated the string “Wave” for Wave Effect Name. Commit.
  • Disambiguated the string “Tint” for Tint Effect Name. Commit.
  • Disambiguated the string “Sepia” for Sepia Effect Name. Commit.
  • Disambiguated the string “Luminance” for Luminance Effect Name. Commit.
  • Disambiguated the string “Limiter” for Limiter Effect Name. Commit.
  • Disambiguated the string “Greyscale” for Greyscale Effect Name. Commit.
  • Disambiguated the string “Curves” for Curves Effect Name. Commit.
  • Disambiguated the string “Brightness” for Brightness Effect Name. Commit.
  • Disambiguated the string “Obscure” for Obscure Effect Name. Commit.
  • Disambiguated the string “Freeze” for Freeze Effect Name. Commit.
  • Disambiguated the string “Transform” for Affine Transform Effect Name. Commit.
  • Disambiguated the string “Transform” for Qtblend Transform Effect Name. Commit.
  • Disambiguated the string “Mirror” for Mirror Effect Name. Commit.
  • Disambiguated the string “Distort” for Distort Effect Name. Commit.
  • Disambiguated the string “Defish” for Defish Effect Name. Commit.
  • Disambiguated the string “Corners” for Corners Effect Name. Commit.
  • Disambiguated the string “Soft Glow” for Soft Glow Effect Name. Commit.
  • Disambiguated the string “Emboss” for Emboss Effect Name. Commit.
  • Disambiguated the string “Fade out” for Audio Fade Out Effect Name. Commit.
  • Disambiguated the string “Fade in” for Audio Fade In Effect Name. Commit.
  • Disambiguated the string “Fade out” for Image Fade Out Effect Name. Commit.
  • Disambiguated the string “Fade in” for Image Fade In Effect Name. Commit.
  • Disambiguated the string “Sharpen” for Sharpen Effect Name. Commit.
  • Disambiguated the string “Grain” for Grain Effect Name. Commit.
  • Disambiguated the string “Dither” for Dither Effect Name. Commit.
  • Disambiguated the string “Blur” for Blur Effect Name. Commit.
  • Disambiguated the string “White Balance” for White Balance Effect. Commit.
  • Disambiguated the string “Saturation” for Saturation Effect Name. Commit.
  • Disambiguated the string “Levels” for Levels Effect Name. Commit.
  • Disambiguated the string “Invert” for Invert Effect Name. Commit.
  • Disambiguated the string “Gamma” for Gamma Effect Name. Commit.
  • Fix windows speech to text. Commit.
  • Disambiguated the string “Contrast” for Contrast Effect Name. Commit.
  • Disambiguated the string “Colorize” for Colorize Effect Name. Commit.
  • Disambiguated the string “Normalize” for Normalize Effect Name. Commit.
  • Disambiguated the string “Mute” for Mute Effect Name. Commit.
  • Disambiguated the string “Gain” for Gain Effect Name. Commit.
  • Disambiguated the string of “Pan” for Image Pan. Commit.
  • Disambiguated the strings of “Pan” for Effect name and Audio Pan. Commit.
  • Disambiguated the string “Size” for Filesize. Commit.
  • Disambiguated the string “Size” for Filesize. Commit.
  • Subtitle edit: switch to KTextEdit so we get spell check. Commit.
  • Text based speech recognition: propose to show log on failure. Commit.
  • Fix text edit search, highlight search line background to reflect status (found/not found). Commit.
  • Various improvments for speech text analysis (display silences, fix zone analysis). Commit.
  • Introduce analysis of clip zone or subclip. Commit.
  • Various fixes for speech recognition subtitles (show progress, don’t terminate before process finished). Commit.
  • Initial version of online resource rewrite. Commit.
  • Move Qt-OAuth-Lib to a lib. Commit.
  • Text based editing: show speech recognition progress, initial search. Commit.
  • Enforce utf8 in auto generated subtitles. Commit.
  • Fix crash after closing auto subtitles dialog, add config button to speech widgets opening the config page. Commit.
  • Remember last speech model used. Commit.
  • Only list speech model folder if it contains an expected config file, and disable/enable speech features when system config is updated. Commit.
  • Make speech recognition work with custom model folder. Commit.
  • Fix custom speech model folder broken. Commit.
  • Implement speech model deletion. Commit.
  • Move speech recognition settings to Kdenlive’s main settings dialog. Commit.
  • Speech to text: set clip monitor zone when a sentence is selected in text editor. Commit.
  • Speech to text widget: put text in a list view, clicking on a sentence seeks the clip monitor. Commit.
  • Wip: first version of working text clip analysis. Commit.
  • Fix speech script install, add preview for text based edit widget. Commit.
  • Fix compilation with KF5 < 5.71. Commit.
  • Speechdialog: Fix url for archive extract job. Commit.
  • Update copyright year for speechdialog. Commit.
  • First draft of speech to text (requires the python vosk and srt modules). Commit.
  • Automatically highlight text for editing when adding a subtitle. Commit.
  • FIx possible crash on subtitle resize, and allow cutting unselected subtitle. Commit.
  • Fix subtitle text not updated on go to next/prev and related crash. Commit.
  • Allow keyboard grab of subtitles. Commit.
  • Allow resizing unselected subtitles. Commit.
  • Remove env variable breaking UI translation. Commit.
  • WHen dragging, hover on tab will focus the tab. Make it work from start. Commit.
  • Focus dockwidget on tab hover. Commit.
  • Switch to updated subtitle icon – should be working now. Commit.
  • Fix clip with mix transition cannot be cut in some circumstances. Commit.
  • Ensure all track tags have the same width if more than 10 tracks. Commit.
  • Smaller icons in library widget. Commit.
  • Fix rendering uses wrong locale, resulting in broken slowmotion in render and possibly other issues on some locales. Commit.
  • Fix building tests with odd MLT install. Commit.
  • Fix build. Commit.
  • Make RTTR optional. Commit.
  • Allow building with Qt 5.11 (on Debian stable). Commit.
  • Expose proxy info in playlist clip properties (to allow delete, etc). Commit.
  • Fix proxied playlists rendering blank and missing sound. Commit.
  • Fix playlist proxies broken. Commit.
  • Fixed issue where changing speed resets audio channel of clip to channel 1. Commit.
  • Ensure color/image/title clips parent producer always has out set as the longest duration of its timeline clips. Commit.
  • Ensure clips have an “unnamed” label if name is empty. Commit.
  • Fix parameter type. Commit.
  • Typewriter effect. Commit.
  • Rename “record timecode” to “source timecode”. Commit.
  • Effect keyframe minor fixes (improve hover color and allow pasting param to keyframe 0). Commit.
  • Fix frame timecode not updated in monitor overlay. Commit.
  • Re-enable audio playback on reverse speed. Commit.
  • Fix changing speed breaks timeline focus. Commit.
  • Ensure a group/ungroup operation cannot be performed while dragging / resizing a group. Commit.
  • Cleanup monitor overlay toolbars and switch to QtQuick2 only. Commit.
  • Improve show/hide monitor toolbar (ensure it doesn’t stay visible when mouse exits monitor). Commit.
  • Check if QPainters were initialised. Commit.
  • Correctly disable subtitle widget buttons when no subtitle is selected, add button tooltips. Commit.
  • Various typo fixes, patch by Kunda Ki. Commit.
  • Fix lift value incorrect on click. Commit. Fixes bug #431676
  • Switch failed operation messages to ErrorMessage for better visibility. Commit.
  • Update render target when saving project under a new name. Commit.
  • Some polishing for effect and rotoscoping qml overlays. Commit.
  • Add monitor and ruler key binding info. Commit.
  • Add DropArea to “Master” button to drop effects to it. Commit.
  • Move key binding info on the left, context item info on the right, show key info for project bin. Commit.
  • Add double click info for subtitle track. Commit.
  • Improve and fix ressource manager, add option to add license attribution. Commit.
  • Fix some crashes on subtitle track action. Commit.
  • Inform user on failed paste. Commit.
  • Improve subtitle track integration: add context menu, highlight on active. Commit.
  • Set range for zoome of avfilter.zoompan to 1-10 (effect doesn’t support. Commit.
  • Fix incorrect arguments parsing on app restart. Commit.
  • Fix build. Commit.
  • Fix compilation. Commit.
  • Fix several key binding message issues (missing/incorrect messages, incorrect background highlight). Related to #916. Commit.
  • Status bar: add key binding info zone to display possible key combinations in timeline. Commit.
  • Fix recent regression (crash moving clip in timeline). Commit.
  • Fix subtitles not displayed on project opening. Commit.
  • Attempt to fix subtitle encoding issue. Commit.
  • Fix broken Freesound login and import. Commit.
  • Fix regression in subtitle resize. Commit.
  • Fix clips incorrectly resized on move with mix. Commit.
  • Fix grouped clips independently resized when resizing the group. Commit.
  • Add Shift modifier to spacer tool to move guides too. Commit.
  • Fix double insertion of image sequences. Commit.
  • Search recursive for luma files to find lumas installed with KNewStuff. Commit.
  • Default filter for only supported files. Commit.
  • Update kdenliveeffectscategory.rc. Commit.
  • Disable crashing context menu in title widget. Commit.
  • Refactor: DRY up some code. Commit.
  • Add scrolling orientation setting. Commit.
  • Fix spelling and remove unnessecary comments. Commit.
  • Update Copyright. Commit.
  • Add import and export for layouts, introduce new file type. Commit.
  • Don’t store current variables (doc, itemmodel) in media browser, add clip to project on double click. Commit.
  • Fix disabled clip regression (color and opacity changes were not applied anymore). Commit.
  • Fix compilation. Commit.
  • Delete equalizer.xml. Commit.
  • Delete eq.xml. Commit.
  • Delete selectivecolor.xml. Commit.
  • Delete unsharp.xml. Commit.
  • Dragging an effect from a track to another should properly activate icon and create an undo entry. Commit.
  • Always keep timeline cursor visible when seeking with keyboard, not only when “follow playhead when playing is enabled”. Commit.
  • Implement missing subtitle copy/paste. Commit. Fixes bug #430843
  • Fix crash on copy subtitle (not implemented yet). Commit.
  • Ensure jobs for timeline clips/tracks are properly canceled when the clip/track is deleted, fix crash on audio align deleted clip. Commit.
  • Fix crash check lockfile. Commit.
  • Add a lock file to check for startup crash and propose to reset config. Commit.
  • Fix crash if the clip of an audio align job is deleted during calculations. Commit.
  • Fix possible crash dragging clip in timeline from a file manager. Commit.
  • Added fix for ffmpeg 4.2. Commit.
  • Add AV1 profile. Commit.
  • Various display adjustments for compositions and clips. Commit.
  • Reset config should also delete xmlui config file. Commit.
  • Fix disabling proxy loses some clip properties. Commit.
  • Improve MLT build by enabling more options. Commit.
  • Add patterns to the titler widget. Commit.
  • Fix tests. Commit.
  • Fix some regressions in keyframe move. Commit.
  • Update copyright year to 2021. Commit.
  • Read mediainfo’s TimeCode_FirstFrame tag. Commit.
  • Changed Widget name. Commit.
  • Import img seq added. Commit.
  • Add mediainfo based recording timecode option in clip monitor. Commit.
  • Import window as widget. Commit.
  • Fortesting. Commit.
  • Merge. Commit.
  • Undo/redo on clip monitor set in/out point. Commit.
  • Don’t snap on subtitles when track is hidden. Commit.
  • Add option to delete all effects in selected clip/s. Commit.
  • Fix some more xml parameters by Eugen Mohr. Commit.
  • Fix crash when all audio streams of a clip were disabled. Commit. Fixes bug #429997
  • Fix some broken effects descriptions, spotted by Eugen Mohr. Commit.
  • Reduce latency on forwards/backwards play. Commit.
  • Add ITU 2020 colorspace in clip properties. Commit.
  • Fix the integer value of effect parameter’s checkbox. Fixes #880. Commit.
  • Fix various typos spotted by Kunda Ki. Commit.
  • Update binplaylist.cpp. Commit.
  • Update binplaylist.cpp. Commit.
  • Update binplaylist.cpp. Commit.
  • Update Composition.qml. Commit.
  • Update projectmanager.h. Commit.
  • Update Clip.qml. Commit.
  • Update kdenlive_render.cpp. Commit.
  • Update avfilter_colorlevels.xml. Commit.
  • Update Clip.qml(unnecessary change mistake from my end). Commit.
  • Fix user-facing and non-user-facing typos. Commit.
  • Automatically update title clip name when we edit a duplicate title. Commit.
  • Add option to not pause the playback while seeking. Commit.
  • Fix some crashes with locked subtitle track. Commit.
  • Fix qml deprecation warning. Commit.
  • Fix track effects applying only on first playlist. Commit.
  • Fix timeline vertical scrolling too fast. Commit.
  • Fix crash on locked subtitle select/move. Commit.
  • Fix clip move incorrectly rejected. Commit.
  • Propose to transcode clips that don’t have a valid duration instead of failing. Commit. Fixes bug #430262
  • Fix regression with crash in effect stack. Commit.
  • Add preliminary support to copy a keyframe param value to other selected keyframes. Commit.
  • Move timeline tooltips in statusbar. Commit.
  • Update README’s build status. Commit.
  • Add normalizers to MLT thumbcreator, fixing Kdeinit crash. Commit. See bug #430122
  • Effectstack: Add duplicate keyframe(s) button. Commit.
  • Effectstack: select multiple keyframes by shift-click + drag (like in timeline). Commit.
  • Improve grabbing of keyframes in effect stack. Commit.
  • Initial implementation of grouped keyframe operation (move/delete). Select multiple keyframes with CTRL+click. Commit.
  • When calculating a folder hash (to find a missing slideshow), take into accound the file hash of 2 files inside the folder. Commit.
  • Ensure subtitle track buttons are hidden when the track is hidden. Commit.
  • Fix project profile creation dialog not updating properties on profile selection. Commit.
  • Don’t change Bin horizontal scrolling when focusing an item. Commit.
  • Fix composition unselected on move. Commit.
  • Add channel selection to audiowaveform filter. Commit.
  • Fix unwanted keyframe move on keyframe widget seek. Commit.
  • Don’t snap on subtitles when locked. Commit.
  • Show/lock subtitle track now correctly uses undo/redo. Commit.
  • Restor subtitle track state (hidden/locked) on project opening. Commit.
  • Fix qmlt typo. Commit.
  • Fix color picker offset, live preview of picked color in the button. Commit.
  • Implement subtitle track lock. Commit.
  • Add hide and lock (in progress) of subtitle track. Commit.
  • Zoom effect keyframe on CTRL + wheel, add option to move selected keyframe to current cursor position. Commit.
  • Add “unused clip” filter in Project Bin. Commit. Fixes bug #430035
  • Add deprecated label to deprecated effects. Commit.
  • Removed last commit. Commit.
  • Import img sequence added. Commit.
  • Import Window as Widget Feature. Commit.
  • Add libass target for AppImage. Commit.
  • Fix minor typos. Commit.
  • Add menu for subtitle clips. Commit.
  • Various subtitle fixes (moving, allow selecting). Commit.
  • Fix subtitle resize undo. Commit.

As of a few days ago, a new feature in clang-query allows introspecting the source locations for a given clang AST node. The feature is also available for experimentation in Compiler Explorer. I previously delivered a talk at EuroLLVM 2019 and blogged in 2018 about this feature and others to assist in discovery of AST matchers and source locations. This is a major step in getting the Tooling API discovery features upstream into LLVM/Clang.


When creating clang-tidy checks to perform source to source transformation, there are generally two steps common to all checks:

  • Matching on the AST
  • Replacing particular source ranges in source files with new text

To complete the latter, you will need to become familiar with the source locations clang provides for the AST. A diagnostic is then issued with zero or more “fix it hints” which indicate changes to the code. Almost all clang-tidy checks are implemented in this way.

Some of the source locations which might be interesting for a FunctionDecl are illustrated here:

Pick Your Name

A common use case for this kind of tooling is to port a large codebase from a deprecated API to a new API.

A tool might replace a member call pushBack with push_back on a custom container, for the purpose of making the API more like standard containers. It might be the case that you have multiple classes with a pushBack method and you only want to change uses of it on a particular class, so you can not simply find and replace across the entire repository.

Given test code like

    struct MyContainer
        // deprected:
        void pushBack(int t);

        // new:
        void push_back(int t);    

    void calls()
        MyContainer mc;


A matcher could look something like:

    match cxxMemberCallExpr(

Try experimenting with it on Compiler Explorer.

An explanation of how to discover how to write this AST matcher expression is out of scope for this blog post, but you can see blogs passim for that too.

Know Your Goal

Having matched a call to pushBack the next step is to replace the source text of the call with push_back. The call to mc.pushBack() is represented by an instance of CXXMemberCallExpr. Given the instance, we need to identify the location in the source of the first character after the “.” and the location of the opening paren. Given those locations, we create a diagnostic with a FixItHint to replace that source range with the new method name:

    diag(MethodCallLocation, "Use push_back instead of pushBack")
        << FixItHint::CreateReplacement(
            sourceRangeForCall, "push_back");

When we run our porting tool in clang-tidy, we get output similiar to:

warning: Use push_back instead of pushBack [misc-update-pushBack]

Running clang-tidy with -fix then causes the tooling to apply the suggested fix. Once we have tested it, we can run the tool to apply the change to all of our code at once.

Find Your Place

So, how do we identify the sourceRangeForCall?

One way is to study the documentation of the Clang AST to try to identify what API calls might be useful to access that particular source range. That is quite difficult to determine for newcomers to the Clang AST API.

The new clang-query feature allows users to introspect all available locations for a given AST node instance.

note: source locations here
 * "getExprLoc()"

note: source locations here
 * "getEndLoc()"
 * "getRParenLoc()"

With this output, we can see that the location of the member call is retrievable by calling getExprLoc() on the CXXMemberCallExpr, which happens to be defined on the Expr base class. Because clang replacements can operate on token ranges, the location for the start of the member call is actually all we need to complete the replacement.

One of the design choices of the srcloc output of clang-query is that only locations on the “current” AST node are part of the output. That’s why for example, the arguments of a function call are not part of the locations output for a CXXMemberCallExpr. Instead it is necessary to traverse to the argument and introspect the locations of the node which represents the argument.

By traversing to the MemberExpr of the CXXMethodCallExpr we can see more locations. In particular, we can see that getOperatorLoc() can be used to get the location of the operator (a “.” in this case, but it could be a “->” for example) and getMemberNameInfo().getSourceRange() can be used to get a source range for the name of the member being called.

The Best Location

Given the choice of using getExprLoc() or getMemberNameInfo().getSourceRange(), the latter is preferable because it is more semantically related to what we want to replace. Aside from the hint that we want the “source range” of the “member name”, the getExprLoc() should be disfavored as that API is usually only used to choose a position to indicate in a diagnostic. That is not specifically what we wish to use the location for.

Additionally, by experimenting with slightly more complex code, we can see that getExprLoc() on a template-dependent call expression does not give the desired source location (At time of publishing! – This is likely undesirable in this case). At any rate, getMemberNameInfo().getSourceRange() gives the correct source range in all cases.

In the end, our diagnostic can look something like:

    diag(MethodCallLocation, "Use push_back instead of pushBack")
        << FixItHint::CreateReplacement(
            theMember->getMemberNameInfo().getSourceRange(), "push_back");

This feature is a powerful way to discover source locations and source ranges while creating and maintaining clang-tidy checks. Let me know if you find it useful!

The Plasma Mobile team is happy to present the Plasma Mobile updates for March and April 2021. During the last two months, most of the work has been focused on applications. While we continued to improve existing applications making them more stable and featureful, we also worked on new applications, extending the Plasma Mobile app ecosystem. We also made noticeable improvements to the Plasma Mobile shell.

But, before we get into that, we would like to thank Pine64 for their generous donations for every KDE community edition device sold, and their support to our project. We would also like to extend our thanks to you, the owners of PinePhone KDE community edition devices: Your purchase helps us so much.

Aleix Pol i Gonzàlez, President of KDE e.V. says,

Our collaboration with Pine64 is very important for two big reasons: we get a whole new hardware platform that respects our ways to create software and a new organization with a new approach towards hardware production and its integration with the FOSS communities to deliver a great user experience. We are very happy with the work so far and looking forward to more.

Lukasz Erecinski, Pine64 Community Manager,

PINE64 has a long-standing friendship with the KDE Community and KDE e.V. Our cooperation goes all the way back to the days of the original Pinebook, launched in 2016, which shipped with KDE Neon. Currently, the Pinebook Pro and the PinePhone, our flagship devices, both ship with Plasma Desktop and Plasma Mobile respectively. It is fair to say that KDE was and is fundamental to our community’s growth and continued success.

On to the applications and other new things:

NeoChat on mobile


NeoChat switched to a brand new look and is now using bubbles for messages in the chat. Aside from that, Carl made some mobile-oriented improvements. The context menu, when long pressing on a message, now appears as a bottom drawer; and scrolling with your finger in the chat views is now more reliable. He also worked with Noah Davis to completely rewrite the chat input component, making it sleeker and adding transition animations.

Srevin Saju improved the keyboard navigation, making it easy to edit the last message sent by pressing up, among other things. Tobias Fella added the possibility of sending special text reactions by using the /react <text> command. He also improved the notification handling, refactored parts of the NeoChat codebase, and fixed many bugs and visual inconsistencies. He also started working on supporting the Matrix one-to-one audio chat feature and screen sharing with PipeWire.

Elisa album view on mobile


The mobile version of Elisa by Devin Lin announced previously was merged, and is part of the newly released KDE Gear 21.04. Due to the improved mobile version, Mathieu Gallien worked on an Android version using the Android music indexer for discovering the music files. You can download an APK (in beta) from the binary factory.
Koko new improved sidebar


Mikel Johnson and Carl Schwan worked on many improvements to Koko. You can now see the image metadata from Koko and even modify some of the fields. A small image editor was added (using the same library as NeoChat). The folder view was completely rewritten and now allows for navigation on all folders on the phone, not just the Pictures folder. To make it easier to manage a large number of images, Mikel also added a tagging feature allowing for image tagging and filtering of pictures by tag. He also added a favorite collection.
Gestures in Angelfish


Devin Lin added a handy swipe feature to the navigation bar. You can now swipe left and right on it to go back and forward a page.

He also switched the tab page into a drawer, and added a swipe left/right gesture to close tabs.

Jonah Brüchert improved the performance of Angelfish by enabling hardware acceleration in QtWebEngine. This was disabled previously due to stability concerns, but it is now resolved with Qt 5.15.2.

Screenshot of AudioTube


Jonah Brüchert also worked on AudioTube, a new application to listen to YouTube Music. The application is relatively new but is already in a usable state. You can read more about it on his blog post.

AudioTube on the desktop


Plasmatube, a YouTube video player, also saw some improvements. Carl ported it away from mpv to QtMultimedia and added video controls. Linus Jan did significant refactoring, moving the Invidious API handling to an internal library and made it possible to use other Invidious instances.

PlasmaTube on the desktop


Clau Cambra worked on a new application that allows managing countdowns for special dates. This is the app that served as the inspiration to the new Kirigami tutorial. You can find it at

DayKountdown on the desktop

Screenshot of OptiImage


Carl Schwan started to work on an image optimizer based on optipng. In the future, other image optimizers should be supported too.

Kolibri, a mail client

Carl Schwan and Simon Schmeißer started working on an email client using Kirigami. For now, it only allows reading mails, but an email composer is already in progress.

Kollibri mail viewer

KeePass Client

Tobias Fella started working on a KeePass compatible password manager. Currently, it is read only.

KeePass password manager


Devin Lin started work on rewriting KRecorder’s interface.

He redesigned the recording screen and list, and drawers are now used for easier one-handed usage.

Main view
Recording screen


KClock has had a visual overhaul.

Devin Lin switched most of the forms to be drawers on mobile, added keyboard controls to the timer and stopwatch, and also refined the font weights, color and spacing throughout the application.



Tobias Fella and Bart de Vries are working on adding podcast support to Alligator.

Alligator now playing
Alligator Queue
Alligator subscriptions


Devin Lin and Noah Davis were able to locate and fix a longstanding bug in Plasma where the default font does not support light or bold weights. The Plasma Mobile shell and applications are now able to make use of other font weights as it now works without needing to change fonts.

Marco Martin added an initial two-stage notification/quick settings drawer to the top of the shell. Devin further refined the behavior and appearance of the panel, while also refactoring the code.

The lockscreen was improved to be more performant with large amounts of notifications, and now also has more animations for keypad text. Work is also under way to allow the virtual keyboard to be used instead, so that text passwords can be used for logging in.

Marco Martin has also started working on multiple pages on the homescreen.

Fully Open


To make it easier to get started developing your own Plasma Mobile application, Clau Cambra continued to improve the Kirigami documentation, adding a lot of small tutorials about how to use some components. Carl Schwan wrote a more advanced tutorial about how to use Akonadi to build a mail reader.


Carl did some housekeeping and ported the Jekyll website to Hugo, making translation easier. He also added a more complete list of all Plasma Mobile applications available on the homepage.

Monday, 26 April 2021

CMake is a (meta-)buildsystem that handles finding-dependencies and building-things. It’s been around for many years, and has been in use by the KDE community for 14 years. In that time, CMake itself has changed quite a bit: there’s “legacy CMake”, version 2.8, and “modern CMake” which is roughly everything after version 3.0. But even within the 3.0 series there is a slow shift in language and tooling. This means that for released software, the CMake buildsystem “bitrots”, to some extent. I’ll give some examples revealed by the CMake 3.20 release.

It is in some sense “unfair” to complain that some software released in 2013, which claims to need CMake 2.8.0 or newer, that that software needs work in 2021 with CMake 3.20. It is! Still, packagers need to deal with this somehow.

When a CMake update arrives, FreeBSD packagers (like me) will make a branch in the ports tree, land the CMake update in the branch, and then start test-building ports that use CMake. This is called an exp-run in FreeBSD-words. A real exp-run happens on the build cluster, across all supported architectures and supported releases, but poudriere is a tool that can help do it locally, too.

If builds fail during the exp-run, then we fix the relevant ports. That means diving into released software – often released years ago – and figuring out what’s wrong. Then we land those fixes, and try it all again, until all the fallout (failures) has been resolved.

CMake 3.20

There are two major changes in CMake 3.20 that affect older software:

  • Command-line processing is more strict. There’s a handful of build instructions in FreeBSD ports that use the --build and --target arguments to CMake. Older CMake ignores them when they don’t make sense. CMake 3.20 errors out.

    In FreeBSD ports, it never makes sense to use these arguments: --build is for avoiding the generation of a build-system (that is, generating the Makefiles or ninja configuration that we normally use to build). --target specifies what target to build.

    I have removed the instances where this was used. it’s not a failure of the released software, or of CMake; more of a “derp” in packaging.

  • The CMake language is more strict. The syntax of if() and elseif() and else() in CMake has traditionally (er.. “legacy”) been weird, with an additional optional condition. In older CMake, this is valid:
      # things
      # things for b
      # things for c

    I couldn’t tell you what will happen if none of those three conditions is true, and I won’t bother writing out a test. Regardless, multiple else() blocks are now a language error,

  • (related) The CMake language is more strict. It looks like endif() and endfor() and similar end-something constructs were once treated as interchangeable. There is code that does for-if-endfor-endif and apparently it worked; only now has this special form of destructured programming turned into an error.

Keeping Old Stuff Building

Up-to-date software with current releases tends to have fewer issues – even when a change unexpectedly introduces build failures, we can count on the Open Source community to contribute fixes. So GNOME evolution-data-server had fixes in upstream git before I even noticed (and I spotted them only after I’d independently writted roughly-the-same-patch).

Ancient MySQL releases, on the other hand, need new patches. This can be a somewhat frustrating rabbit hole of building old stuff for no other purpose than fixing the old stuff you don’t use anyway.

Patches all end up in the FreeBSD ports collection git tree. Search for “CMake 3.20” for the kind of things that needed updating.

After the Update

Even with best-effort building and patching before packaging is updated, things slip through the cracks. Not every single CMake-using port is detected by my (simplistic) checks, so I forgot to build GNOME evolution even if I did fix the -data-server before. Thanks fluffy@ for chasing that one.

There’s some interesting fallout with pthreads (there are flags getting lost somewhere, PR 255123) and Python (with multiple versions installed, the old- and new-style find modules from CMake find different versions; in CMake 3.19 they found the same versions).

So, on to the next round of updates (I think I also need to land some fixes and features upstream eventually, but that keeps getting pushed to the periphery by other jobs).

KDE Frameworks 5.81.0 for 21.04 Hirsute Hippo is now available in our backports PPA.

Frameworks releases are a mixture of bugfixes, new features, and general improvements to the KDE base libraries.

As such, keen adopters who might like to install this backport can check the changelog to what has been fixed/changed/enhanced.

To upgrade:

Add the following repository to your software sources list:


or if it is already added, the updates should become available via your preferred update method.

The PPA can be added manually in the Konsole terminal with the command:

sudo add-apt-repository ppa:kubuntu-ppa/backports

and packages then updated with

sudo apt update
sudo apt full-upgrade

DEVLOG 2: Another Plasma Panel Bugfix!

Saturday, 24 April 2021

Screenshot of Big Blue Button with doodle (bullseye)
Screenshot of Big Blue Button with doodle (bullseye)

The board of KDE e.V. sat down together (virtually) this weekend once again to do “board things” which means budgets, AGM planning, going over hiring and contracts, checking in with the working groups, and having a tiny bit of fun, too. The official song of this sprint is 2unlimited “Get Ready for This, but we made a playlist (see below).

Screenshot of Big Blue Button with doodle (hats)
Screenshot of Big Blue Button with doodle (hats)

Every day we use KDE’s Big Blue Button and the shared chat and whiteboard to get things done. The whiteboard is for doodles, rarely for presentations.

The board meetings happen roughly every three months – at some point we hope in-person again, because we also share recipes and cooking secrets. This is the last meeting before Akdademy 2021, which will be online as well. At Akademy we’ll have the usual public presentations from the e.V. and another online AGM (annual general meeting). One thing I’m noticing is that – at least as board – we’re getting better at virtual meetings.