After 5.0’s big resource rewrite and 5.1’s general improvements, we decided that Krita 5.2 should focus on tackling some of the biggest pain points in Krita. As such, this release contains a lot of background work that we hope to build future improvements on top of, as well as a healthy assortment of new features and fixes!
In order to fix various audio-visual sync issues when playing animations with attached audio, Emmet and Eoin reworked much of the animation playback to use the MLT framework behind the scenes. MLT is a proven and flexible framework used by video editing programs like Kdenlive and designed with frame-by-frame synchronization in mind, and should help Krita animators feel confident that their key frames will stay lined up with their voice work or background music, both inside of the program and in their exported animation videos.
Speaking of the video export option, FFmpeg is a massively important program that manages (among other things) rendering and conversion of audio and video formats. Previously, Krita required users to point to an FFmpeg executable somewhere on their system in order to use many of the features pertaining to video, such as animation video export, video import as animation, and the Recorder Docker for recording your painting sessions. This was mostly good enough for studio use, but it was still difficult to set up for users who aren’t that technical, and almost impossible to do on locked down systems like Android or even a school computer. To make this better for almost everyone, we spent some time to include a basic build of FFmpeg into Krita itself, which should include “out-of-the-box” support for every free and open container and codec format under the sun. (Along with Emmet and Eoin, big thanks to Amyspark, Ivan, Sharaf and Dmitry who put in a lot of effort to help get every possible format building and working across various platforms.) Oh, and by the way, Krita continues to support the use of alternative FFmpeg binaries in the rare case that you need to additional features that we aren’t able to provide.
⚠️ Note: As of the writing this, animation export via FFmpeg is sadly still not working on Krita for Android due to restrictions of the platform itself, but we are looking for solutions to this going forward.
Because our original one didn’t give artists enough control over the underlying text (making it hard to use and extend, as well as write a better text tool on top of), Wolthera completely rewrote Krita’s text layout engine.
With the new layout engine, we can handle everything the old engine could, as well as text-on-path, vertical text, and wrapped text and text in shape. We can now also access OpenType features as well as render emoji (bitmap and colrV0 types) (MR 1607, MR 1767).
This was no small feat and is only just laying the foundation for more improvements to come! For Krita 5.2, you’ll still have to use the SVG code editor to access these new features, but for Krita 5.3 we’ll be working on the text tool proper, making it on-canvas and allowing you to configure the new features with menus and presets.
Dmitry Kazakov overhauled the cumulative undo feature (MR 1780), this feature allows merging undo operations, which is useful when painting many strokes. We’ve simplified the code and made the options more intuitive to use.
The ability to anti-alias the results of the Sketch Brush Engine has been added by Przemysław Gołąb (MR 1425).
Freya Lupen added the ability to transform all selected layers at once with the transform tool (MR 1792).
Deif Lou has added a new mode to the fill tool: Fill areas of similar color (MR 1577). In addition, both the fill tool and the enclose fill tool have gained Stop growing at the darkest and/or most opaque pixels and Fill all regions until a specific boundary color (MR 1549, 1560), as well as a toggle to use the same blending mode as the brush tool, or to have its own (MR 1749).
The Contiguous Selection Tool also received the same selection extending option as the Fill tool (MR 1549), and the ability to set the opacity of the selection decoration (MR 1697). Furthermore, the selection decoration has been made DPI-aware (MR 1774).
Several new actions have been added:
Mathias Wein brought us a ‘Wide Gamut Color Selector’. This selector almost the same as the advanced color selector, except it’s capable of selecting colors in wide-gamuts instead of just sRGB. We eventually want to remove the Advanced Color Selector in favor of this one, when we’re sure we haven’t lost any functionality (MR 1600).
The Layers docker got some extra display options:
We changed how CMYK blending modes work (with a toggle in the config), (MR 1796), this aligns the blending modes to the way Photoshop handles blending modes in CMYK, simplifying exchange of PSD files with clients that require CMYK PSDs.
Rasyuqa A. H. has been improving the JPEG-XL saving and loading code, implementing CMYK for JPEG-XL, improving compression by giving the JXL library more color space information, better metadata handling and support for saving and loading raster layers to JPEG-XL, (MR 1656, 1693, 1673, 1722, 1795). He also improved WebP compression (MR 1785), as well improving ICC transfer characteristic code (MR 1667 and 1690).
One of the other big technical updates we did was to rewrite the brush settings code to work with the library Lager. Our old code had the brush presets and the widgets entangled in increasingly convoluted ways, which made it hard to extend the settings. We hope to use this work as a basis to redesign the brush settings widget (MR 1334).
Wrap around mode can now be limited to vertical or Horizontal direction, making it simpler to creating looping backgrounds.
And that’s it! We hope that Krita 5.2 has a little something to help everyone make art.
Finally, a massive thank you to the everybody involved, including all of our contributors, development fund members and, of course, our community of artists. As an open source and community-driven project, Krita simply wouldn’t be what it is today without an entire community of people testing, coding, writing documentation, creating brushes, translating, chipping in, spreading the word, and generally supporting the project however they can.
And if you’re reading that wondering if you can help too, don’t hesitate to get in touch–because there’s always more to be done on our mission to make a better tool for every human artist.