WIP Brush Conversion Scripts: .brush, .abr, .sut to Krita .kpp

I’ve been working on a set of command-line Python scripts to convert other programs’ brush preset formats to Krita’s .kpp brush preset format. Of course, it’s not possible to fully recreate other programs’ brushes in Krita, and this is only a work in progress.

( This is the same set of scripts I linked here Procreate brush import plugin prototype - #12 by freyalupen and here ABR Brushes in Krita, is there ANY way to get them in? - #12 by freyalupen )

There are three formats with varying levels of functionality here:

  • Procreate .brush/.brushset
  • Photoshop .abr
  • Clip Studio Paint .sut

As well as code to work with Krita’s .kpp and .bundle formats.

The code repository is here: Freya Lupen / Procreate to Krita Brush Converter · GitLab
It’s called “Procreate to Krita Brush Converter” as it’s what I started with, being the only one of the other softwares I have access to.

The repository’s readme explains how to use the scripts. It’s possible to output somewhat-usable Krita brushes/bundles from all three formats, but many things are missing or broken. It’s also possible the scripts will fail completely on different versions of brushes than what I tested (if so, send me the error).

There are also scripts to dump settings from all four formats (including .kpp) as text files, in order to investigate their contents. If you know what the brush’s settings are supposed to be or how to replicate that in Krita, feel free to make suggestions!

19 Likes

Just to reiterate, I can do some additional clean-room reverse engineering, if it’s required.

1 Like

Found this today and got a photoshop brush I wanted to convert from abr. Was able to get the images out of the abr but I can’t seem to get the txt file to compile. I’m seeing:
Error: Expected 8 more bytes in pattern (at 43366450)
(reading the missing bytes)
Error: Expected 8 more bytes in pattern (at 85105124)
(reading the missing bytes)
Error: Expected 8 more bytes in pattern (at 86274278)
(reading the missing bytes)

Those error messages are something I should change to warnings, it’s just a parsing flaw I worked around instead of fixing properly. It shouldn’t affect the output.

What do you mean by “get the txt file to compile”? If the .txt file exists and isn’t empty, it might be difficult to open in a regular text editor because its encoding is UTF-16-BE. That’s something I overlooked, since I was opening it in a code editor. I’ll see if I can change the output encoding to something more easily opened.

Are you able to output a working .bundle file from your brush?

Edit: Pushed fixes for both of those issues, the output text file will now be normal UTF-8 and those error messages are silenced.

Woops, just to clarify, it was me trying to use the abr_parser.py out of curiosity, wanted to see the contents, haven’t tried to Krita yet.

EDIT: Pulled lastest from master and the abr_parser works

Should I open an issue for the brush I’m trying to work with? Getting this error with abr_to_kpp

python ./procreate_to_kpp_converter/abr_to_kpp.py ~/Downloads/WesGardner-2025.abr --output ~/Documents/Krita/abr
### Brush number 0: ------ SKETCHING -------
no paintop, default to Pixel
Name: ------ SKETCHING -------
Switching brushtip type...
set brush_definition type to png_brush
set brush_definition BrushVersion to 2
Dmtr: 10.0 / 32
set brush_definition scale to 0.3125
set brush_definition angle to 0.0
set brush_definition filename to NOTHING.png
set brush_definition spacing to 0.25
Converting to PressureMirror
Creating PressureMirror with False
Converting to HorizontalMirrorEnabled
Creating HorizontalMirrorEnabled with False
Converting to PressureMirror
set PressureMirror to False
Converting to VerticalMirrorEnabled
Creating VerticalMirrorEnabled with False
Traceback (most recent call last):
  File "/home/user/Documents/code/procreate-to-krita-brush-converter/./procreate_to_kpp_converter/abr_to_kpp.py", line 685, in <module>
    main()
    ~~~~^^
  File "/home/user/Documents/code/procreate-to-krita-brush-converter/./procreate_to_kpp_converter/abr_to_kpp.py", line 92, in main
    converter.convertSettings(i)
    ~~~~~~~~~~~~~~~~~~~~~~~~~^^^
  File "/home/user/Documents/code/procreate-to-krita-brush-converter/./procreate_to_kpp_converter/abr_to_kpp.py", line 329, in convertSettings
    (width, height) = self.parser.brushtipSizes[brushUuid]
                      ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
KeyError: 'dd652fdc-34fc-11e2-b3e8-b740a94dac80'

Seems like that brush is referencing a brushtip not contained in the .abr file? I’ve pushed a fix to handle that error.

If you come across more issues, you can just mention them here.

1 Like

Ok, so I loaded the brushes and I noticed that the brush tips as you said didn’t really load properly, however, I recall when I ran your abr_parser script it actually managed to load the images out of the abr successfully and I’m pretty sure some of them are actually textures for the brush tips.

is there possibly a way to make this work between other formats? i found this while trying to search for a way to turn procreate (.brushset, for the one i have) into clip studio (.sut). this is so close to that, and also the closest thing i’ve seen, but idk if that’s possible with this

It’s not possible with these scripts, they only support outputting .KPP brushes. I don’t intend to support outputting any other format, as it would be significantly more difficult than reading them.

1 Like