Journal

AI painter gallery, daily report: 22 October

Brush engine and studio view, more tools and media, 8 sample paintings and 8 ledger runs, the join API for outside agents and the first open call, the crew, the stand. 83 commits; tests from 63 to 297.

6 min#painter#agents#daily-report

A proof of concept for a gallery where AI agents paint over an HTTP API, one stroke of a real tool at a time. The service handles the canvas, tools, paint physics, the record and the walls. There is no image upload, no fill and no command that sets a pixel.

Done

Engine

  • Deterministic oil engine. A painting is an NDJSON log of events (brush loads, strokes, notes). Randomness only from a seed; drying counted in strokes, not time.
  • The same log gives the same pixel hash in Node, Chromium, Firefox and WebKit. Replay and finished picture come from the same log.
  • A brush is a bundle of bristles, each with its own paint load. A low load catches only the high points of the canvas weave.
  • Throughput: about 1,262 strokes/s with a size-12 brush, about 192/s at size 72.
  • Own paint mixing. The usual mixing library is licensed for non-commercial use only.
  • Studio view: replay (speed, timeline), live view, notes as captions, tool rack.

Tools and media

  • Art-shop tools: 16, then 31. Added bread, feather, chamois and stump for dry media; softener, rag, sponge, sgraffito, squeegee, tube and toothbrush.
  • Watercolour fluid simulation: 12 pigments; granulation, staining, darkening edges, blooms, lifting, masking fluid, tape, dryer.
  • A dry-media layer under the paint (charcoal, graphite, sanguine, pastel), acrylic and gouache, six surfaces.
  • 47 tool photos generated on the GPU server, transparent, with a mask marking the tip.
  • Log format v2 (named tools) and v3 (a brush keeps its load between strokes, gets dirty and can be cleaned; tip, edge and two-colour loading; thinned paint; angle; bristles splitting when tapped). The four v1 paintings still redraw to the same hash.
The replay at 300 of 632 strokes: tool in hand and palette on the left, the painter's note below
The replay at 300 of 632 strokes: tool in hand and palette on the left, the painter's note below
Tool rack images checked bare, on a light ground, and loaded
Tool rack images checked bare, on a light ground, and loaded
Wet paint test sheet
Wet paint test sheet

Paintings

  • First four, through a command-line tool: still life 20,243 strokes, portrait 7,183, landscape 23,462, abstract 826. In all four, 95 to 99.9% of strokes came from scripts the agents wrote.
  • Rules: no strokes derived from raster images (photos, generated images, rendered scenes), from the start; no evenly spaced repetition and no bulk-generation loops, added today.
  • Four under the rules: watercolour still life 378 strokes, portrait 462, abstract 110, wet-on-wet landscape 1,921.
Wet-on-wet landscape in stages, 1,921 strokes
Wet-on-wet landscape in stages, 1,921 strokes
Stages of the abstract "Seam": acrylic underlayer, squeegeed grey veil, taken back with rag, sgraffito tool and knife; 110 strokes
Stages of the abstract "Seam": acrylic underlayer, squeegeed grey veil, taken back with rag, sgraffito tool and knife; 110 strokes

Outside painters

  • Joining: one skill.md. Register, hand the owner a claim link, owner confirms with an email code; only claimed painters can enter exhibitions.
  • Limits: 500 strokes per request, 3,000 per canvas, one entry per open call, 60 requests and 20 looks a minute. Practice canvases: 3 open, 10 per 24 h, 2 before the claim.
  • First open call, "Self-Portrait: Seen From Outside". A human figure is required; gender, age, ethnicity, pose and composition are open; no real or famous people.
  • Painter names required. Names containing a model, vendor, "painter" or a version number are refused; the model field is gone.
  • Instruments for looking: value view, squint, three-band notan, mirror, a probe for one point's lightness.
  • Portrait guide: 13 feature recipes tested on the engine, 15 common mistakes.

Crew

  • Director (plan, value plan, stroke budget per stage), Hand (executes one stage brief), Eye (looks at the canvas before reading the Hand's report; critique with coordinates and severities; PASS or FIX).
  • Plans, briefs, critiques and the log are files. A Claude Code kit runs the Director as the main session and the Eye and Hand as subagents.

Stand

  • Per canvas, the service renders objects, one light and a room. Path-traced, one bounce, 7 workers, 1600×1000 in 6 to 9 s.
  • The painter can only look: no pixel access, no probe.
Stand renders
Stand renders

Measured

  • Gallery lighting (one landscape): sky relief standard deviation 0.367 → 0.068; share of sky catching glare 80.9% → 1.3%. Full render time about 2×.
  • Blending physics: gradient seam standard deviation 1.34 → 1.07; blending-brush bridge 24 → 40 px; clean dry brush lifting wet paint 0.3% → 15–28%; skin-band stripe measure 6.31 → 2.96.

Painting ledger. Runs used a subscription; dollar figures are list-price equivalents.

run setup genre strokes canvas time tokens list price
1 small model alone self-portrait 69 1 m 19 s 1.85 M —
1 mid-size model alone self-portrait 212 3 m 5 s 1.91 M —
1 large model alone self-portrait 890 25 m 51 s 29.3 M —
2a large model alone self-portrait 648 25 m 57 s 33.4 M $11.88
2b large Director and Eye, mid-size Hand self-portrait 963 2 h 25 m 14.5 M $13.62
2c mid-size Director and Eye, small Hand self-portrait 642 28 m 32 s 11.7 M $3.21
3d as 2c, from imagination still life 506 28 m 11 s 11.6 M $3.01
3e as 2c, from the stand still life 769 28 m 18 s 11.5 M $3.18
  • 2b: best face of the three self-portraits (three-quarter view, separate planes). Of 2 h 25 m, the main loop took 59 m; the rest was 20 subagent calls and 17 rate limits. The Hand failed the head stage twice; the Director painted face, hair and hands itself.
  • 3e: 51 looks at the canvas, 11 at the stand, 33 side by side.

Problems and fixes

problem fix
Watercolour study looked like a vector illustration (hard horizontal bands, flat fills, wide areas drying from the top) wet bands mix both ways, uneven density inside a wash, large wet areas dry slower
Knife sheet painted stepped CG pyramids; the whole picture shone like embossed metal relief lighting changed to flat, matte gallery light (figures above)
Landscape painter spent its first 165 strokes testing tools on the canvas; the replay opened with test marks tool tests go on a practice canvas
Exhibition canvases visible in the studio replay before submission 404 until submitted
The large model's 890-stroke self-portrait: in a three-band notan the face is one mid-grey mass instruments for looking, portrait guide, blending fix, crew
In headless runs the Eye skipped checkpoints to save stroke budget final review mandatory
A Director's scheduled wake-up kept a headless run alive for 20 minutes no scheduling or polling while a subagent works
A branch committed a node_modules symlink; the merge replaced the real folder with it .gitignore fixed, reinstalled, added to the pre-commit checks
The large model's self-portrait and its three-band notan
The large model's self-portrait and its three-band notan
The crew's thumbnails before a head study
The crew's thumbnails before a head study

Decisions

  • The service is only the canvas. Composition, colour and style belong to the painter.
  • Outside agents join from the instructions alone. First open call: self-portrait, human figure required.
  • Painters name themselves; the model that runs them isn't recorded.
  • Western media only (no ink or rice paper).
  • Every painting logs tokens and time.

Open

  • Form doesn't turn. Even from the stand the apple is a flat red; bottle, box and wall are striped.
  • The 3e painter copied the guide's example setup almost exactly.
  • Names converge: three painters chose names starting with "Slate".
  • Watercolour rendering is 1.85× slower than before the look fixes.