Brushtily - Inkarnate-inspired Texture Painting & Object Stamping for Tiled

Hello everyone, I am new here in Tiled so I hope I a posting my project in the correct location.

I would like to share my project for Tiled called **Brushtily**, a JavaScript extension that brings freeform texture painting and object stamping capabilities to Tiled Map Editor.

:artist_palette: What is Brushtily?

Brushtily bridges the gap between Tiled’s grid-based workflow and freeform digital painting, inspired by projects like Inkarnate’s intuitive brushing and stamping system. It enables artists and level designers to create organic, natural-looking terrain and textures directly in Tiled.

:sparkles: Key Features

Texture Painting

- **Freeform Brush Strokes**: Non-grid-aligned painting with smooth, natural strokes

- **Custom Brush Textures**: Load PNG/JPG images as brush textures

- **Tileset Tile Brushes**: Use tiles from your tilesets directly as brushes

- **Auto-Smoothing**: Automatically removes hard edges for natural results

- **Multiple Brush Shapes**: Circular, Square, Ellipse, or Diamond

Advanced Brush Controls

- Brush Size (10-500 pixels)

- Opacity (0-100%)

- Softness (0-100%) - Edge feathering

- Texture Scale (10-200%)

- Rotation (0-360°) with rotation jitter

- Position jitter and spacing control

- Professional blend modes (Normal, Multiply, Screen, Overlay, Darken, Lighten, etc.)

- Mask modes (Add, Subtract, Multiply)

Object Stamping System

- **Drag-to-Stamp Workflow**: Easy object placement on ObjectGroup layers

- **Object Library Browser**: Visual browser with thumbnails, categories, and search

- **Automatic Object Placement**: Places objects along brush stroke path

- **Random Variation**: Optional rotation and scale variation for natural placement

- **Smart Mode Switching**: Automatically toggles between painting and stamping modes

- **Descriptive Object Naming**: Objects named based on source files for easy identification

Additional Features

- **Right-Click Erase**: Independent erase brush with separate size and softness controls

- **Fill Mode**: Bucket fill with color tolerance control

- **Pressure Sensitivity**: Velocity-based simulation for natural brush strokes

- **Brush Presets**: Save and load favorite configurations

- **Layer Brush Memory**: Automatically remembers brush texture per layer

- **Native Layer Blending**: Seamless integration between layers

:camera_with_flash: Screenshots

![Brushtily Toolbar](https://github.com/PersistenceOS/brushtily/raw/main/brushtily-toolbar-preview.png)

*Brushtily toolbar integrated into Tiled Map Editor*

:rocket: Quick Start

1. **Download** `brushtily.mjs` from the [latest release]( Releases · PersistenceOS/brushtily · GitHub )

2. **Copy to Tiled extensions folder**:

- **Windows**: `%LOCALAPPDATA%\Tiled\extensions\`

- **macOS**: `~/Library/Preferences/Tiled/extensions/`

- **Linux**: `~/.config/tiled/extensions/`

3. **Restart Tiled** (or extension will auto-reload)

4. Find “Brushtily” in the Tools toolbar

5. Add an **Image Layer** and start painting!

:clipboard: Requirements

- Tiled 1.8 or later

- JavaScript extensions enabled (default)

:bullseye: Use Cases

- **Terrain Painting**: Create organic terrain textures (grass, dirt, sand, etc.)

- **Object Placement**: Quickly populate maps with trees, rocks, buildings, etc.

- **Art Asset Creation**: Generate textures and patterns directly in Tiled

- **Level Design**: Add natural details and decorations to maps

- **Documentation**: Full README with detailed usage instructions

I’d love feedback from the Tiled community! @bjorn - hope this extension is useful!