You paid for a pack, or downloaded a free one, and the app will not take it. No error worth reading, or an error that says “invalid file” and nothing else.
This is nearly always one of six things. They are in the order you should check them, which is not the order people usually try — most of the internet tells you to reinstall the app first, and that is the least likely fix and the most expensive one.
1. The file is still a .zip
By far the most common. Brush packs are ZIP archives with a custom
extension — .brushset, .apexobrush, .abr and friends are all containers.
Some browsers and most email clients “helpfully” recognise the ZIP inside and
either rename it to .zip or unzip it for you on arrival.
An unzipped folder is not importable. Nor is a file renamed to .zip.
Fix: find the download and check the actual extension. If it ends .zip,
rename it back to the extension the pack should have. If your browser
extracted it into a folder, re-download and choose “Keep” or “Download
linked file” rather than opening it.
On iOS Safari specifically: check the file in Files before importing. Safari has a long history of appending or stripping extensions on unfamiliar types, and the resulting file looks fine in the download list and fails at import.
2. It downloaded as a web page
If a server does not send the right headers, clicking a download link navigates to the file instead of saving it. What lands on disk is an HTML error page with a brush extension on it.
Tell: the file is tiny — a few kilobytes when it should be megabytes.
Fix: re-download with right-click → Save link as. If it is still small,
the host is misconfigured; tell whoever sold it to you. (This is why our own
downloads set Content-Disposition: attachment explicitly — it is the single
most common brush-store bug and it is entirely the store’s fault, not yours.)
3. You hit the brush limit
Most apps cap the number of imported brushes, and most of them fail quietly when you cross it — the import appears to work and the brushes are simply not there.
Apex Olira caps imported brushes at 60 and tells you when you reach it, which is the behaviour you want but not the behaviour you should expect elsewhere.
Fix: uninstall a pack you are not using and try again. If the import suddenly succeeds, that was it.
4. The pack is for a different app
.abr is Photoshop. .brushset is Procreate. .sut is Clip Studio. .kpp
and .bundle are Krita. .apexobrush is ours. None of them read each
other’s, and no converter exists that meaningfully bridges them — we
pulled several formats apart to
show exactly why.
If the marketplace listing said “works in any app”, the listing was wrong. What is portable is the texture inside, and extracting it is a manual rebuild, not an import.
5. Storage or permissions
On Android, an app that has not been granted file access will show you a file picker that appears to work and then import nothing. On iOS, files sitting in iCloud Drive but not downloaded to the device show in Files with a cloud icon and fail to open.
Fix: tap the file in Files first and wait for it to download locally. On Android, check the app’s file permission in system settings.
Also: a genuinely full disk causes silent import failure in almost every app, because extraction needs somewhere to go.
6. The file is actually corrupt
Last, because it is the least likely, and because you cannot fix it — only identify it.
Test: copy the file, rename the copy to .zip, and try to open it with
your system’s archive tool. A healthy pack opens and shows a manifest.json
or similar plus a set of images. A corrupt one errors here too.
If it fails this test, the download was truncated. Re-download on a stable connection. If it fails twice, the file on the server is broken and it is a support ticket, not a you problem.
The order matters
Work down the list. Reinstalling the app is not on it, because it does not fix
any of the six and it costs you your existing library — which is a
particularly bad trade when the actual problem was a .zip extension.
One structural note
Every fix above except the last is a symptom of brush files being fragile containers passed between systems that were not designed to agree. That is not inevitable — it is what happens when each app invents its own opaque format and leaves the transport to chance.
A .apexobrush is a plain ZIP of readable files: a manifest.json you can
open in any text editor plus the PNGs it references. When something goes
wrong, you can look inside and see what. That does not make it magic, and it
does not make it importable elsewhere. It does mean “invalid file” is a
diagnosis you can make yourself in thirty seconds rather than a dead end.