How to Create Custom Brush Presets in ArmorPaint: A Complete Guide
ArmorPaint allows you to save any brush configuration—including radius, opacity, hardness, and masks—as a reusable JSON preset through the Export dialog, storing it in data/export_presets/ for quick reuse or sharing across machines.
Custom brush presets in ArmorPaint streamline repetitive texturing workflows by letting you capture and reload complex tool configurations instantly. According to the armory3d/armorpaint source code, the application serializes brush states to portable JSON files that can be shared between projects and users. This guide walks through the exact implementation details, file paths, and functions that power this feature.
Creating and Saving Custom Brush Presets
Creating a preset involves three stages: configuring the brush, triggering the export UI, and writing the JSON file to disk.
Step 1: Configure Your Brush
Start by defining the brush characteristics you want to preserve. In the Brushes tab, add a new brush using the + button or select an existing one. Adjust parameters like radius, opacity, hardness, tilt, and mask settings. Paint on the canvas to verify the behavior before saving.
Step 2: Open the Export Context Menu
To initiate the export process, hover over the brush thumbnail and right-click to open the context menu. According to paint/sources/ui/tab_brushes.c, the tab_brushes_draw_context_menu() function (lines 41-44) handles this interaction:
void tab_brushes_draw_context_menu() {
i32 i = _tab_brushes_draw_i;
if (ui_menu_button(tr("Export"), "", ICON_EXPORT)) {
context_select_brush(i);
box_export_show_brush(); // Opens the export-preset dialog
}
}
Selecting Export calls box_export_show_brush(), which launches the preset naming dialog defined in paint/sources/ui/box_export.c.
Step 3: Save the Preset to Disk
After naming your preset in the Export dialog, box_export_save_preset() serializes the brush data and writes it to your project directory. As implemented in paint/sources/ui/box_export.c (lines 191-200), the function constructs the file path and saves the JSON:
void box_export_save_preset() {
char *name = box_export_files->buffer[box_export_preset_index];
char *path = string("%s%sexport_presets%s%s.json",
path_data(), PATH_SEP, PATH_SEP, name);
iron_file_save_bytes(path,
sys_string_to_buffer(box_export_preset_to_json(box_export_preset)), 0);
}
The preset is stored at data/export_presets/<preset-name>.json, making it a plain-text file that can be edited externally or version-controlled.
Loading and Reusing Brush Presets
Once saved, presets persist in the Export Presets panel and can be applied to any brush instance.
Accessing the Export Presets Panel
The preset list is populated by box_export_fetch_presets() defined in paint/sources/ui/box_export.c (line 208). Open the Export tab in the UI to view all available .json files in the data/export_presets/ directory.
Applying a Saved Configuration
To load a preset, select it from the list and click Load (or double-click). The box_export_parse_preset() function reads the JSON and applies the stored values to the active brush:
void box_export_parse_preset() {
char *file = string("export_presets/%s.json",
box_export_files->buffer[box_export_preset_index]);
/* … JSON is parsed and applied to the brush … */
}
This overwrites the current brush settings with the radius, opacity, and mask data stored in the preset file.
Sharing Presets Between Machines
Because ArmorPaint stores presets as JSON files in data/export_presets/, you can manually copy these files to another machine's equivalent directory to share custom brushes. The serialization logic in paint/sources/io/export_texture.c (specifically box_export_preset_to_json()) ensures compatibility across different installations using the same version of the software.
Summary
- Brush presets in ArmorPaint are JSON files stored in
data/export_presets/that capture radius, opacity, hardness, and mask settings. - Export workflow: Right-click any brush thumbnail to trigger
tab_brushes_draw_context_menu(), then usebox_export_save_preset()to write the file. - Import workflow: Use
box_export_fetch_presets()to list available presets andbox_export_parse_preset()to apply them. - Cross-platform sharing: Copy JSON files between machines manually since the format is plain text and human-readable.
Frequently Asked Questions
Where are custom brush presets stored in ArmorPaint?
Presets are saved as individual JSON files in the data/export_presets/ directory within your project folder. The box_export_save_preset() function in paint/sources/ui/box_export.c constructs this path automatically using path_data() and the preset name you provide.
Can I edit a brush preset manually after exporting it?
Yes. Because box_export_preset_to_json() (defined in paint/sources/io/export_texture.c) serializes brush data to standard JSON, you can open any file in data/export_presets/ with a text editor to tweak values like radius or opacity before reloading them via box_export_parse_preset().
How do I transfer brush presets to another computer?
Copy the .json files from your data/export_presets/ folder to the same directory on the target machine. Since the preset format uses platform-agnostic JSON, ArmorPaint will recognize and load them immediately via box_export_fetch_presets() without additional conversion.
What brush parameters are included in a preset?
According to the brush data structures in paint/sources/util/util_brush.c, presets capture radius, opacity, hardness, tilt settings, and any active mask configurations. When you invoke box_export_show_brush(), the entire state of the selected brush is serialized, ensuring identical behavior when the preset is later loaded.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →