Brushfactory
The Problem: When you switch drawing apps, your brushes get left behind. Every app stores brushes in its own undocumented binary format, and their settings rarely line up one-to-one. Most converters cheat by flattening the brush tip into a static stamp. There is a real need for artists to keep functional, living brushes when moving between programs, so I built Brushfactory to fix this.
What It Is: Brushfactory reads a brush file into a universal format and writes native, working settings for the target app instead of faking them. It handles Photoshop, Procreate, Clip Studio Paint, and Krita in any direction. The live site offers three free conversions a month, with a paid tier for unlimited use and batch conversion. I am continuously adding new formats based on user demand.
Reverse-Engineering Undocumented Formats
Each app stores brushes differently, which meant decoding undocumented binary structures by writing test files, opening them in the target app, and documenting the deltas. I handled all the research and validation, then directed Claude to write the parsing and encoding code. I also had it wrap the conversion engine in a CLI tool, speeding up testing by letting me run conversions directly from the 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.zipThe Hard Part Is Feel
Copying numerical settings is only half the battle. Two brushes can share identical size, spacing, and opacity values yet feel completely different on the canvas. Each app interprets math differently, and features like grain textures and pressure response carry most of a brush's character. Manual visual inspection wasn't consistent enough across four formats and hundreds of conversions, so I shifted to automated measurement.
Measuring Drift
I built a testing harness that takes a source brush, converts it to every other format, reads each output back through the real codecs, and compares them against the original. It checks size, spacing, opacity, grain, and dynamics, flagging anything that drifts more than 2%. It also renders a comparison sheet containing the tip, grain, and a test stroke for every format. Because everything is rendered through a unified engine, any visual discrepancy represents actual mapping drift rather than differing app UI rendering.
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 canvasTransparent Support Status
The homepage features a support table showing what carries over—either as an exact match or as close as the target app allows. A deeper fidelity report outlines support statuses and format limitations. For instance, wet media between Procreate and Clip Studio is approximated, tilt and speed dynamics only partially map onto Krita, and Clip Studio automatically resamples textures exceeding 1024 pixels.
Building for the Future
Brushfactory provides a solid foundation proving that cross-platform brush parity is genuinely possible. My current focus is refining edge cases and expanding format support. Long-term, I plan to evolve the platform into a marketplace where digital artists can buy and sell brushes for all platforms simultaneously.