genart.dev
Plugins

Painting

13 media types — watercolor, oil, ink, bristle strokes, flow lines, mark fields, and scene repaint.

Natural media simulation with 13 layer types covering traditional media (watercolor, oil, ink, charcoal, pastel), brush tools (strokes, fills), and advanced bristle rendering with lighting, atmosphere, and wet-on-wet mixing.

Installation

npm install @genart-dev/plugin-painting

Layer Types

Type IDDisplay NameDescription
paint:watercolorWatercolorWatercolor wash with bleed and granulation
paint:oilOilThick oil paint with impasto texture
paint:inkInkInk wash and line work
paint:charcoalCharcoalCharcoal texture with smudging
paint:pastelPastelSoft pastel with paper grain interaction
paint:markerMarkerAlcohol marker with blending
paint:spraySpraySpray paint with splatter
paint:fillFillFlat color fill with edge variation
paint:mark-fieldMark FieldDirectional marks following a vector field
paint:flow-linesFlow LinesSmooth lines tracing a vector field
paint:bristle-dabBristle DabImpressionist short dabs with lighting and wet mixing
paint:bristle-strokeBristle StrokeOil-paint long strokes following vector field
paint:sceneScenePaint-first rendering: re-renders layers below as bristle dabs

Properties

paint:watercolor

PropertyTypeDefaultDescription
colorcolor"#3366cc"Pigment color
opacitynumber0.6Wash opacity (0–1)
bleednumber0.5Edge bleed amount (0–1)
granulationnumber0.3Pigment granulation (0–1)
wetnessnumber0.7Paper wetness (0–1)
layersnumber1Number of wash layers

paint:oil

PropertyTypeDefaultDescription
colorcolor"#cc6633"Paint color
thicknessnumber0.7Impasto thickness (0–1)
brushSizenumber20Brush size in pixels
blendingnumber0.5Color blending (0–1)
texturenumber0.4Canvas texture visibility (0–1)

paint:ink

PropertyTypeDefaultDescription
colorcolor"#000000"Ink color
opacitynumber0.8Ink opacity (0–1)
spreadnumber0.3Ink spread on paper (0–1)
lineVariationnumber0.5Stroke width variation (0–1)
typeselect"brush"Ink type: brush, pen, wash

paint:charcoal

PropertyTypeDefaultDescription
darknessnumber0.7Charcoal darkness (0–1)
smudgenumber0.3Smudge amount (0–1)
grainResponsenumber0.6Paper grain interaction (0–1)
sizenumber15Charcoal tip size

paint:pastel

PropertyTypeDefaultDescription
colorcolor"#ff9988"Pastel color
pressurenumber0.5Application pressure (0–1)
grainResponsenumber0.7Paper grain interaction (0–1)
layeringnumber0.4Color layering buildup (0–1)

paint:marker

PropertyTypeDefaultDescription
colorcolor"#ff4444"Marker color
opacitynumber0.7Ink opacity (0–1)
bleednumber0.2Edge bleed (0–1)
overlapnumber0.3Overlap darkening (0–1)

paint:spray

PropertyTypeDefaultDescription
colorcolor"#000000"Spray color
densitynumber0.5Particle density (0–1)
radiusnumber40Spray radius
splatternumber0.3Splatter amount (0–1)

paint:fill

PropertyTypeDefaultDescription
colorcolor"#336699"Fill color
edgeVariationnumber0.1Edge irregularity (0–1)
opacitynumber1.0Fill opacity (0–1)

paint:mark-field

PropertyTypeDefaultDescription
fieldstring"noise:0:0.1:3"Vector field specification
countnumber500Number of marks
markLengthnumber15Mark length in pixels
markWidthnumber1.5Mark width
taperselect"tail"none, head, tail, both
colorcolor"#1a1a1a"Mark color
colorVariationnumber0.05Color variation (0–1)
opacitynumber0.6Layer opacity (0–1)

paint:flow-lines

PropertyTypeDefaultDescription
fieldstring"noise:0:0.1:3"Vector field specification
countnumber100Number of flow lines
stepsnumber80Steps per line
stepSizenumber2Step distance
lineWidthnumber1Line width
colorcolor"#000000"Line color
opacitynumber0.5Layer opacity (0–1)

paint:bristle-dab

PropertyTypeDefaultDescription
fieldstring"noise:0:0.1:3"Vector field specification
colorsstring'["#3a2a1a","#6b4c2a"]'JSON array of colors
brushWidthnumber24Brush width (4–120)
bristleCountnumber12Bristle count (4–40)
dabLengthnumber20Dab length (4–100)
overlapDensitynumber0.6Overlap density (0.1–2.0)
paintLoadnumber0.7Paint load (0–1)
pressurenumber0.65Pressure (0–1)
textureselect"smooth"smooth, dry, rough, stipple, feathered, impasto
colorModeselect"single"single, lateral, along, loaded, random, split, streaked, rainbow, complementary, analogous, temperature, loaded-knife
lightAnglenumber315Light angle (0–360°)
lightElevationnumber0.5Light elevation (0–1)
shadowDepthnumber0.3Shadow depth (0–1)
highlightStrengthnumber0.25Highlight strength (0–1)
atmosphereStrengthnumber0Atmosphere effect (0–1)
wetnessnumber0Wet-on-wet mixing (0–1)
mixStrengthnumber0.5Mix strength (0–1)
opacitynumber0.65Layer opacity (0–1)

paint:bristle-stroke

Same property set as paint:bristle-dab with these differences:

PropertyTypeDefaultDescription
strokeStepsnumber40Steps per stroke (10–200)
strokeCountnumber300Number of strokes (20–2000)
opacitynumber0.5Layer opacity (0–1)

paint:scene

Re-renders all layers below as bristle dabs. Uses the same brush, lighting, and atmosphere properties as paint:bristle-dab but samples colors from the composite image.

PropertyTypeDefaultDescription
fieldstring"noise:0:0.1:3"Vector field specification
brushWidthnumber16Brush width (4–80)
bristleCountnumber8Bristle count (3–30)
overlapDensitynumber0.8Overlap density (0.2–2.0)
colorJitternumber10Color jitter (0–60)
flowInfluencenumber0.8Flow field influence (0–1)
lightAnglenumberLight angle (0–360°)
atmosphereStrengthnumber0Atmosphere effect (0–1)
wetnessnumber0Wet-on-wet mixing (0–1)
opacitynumber0.6Layer opacity (0–1)

Vector Field Specification

All field-based layers accept a field string shorthand:

  • "noise:seed:scale:octaves" — Perlin noise field
  • "linear:angleDeg:magnitude" — Uniform directional field
  • "radial:cx:cy:diverge|converge" — Radial field
  • "vortex:cx:cy:radius" — Vortex/spiral field
  • "algorithm:channelName" — Channel from sketch algorithm

MCP Tools

ToolDescription
paint_layerAdd a media layer (watercolor, oil, gouache, ink, pastel, charcoal)
get_paint_fieldRead the vector field on a painting layer
update_paint_fieldUpdate vector field specification
generate_field_from_pointsGenerate field via RBF interpolation from control points
brush_strokeAdd brush strokes to a stroke layer
list_brushesList available brush presets
create_brushCreate a custom brush preset
erase_strokesErase strokes from a stroke layer
fill_regionAdd a fill region to a fill layer
update_fillUpdate fill region properties
list_fill_presetsList available fill presets
add_mark_fieldAdd a mark-field layer
add_flow_linesAdd a flow-lines layer
add_bristle_dabAdd a bristle-dab layer
add_bristle_strokeAdd a bristle-stroke layer

Example

{
  "tool": "design_add_layer",
  "arguments": {
    "type": "paint:bristle-dab",
    "properties": {
      "field": "noise:42:0.08:3",
      "colors": "[\"#8b4513\",\"#d2691e\",\"#228b22\"]",
      "brushWidth": 18,
      "overlapDensity": 0.8,
      "texture": "impasto",
      "colorMode": "loaded",
      "lightAngle": 315,
      "shadowDepth": 0.4
    }
  }
}