Help the Krita Foundation! November 2017 Donations €1338 collected 116 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 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.
  • 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.


Is a work in progress at time of writing (november 2017).

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.

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
  • The presets have been moved to their own area in the editor and can be searched and filtered like the normal preset docker
  • 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.
  • 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).

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.


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.
  • A height to normal map filter has been added using the same framework.
  • 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
  • Give a notification when the current preset has changed with the next or previous shortcuts (D7454)
  • fixed selection area when changing between list and details in the brush preset docker.
  • Fixed reference counts with text brushes
  • Added a logarithmic scale switch for the color filter
  • Fixed a crash when closing one of the main windows showing the same document
  • 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)
  • 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
  • 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
  • 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
  • Fix a regression with delegated tools. (BUG 382690 )
  • Add identify for UC-LOGIC based tablets on linux (BUG 363443)
  • 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)