The setup: Secondhand UFactory xArm 7. A size-4 round watercolor brush in a 3D-printed compliant side mount (leans roughly 16° from the paper). A cheap 24-well tray for paint, two water wells and a sponge for cleaning, 300×300 mm paper held down by magnets. Overhead camera with a ChArUco solve for the paper plane; brush-tip height from a touchscreen contact station. Motion is planned and executed by an AI coding agent driving Python stack (path planning, FK preflight against the current tool, safety gates, logging).
Operating a brush is tricky. It's is a soft, tilted, wet tuft, and the mark depends on shaft tilt, rotation about the shaft, depth, and how much pigment and water is loaded. None of that is observable from the controller.
This particular run had 16 paint pickups, 96 palette circles (six per load), 8,437 waypoints, about 32 m of arm travel for 28.8 cm of painted line, 31 minutes wall-clock.