Help the Krita Foundation! January 2018 Donations €1765 collected 141 awesome people

Krita 4.0 release notes (WIP)

This is a work in progress of the release notes for Krita 4.0. This page will change as the release gets closer. More than likely, the existing list of changes or features will get bigger.

Vector tools enhancements

We have overhauled our vector tools massively in the past few months.

SVG support

One of the biggest changes is that we changed from the Open Document ODG vector format to the widely-used SVG vector format. SVG is a W3C standard that can be opened by many different programs, so we felt that it made more sense to use this as the default format.

You can now open and save SVGs inside Krita. Kra files, when opened as a ZIP will have it’s vector layers stored in SVG.

Improvements and Vector UX changes

We went out of our way to make the tools much more user friendly.

  • For starters, the default tool options is much more organised. It’s now easier than ever to find the fill and stroke, or to transform.
  • The gradient tool has been merged into the default tool.
  • The shape editing tool is now always visible, instead of only when a shape is selected. This kind of smart behaviour worked against the user, as it was hard for a lot of people to tell where the shape editing tool had gone off to. On top of that, the tool has been polished. Parametric shape features are now shown in the tool options of this tool. We also adjusted the way the nodes are drawn for better visibility and added more feedback.
  • The pattern tool is currently disabled until further notice.
  • All drawing tools that could draw on the vector layers now use the active color, brush size and opacity to draw the final shape.
  • You can now copy-paste shapes from and to inkscape directly.
  • Vector layers can be directly exported to SVG via Layers → Import/Export → Export Vector Layer to SVG.
  • The action tied to the pop-up palette will give a relevant submenu for the vector tools.
  • And a ton of vector related bugs have been fixed.
  • Manual: Shape Selection Tool, Edit Shapes Tool


There’s a brand new text tool! The new text tool supports 90% of all SVG 1.1 text features(except glyphs and rotation), and has a new window with all the controls you need to typeset your text. This editor can also be used to change the SVG source as well, allowing for even more fine grained control over the position of letters as long as you know SVG text. With the whole new design, we’ve confidently closed all the bugs of the old text tool. Check what is possible in the manual.

Python scripting

The big chosen stretchgoal of last year’s Kickstarter, python scripting is now part of Krita. We also are including a large amount of scripts with Krita so you can see how it works for examples. You can see some of what we are including below. The scripts are translatable to work in multiple languages.

Delving into a little tech-talk: Python was implemented by making a general library for the bindings, and then have a sip file to turn those into python bindings. What that means practically is that someone could implement other scripting languages pretty easily if they are willing to put in the work.

Plugin Manager – Managed via settings->Configure Krita->Python Plugin Manager. Activated plugins can be accessed via the tools->scripts.

From experience we know that maintaining a scripting plugin can be quite difficult. For that reason we’ve chosen to take several wishes and to turn them into python scripts. This allows us to make sure python scripting is useful and test it against bugs, while providing good example scripts for users.

Let’s take a look at some of them (there are more than the ones listed):

Internal Scripting Console (python script)

The most important of these plugins is a small python console, written in python. This console will allow you to run scripts in Krita on the fly. Important for when you are testing things, or for when you just want to write a small script.
The python editor is equipped with syntax-colorization and a small debugger to tell you when your code does not make sense. It does not have code-completion.

Assign Profile to Image (python script)

This plugin allows you to assign instead of convert a color to a given color space. Such a feature was missing from Krita proper, and we imagine it is one of those things someone might want to use in scripting, so hence it’s incarnation as a python script.

Ten Brushes (python script)

Assign specific brush presets to shortcuts. You can do this with dragging and dropping the preset into the shortcut slots. Of course you can open the script up and modify how this works to your heart’s desire!

Quick Settings Docker (python script)

Quickly change between set brush sizes, opacity, and flow values…similar to how other applications do it.

Comic Project Management Tools (python script)

A bigger plugin used for managing multiple pages for a comic project, and the best example of how to handle common tasks in pipeline scripts, like opening, saving, cropping, scaling and more batch tasks. There is a lot of documentation to go with this, so don’t hesitate to open any of the scripts us to take a look.

Colorize mask tool:

A new tool that simplifies coloring intricate line art such as comic art has been added to Krita. With the colorize mask, you can fill a line art with a few quick strokes and have Krita figure out how to fill it for you. Manual: Colorize Mask.

Palettes and new color palette fileformat:

Krita has access to six different color models and four different bitdepths, yet the palette docker and its file format could only handle 8bit sRGB. It is natural, as the GPL(that is, Gimp PaLette, not Gnu Public License) file format was designed in a time when anything more seemed like decadence.

However, that time was a long while ago. So we’ve finally taken the plunge and designed a new fileformat, consisting, yet again, from a zip file with an xml inside(We are nothing if not consistent!). This fileformat, KPL, can store any color that Krita can handle. Furthermore, changing the fileformat also allowed another change: It is now possible to group colors in Krita!

On top of this new file-format, Krita can also load swatchbooker(SBZ) palettes as well as Scribus’ xml palettes, both courtesy of L. E. Segovia.

With that, of course, the palette docker has been improved with drag and drop support, color renaming, color grouping and more!


Improved brush editor user experience

The Brush Settings had a number of user experience changes and features added to make it easier to use and understand

  • Easily rename brushes. Look for the pencil icon in the brush editor
  • Overwriting brushes now keeps the current preview image.
  • Creating a brush brings up a new dialog that allows you to modify the preset image or load a custom image
  • The lock settings are more visible when they are enabled by each option
  • You can collapse/expand the presets, settings, and scratchpad areas. This was added to help people with smaller monitor sizes
  • Added a set of curve presets when working with brush editor settings such as S curves. The buttons are underneath the curve area
  • The effect of curves can now affect each other in different ways using different algorithms (seen at the bottom of the curve setting).
  • The brush editor has as preview area for you to see a live update as you are changing settings. This should make creating and editing brushes easier than only using the scratchpad. Note: There are a couple brush engines that do not have a preview because of technical limitations (shape and quick).
  • When creating brush presets, there is a brush icon library that can be used as a base. These are resources that you can customize in the application’s shared area.

Brush sizes beyond 1,000 pixels

You can now set Krita to use Brush sizes beyond a 1000 pixels, up to 10.000! This requires a restart. Though, be careful with the big sizes as a 10.000 pixel brush is about as heavy as copy-pasting an image of 10kx10k at the bitdepth of the image you are painting on. It might cause out-of-memory errors.

Multithreaded brushes

Lag is always a big topic, we have spent nearly every year on improving performance for Krita. This year’s big performance project was multi-threading the brushes. This means that if you have a multiple core processor, which most laptops bought in the last fifteen years have, Krita is now smart enough to let each of those cores calculate the dabs seperately and also have them work together to draw the dabs onto the canvas. You can even decide how many cores Krita will try to use for this in the performance settings!

As of current writing these changes only affect the pixel brush engine, with the default mask being the fastest.

Masked Brushes

But wait, that’s not all! We also implemented the masked brush! Starting out as a kickstarter stretchgoal named ‘stacked brushes’, masked brush allows you to select a second brush tip, and define size, rotation, mirroring, and scatter for it as well as decide how it should blend with the main brush.


On top of the changes introduced in the 3.x series(like accessing the xml directly)

  • A new edge detection filter has been written. It supports multithreading(which means it works with filter layers as well as filter brushes), and has several options to choose between algorithms, strength and even a special toggle to let it be applied to the alpha channel for cool fringe effects. Manual: Edge-detection
  • A height to normal map filter has been added using the same framework.
  • Old edge detection and brightness/contrast curves have been removed.
  • The gradient map filter has been changed to create gradients on the fly and now stores this filter properly inside the kra file.


  • File layers now can have the location of their reference changed.
  • A convert layer to file layer option has been added, that saves out layers and replaces them with a file layer referencing them.

Improved saving:

Not just was the Kra file format adjusted to use svg internally instead of ODG, we also really overhauled the saving system:

Warnings when saving images without layers

We implemented a passive warning system that will inform you which features are active in the document but cannot be saved to the chosen file format. Furthermore, the dialog will allow you to save to KRA as well. This was inspired by the following:

“Help! I had an image with layers, and I saved it to PNG, and now Krita refuses to load the layers! How do I get them back?”

This is a question that comes up surprisingly often. More experienced readers will know that the problem is that file formats like PNG don’t save things like layer data. This is why we have working file formats like Krita’s KRA. We also added an option to allow you to save a copy of your work as a KRA in this situation.

Krita is not the first Free Open Source Software to attempt to solve this peculiar issue. The other attempt had as a solution to force users to save to the working file format of the application, and have them explicitly use the export to save to other file formats. People did not like this solution very much.

Background saving

When Krita auto saves in the background, you don’t have to worry about the small freezes that previously happened. This also works when exporting animation and allows you to work while exporting.


Pixel grid

Thanks to a rogue patch by Andrew Kamakin, you can now see a pixel grid when you zoom in past 800% (the zoom percentage and color are configurable). Great for precision art where it is hard to tell where pixels start and end.

Isometric grids

There is a new isometric option in the grid docker where you can specify the angles and spacing for each axis. You can change the angles and display with how they are shown like the existing grid options.

Changes to the numerical input

The variables vh and vw have been added to the numerical input, they represent the width and the height.

Resize thumbnails dynamically

A new option allows you to resize your thumbnails in the brush settings and preset dockers. The thumbnail size is saved for future use. Good if you want to see a lot of brush presets in list view.

Improvements to the pop-up palette

We have made a few changes to the pop-up palette after feedback

  • A quick method for zooming with a slider
  • A quick canvas rotation wheel around presets
  • quick buttons for mirroring and canvas-only, and resetting zoom to 100%

Bug fixes/changes

  • FEATURE: let toggling SHOW IN TIMELINE for multlayer selection (BUG 377730)
  • FEATURE: save lastly visited directory in the Reference Images docker
  • FEATURE: Instant Preview now has a threshold that is associated with each preset. Instant preview will not be turned on unless the brush size is greater than the threshold. This helps with smaller brushes that created lag when using Instant Preview.
  • Intel GPUs will default to using the ANGLE software rendering. They were creating too many issues with OpenGL turned on.
  • Give a notification when the current preset has changed with the next or previous shortcuts (D7454)
  • FEATURE: Change the color of your asssistants in the tool options
  • Condensed the Configure Krita UI to make it usable for people with smaller monitor screens
  • Improved assisstant tool UI. This includes bigger icons and anhor points to work with.
  • FEATURE: The animation dialog can now export out custom heigh, width, and FPS than the source image
  • fixed selection area when changing between list and details in the brush preset docker.
  • Allow document tabs to be movable/sort able (BUG 388268)
  • Fix erase mode not returning to brush mode when returning to the brush tool (BUG 380340)
  • File size and modified status appears in the title area for each tab
  • Add a “Hard Mix (Photoshop)” blending mode
  • The “document name” field was moved to the Content tab in the new file dialog
  • Fixed reference counts with text brushes
  • Added a logarithmic scale switch for the color filter
  • PSD: implement loading and saving of layer styles for group laters (BUG 387708)
  • Add an invert button to the levels filter
  • Fixed a crash when closing one of the main windows showing the same document
  • Fixed saving GBR files (BUG 382068)
  • Fixed placeholder position of window title
  • The reference image docker now saves the last folder that was used
  • fixed with nested auto-saves (T6542)
  • Improve feedback when auto-saving document (T6542)
  • Disable the brush size shortcuts when the brush size slider is disaled (BUG379958)
  • Brush preset names that contain an underscore character will display as a space on the UI
  • fixed saving/loading of the currently active not to kra files (T6542)
  • fixed correct set up of the canvas switched
  • fixed an issue with saving transaparency to png and jpg file
  • Render animation UI has been updated to be easier to understand.
  • label and visibility UI updates to brush smoothing, magnetism, and assistant tool options.
  • Make the color selectors a bit faster by improving the algorithm of checking IDs
  • theme icons to the file new dialog with the various template types
  • Add icons for brush presets to the vector symbol library (T6478)
  • attempt to restore OpenGL 2.1 support fo non-OSX  systems (BUG 282281, 363770)
  • fix bug with color to alpha filter when creating a mask (BUG 362626)
  • fixed updating the shader when OCIO is activated after being deactivated
  • fix a set of OCIO related bugs (BUG 373481)
  • SSE chipset speed up with handling division (8dc92f7dee7dc4e32e22724843669a25f444fa39)
  • Do not crash if a filter does not have a default configuration (BUG 383456)
  • Don’t set the swap directory to an empty string if the user pressed cancel
  • Fix a delay before starting a stroke with a huge texture (BUG 386642)
  • reorder and rename locks and visibility menu options in layer docker context menu to be more consistent
  • Added a reset button for the HSV adjustment dialog
  • Removed the chalk brush engine. It was the base for other engines and is not needed
  • Change the default author prifle to Anonymous (T6627)
  • Added a reset button to the per channel filter
  • Fix a hangup when cancelling exporting a PNG image (T7194)
  • Fix NaN values for bristle brushes (BUG 344437)
  • Fix a regression with delegated tools. (BUG 382690 )
  • Add identify for UC-LOGIC based tablets on linux (BUG 363443)
  • Splash image template update UI on loading Krita
  • Fixed rounding error in wrap around mode when painting (BUG 367943)
  • fixed workaround for switching subwindow to tabbed mode when one window is always on top
  • fixed resetting Instant Preview cache when changing visibility of layer (T6652)