Product · Design & Build

Brushfactory

TypeLive product
RoleDesign & build
StackPython, SQLite, Stripe
StatusIn development

The Problem: If you switch drawing apps, your brushes do not come with you. Every app stores them in its own binary format, none of which are documented, and the settings do not line up one to one. Most converters get around this by flattening the brush tip into a stamp. That throws away the pressure settings and the grain, which are the parts that matter most.

What It Is: Brushfactory reads a brush into a universal format and then writes real settings for the target app instead of faking them. It handles Photoshop, Procreate, Clip Studio Paint and Krita in any direction. It is live now, with three free conversions a month and a paid tier for unlimited use and batch conversion.

01

Four formats, none of them documented

Each app stores brushes differently and none of them publish a spec. Working out what each field does meant writing a file, opening it in the real app, and seeing what changed. I did that a lot. I also put the engine behind a small CLI so I could run conversions without going through the site, which made the testing much faster. MyPaint and Affinity are listed as upcoming on the site, but they are not wired up yet.

Terminal
python main.py inspect  some.brushset
python main.py convert  some.abr --to kpp -o out/
python main.py batch    packs/ --to sut -o bundle.zip
02

The hard part is feel, not settings

Copying the numbers across is the easy half. Two brushes can have the same size, spacing and opacity and still feel nothing alike, because each app interprets those numbers differently and because the grain and the pressure response carry most of the character. I was checking this by eye at first, but I could not stay consistent across four formats and a few hundred conversions, so I started measuring it instead.

03

Measuring drift instead of eyeballing it

I built a harness that takes a brush, converts it to every other format, reads each one back through the real codecs, and compares them to the source. It reports size, spacing, opacity, grain and dynamics for each format and flags anything that moved more than 2%. It also renders a sheet with the tip, the grain and a test stroke for every format, all drawn by the same renderer, so anything I can see in it is real mapping drift and not one app's brush engine looking different from another's.

test_brushes/converted/<brush>/
cohesion_sheet.png     tip, grain and a test stroke per format
cohesion_report.txt    size / spacing / opacity / grain / dynamics
                       with a warning on anything >2% from source
<format>/              the converted files, ready to import and
                       feel-test on a real canvas
04

Saying plainly what doesn't work

The home page carries a table of what carries over, marked either as exact or as matched as closely as the app allows, and behind it there is a longer fidelity report with the support status of each format and the limits written out. Wet media between Procreate and Clip Studio is approximated, tilt and speed dynamics only partly map onto Krita, and Clip Studio resamples textures over 1024 pixels. This probably costs me some conversions, since people can see the rough edges up front. I would rather do that than have someone find out after importing fifty brushes.

05

The rest of it

Accounts with a monthly quota, three free conversions a month before anyone has to pay, Stripe for the paid tier at $7.99 a month, email verification, per-IP rate limiting, and 75 tests that run before anything ships. Uploads are deleted from the server as soon as the conversion finishes. It is deployed on a DigitalOcean droplet. None of this is the interesting part of the project, but it all had to work before I was willing to put the site up.

NextDMARC Network Analysis

Let's work together!

Looking for assistance with a project? Please reach out and let me know how I can help.

Email Me