Brush system¶
The brush system is the Designer's painting surface. Six engines produce strokes; thirty built-in presets cover the most common looks; a Library manages your own presets and imported brushes; and the Brush Studio lets you author from scratch. The whole stack is also exposed to Python so you can extend it in code.

The six engines¶
| Engine | Best for | Built on |
|---|---|---|
| Round Stamp | Pencil, marker, hard-edge | Tight rounded nib, no texture |
| Airbrush | Soft falloff, gradients, glow | Gaussian falloff |
| Bristle | Oil, ink, gestural | Multi-tip with per-bristle paint flow |
| Texture | Concept art, photo-based | Repeating texture overlay |
| Pattern | Decals, stamps, stickers | Single non-tiled image stamped along the stroke |
| Wet Mix | Watercolor, smudge, blend | Real wet-on-wet color mixing |
The full engine internals (parameters, math, performance notes) live in Engines reference.
Three ways to get a brush¶
- Library: pick a preset from the Library tour.
- Studio: author your own in the Brush Studio.
- Import: bring in
.abr(Photoshop),.sut(Clip Studio), or.elybrush(native) files via the importing pages.
Where each surface lives¶
| Surface | Where | What it does |
|---|---|---|
| Quick Wheel | Hold B for 0.4 s |
6-engine radial picker; quickly switch engine without leaving the canvas |
| Brush palette panel | Bottom of the toolbox column | 12 color + 12 texture slots; left-click to apply, right-click to manage. See quick-start. |
| Tool Properties dock | Below the View Panel | Engine + preset + size + opacity + dynamics for the active brush |
| Brush Library panel | Window > Brush Library |
Searchable, taggable preset list with thumbnails |
| Brush Studio | Window > Brush Studio |
Full editor: engine params, dynamics curves, texture pick, preview |
| Aether chat | Cmd+/ |
Talk to the agent to make brushes; "give me a soft watercolor wash" |
Stroke pipeline (top to bottom)¶
Input device (mouse / pen / touch)
↓
elysium.brush.engine.apply_dynamics(params, dynamics, sample)
↓
BrushEngine.stamp(canvas, x, y, params, color)
↓
Canvas DisplayList (Skia paths + textures)
↓
wgpu compositor → final pixels
Dynamics is where pressure, tilt, rotation, velocity, and altitude get folded into the stamp parameters. The output is a list of stamps that the engine renders.
Performance defaults¶
- Round Stamp + Airbrush: ~5,000 stamps/sec on baseline GPU.
- Bristle: ~1,500 stamps/sec (more expensive per stamp).
- Wet Mix: ~800 stamps/sec (involves a wet-buffer read each stamp).
- Pattern / Texture: ~2,500 stamps/sec.
These are floors. A modern discrete GPU easily 4-10x's these.
Where to next¶
- Quick start: paint your first stroke in 3 minutes.
- Library tour: the 30 built-in presets.
- Brush Studio: author from scratch.
- Authoring custom brushes: when the Studio is not enough and you drop down to Python.
- Engines reference: every parameter on every engine.