Navigate

Features Brushes Journal Studio Contact

Journal What actually transfers between brush formats

Every brush file is the same two things in a different wrapper. Which half survives a move between apps, which half never does, and why.

If you have ever searched can you use Procreate brushes in Krita, or convert procreate brushes to affinity, or how to import brushes into ibisPaint, you have run into the same wall from four directions. This is the map of the wall.

Every brush is two things

Open any brush file from any app — .brush, .brushset, .abr, .sut, .kpp, .apexobrush — and you find the same two components:

The textures. A shape, which is the stamp that gets repeated along your stroke, and usually a grain, which is the paper or bristle texture showing through it. These are images. Nothing more.

The configuration. Spacing, scatter, rotation, size and opacity response to pressure and tilt, taper rules, blending behaviour, wet and smudge parameters.

That split is the whole story. Textures are universal. Configuration is not.

Why configuration cannot travel

A configuration is not a description of a brush. It is a set of inputs to one specific renderer.

When Procreate says spacing is 12%, that number means something inside Procreate’s stroke engine. Krita’s spacing of 12% means something inside Krita’s. The two engines disagree about how a stamp is spaced, how opacity accumulates within a single stroke, and what pressure 0.5 should look like. There is no conversion factor, because there is no shared unit — only a number that happens to land close on one test stroke and drift apart on every other.

Pressure curves are the clearest case. Two apps can both expose “pressure → size”, and still differ in how they smooth raw stylus input, whether they accumulate alpha per stamp or per stroke, and how they taper the end of a line. Copy the curve across and you have copied a shape on a graph, not a feel.

A converter can move your textures. Nothing can move the engine they were tuned against.

What survives, by format

Format App Container Textures out? Config out?
.brush / .brushset Procreate ZIP Yes — PNGs inside No, binary plist
.abr Photoshop Binary Yes, with a reader Partially
.kpp Krita PNG with metadata Yes Krita only
.bundle Krita ZIP Yes Krita only
.gbr / .gih GIMP Binary Yes Minimal by design
.sut Clip Studio Proprietary Not practically No
.apexobrush Apex Olira ZIP Yes Yes, on all three platforms

The pattern: ZIP-based formats let you get your textures back; proprietary binary formats do not. That is the only question worth asking about a format before you invest years of work in it.

The three honest routes

Extract and rebuild. Unzip the source file, pull out the shape and grain PNGs, import the shape as a brush tip in the destination app, put the grain in as a texture, then dial the feel back in. This works between almost any pair of apps and is what every real “converter” does under the hood, minus the last step. We wrote it up in detail for Procreate to Krita.

Re-buy. Buy the pack again in the destination app’s format, if the artist made one. Most did not.

Do not move. Stay where your library is, and accept that the library now chooses your device for you. This is the one most people pick without ever deciding to.

Why nobody is building the converter

There is no technical mystery here. Any competent developer could write a tool that extracts textures from a .brushset and emits a .kpp this weekend. The reason it does not exist as a maintained product is that nobody in the market is incentivised to make leaving easy.

Procreate is not going to publish a guide for exporting to a rival. Krita is free software with no obligation to reverse-engineer a competitor’s binary format, and its own resource pages have rotted to the point where several brush-packs URLs 404. Clip Studio runs the strongest asset marketplace in the category and has every reason to keep .sut where it is. Infinite Painter has no blog at all.

The result is a category where your brush library is the switching cost, and everyone in it is quietly fine with that.

What we did instead

We build a cross-platform app, so the problem showed up on day one as an internal one: the same person opens an iPad in the morning and an Android tablet at night, and the brushes have to be there both times.

The requirement we set for .apexobrush was that a single file has to import identically on iPadOS, macOS and Android — same textures, same curves, same resulting stroke. It is an archive holding the stamp textures and the brush configuration together, and there is nothing platform-specific inside it. You download it once, from us or from anywhere, and import it wherever you happen to be working.

That solves exactly one problem: it means our format never becomes the reason you cannot change device. It does not make your existing Procreate library portable, and we are not going to pretend otherwise.

The honest summary is the one at the top. Textures move. Configuration does not. Choose formats accordingly, keep the source PNGs of anything you make yourself, and treat any brush library locked in a proprietary binary as something you are renting.


Free .apexobrush packs are in the brush studio — no account, no trial clock. If you found something in this piece that is out of date, tell us and we will correct it.


Brushes that travel

Apex Olira uses one .apexobrush file across iPad, Mac and Android. Free packs need no account.

Browse the brush studio →

Something wrong here?

Formats change and vendors move things. If a step no longer matches what you see, tell us and we will fix the page.

Send a correction →