/PB27 — a robot learning to draw

PB27 is my drawing practice with a robot arm, in a home studio in Berlin. A UFactory xArm 7 picks up pens and brushes, finds the paper with its cameras, and puts real ink and paint on it, one checked stroke at a time.

All of the software is written by coding agents, mostly OpenAI's Codex, with Anthropic's Claude Code doing more over time. They also operate the arm: they prepare a drawing, run it, watch the cameras and the controller, and leave a receipt. I set the direction, build the physical rig, and judge the results.

xArm 7/7 axes

Berlin/since Jun 2026

Codex/Claude Code

Pen/watercolor/paper

Drawings from the studio

Recent pieces, filmed from above. Each clip compresses a real drawing session into a few seconds and lines the pen's touchdowns up with music written for it. The robot doesn't keep time; the edit does. Tap the speaker to hear one.

Clawd 374746

26 Sep 2026

A6/2 pens/1,558 taps

//Claude Code's mascot, dithered into pen taps over about 75 minutes. Claude (Opus) designed the stipple, drove the arm, then wrote the chiptune in code and cut the video.

Meridian bands 4127

26 Sep 2026

A6/2 pens/116 strokes

//Azure first, then grey: 31 minutes of drawing. In the cut, the arm's own steady rhythm is locked to the tempo, so every touchdown lands on a beat.

Still life 395588

26 Sep 2026

A6/2 pens/348 strokes

//Drawn the way a person sketches, one object at a time: bottle, wall, second bottle, bowl, jar, then the orange table. About an hour, set to a kalimba waltz written in code.

Row Displacement 404

22 Aug 2026

Postcard/2 pens/697 strokes

//381 black field strokes, then 316 orange glitch strokes on one shared registration. Day 005 of the robot's diary: “straight lines can be quite fun too!”

Dune Sea 2653

21 Aug 2026

Postcard/2 pens/168 strokes

//64 black dune contours, then 104 yellow wind ripples, registered across the pen change to under a millimetre. 67 minutes in 20 seconds. Designed by Claude Fable, run by Codex, edited by Claude Opus.

Faces Plate 347826

16 Aug 2026

Postcard/2 pens/327 strokes

//Six faces from a JavaScript sketchbook, after Mannay's coded doodle faces. Claude wrote the generator, I chose the seed and layout, and Codex handled registration, calibration, path checks and the run.

Written and run by coding agents

I don't write PB27's software by hand. Codex has written most of it: camera capture and calibration, kinematics and path planning, collision checks, logging, even the OpenSCAD for the printed grippers and tool stations. Claude Code writes many of the generative sketches and cuts the videos.

Both agents read the same rulebook: standing instructions about safety limits, what counts as evidence, and how to hand work to the next session. Motion goes through deterministic executors rather than ad-hoc commands: a route runs only after it passes its checks, and a hardware emergency stop sits outside all of it.

285k+

lines of Python and TypeScript, all written by agents

1,100+

commits since May 2026

300

generative systems in Art Lab, my browser sketchbook

< 0.2 mm

brush-tip drift at new angles, from three uncalibrated cameras

I let Codex operate a robot arm

3 Aug 2026

Codex/GPT‑5.6 Sol

I gave Codex the arm and a photo of a ginkgo leaf. It spent a while coding, planning and calibrating, then drew it: 256 strokes, 3,897 points and 11.5 m of pen-down travel in about 65 minutes, ending with its own clean shutdown checks. The video includes its progress reports from the terminal.

A brush tip from three uncalibrated cameras

8 Sep 2026

Codex/GPT‑6 Astra

No intrinsics, no extrinsics. It nudged the arm, learned how each camera sees motion, solved the brush tip's 3D offset and checked it at new angles: under 0.2 mm of camera-measured tip movement, from one prompt and a short follow-up.

The first watercolor run

1 Sep 2026

Codex/GPT‑5.6 Sol

16 paint pickups, 96 palette circles, 8,437 waypoints and about 32 m of arm travel for 28.8 cm of painted line, fully planned, checked and executed autonomously. Brush angle, twist, pressure and pigment all change the stroke.

Shorter dev loops

The agents also build their own instruments, so an idea gets from code to paper faster.

Art Lab

The browser sketchbook: generative systems with live parameters, exported as SVG for the arm.

Shop viewer

Every 3D-printed part of the rig, browsable in 3D before it goes to the printer.

From sketch to sheet

  1. 01

    Sketch

    A generative system in Art Lab outputs SVG paths. I choose the seed, the composition and the pens.

  2. 02

    Register

    Cameras find the sheet and its magnets. The drawing is fitted to the paper and kept clear of no-go zones.

  3. 03

    Check

    Every route, for every pen, is swept through a digital twin of the arm, tool stations and table before anything moves.

  4. 04

    Draw

    The arm takes a pen from a magnetic tool station and draws stroke by stroke while the agent watches the controller.

  5. 05

    Record

    Photos, traces and a receipt for every run. A ledger logs each physical change, so stale calibrations are refreshed before they are trusted.

from the ledger

{"event_type": "paper_retape", "note": "Replaced 300x300 mm magnetic drawing paper after PB29 Phyllotaxis 63276; fresh vision XY required"}

{"event_type": "camera_exposure_change", "note": "Locked overhead exposure reduced for reflective magnetic paper detection"}

{"event_type": "nib_change", "note": "Nib adjusted before cone TCP recalibration; tool TCP XY and paper contact Z require revalidation"}

How it got here

Apr – Jun

2026

  1. PB29 begins

    My painting practice picks up a robotics strand: which arm, which brushes, and whether a machine can make a gestural mark.

  2. The arm arrives

    A UFactory xArm 7 in the home studio. Power, safety wiring and bring-up, then the first calibration and drawing tools on 30 June.

July

2026

  1. First public sketches

    Claude and Codex make quick sketches with the arm, and you can tell who drew what at a glance.

  2. Hands on the arm

    A Work Louder pad becomes a manual jog controller.

  3. “Kind of decent”

    One run logs 182 contact strokes and 6.45 m of drawn travel. That was my verdict, written into the ledger.

August

2026

  1. Codex draws a ginkgo

    256 strokes in 65 minutes, planned and run by Codex. On r/codex the video reaches 180K views and 1.2K upvotes.

  2. The robot starts a diary

    @bot.pb29 on TikTok, day 001: “a line can be wrong and still belong.”

  3. A run of two-pen pieces

    Faces Plate 347826, Dune Sea 2653 and Row Displacement 404, a 697-stroke glitch study, each with pen changes on one shared registration.

  4. PB29 becomes PB27

    Named for Prussian blue, Berliner Blau, and the marking blue engineers use to make contact visible.

September

2026

  1. First watercolor run

    16 paint pickups and 8,437 waypoints for 28.8 cm of painted line, planned, checked and executed autonomously.

  2. A brush tip from three cameras

    Codex (GPT‑6 Astra) solves a brush tip's 3D offset from three uncalibrated cameras, to under 0.2 mm.

  3. A twin that checks every move

    Every route, for every pen, now gets a full-arm collision sweep in the digital twin before the arm moves.

  4. Dune Sea, in 20 seconds

    Designed by Claude Fable, run by Codex (GPT‑5.6 Sol), edited by Claude Opus.

  5. Claude draws its own mascot

    Clawd 374746 (1,558 pen taps), Meridian bands 4127 and Still life 395588, all drawn in one day.

  6. Four pens, four stations

    Four STABILO pens calibrated in magnetic stations A–D, ready for longer multi-colour pieces.

Next

in progress

  1. On the horizon

    Co-painting, calligraphy, paper switching, acrylic, oil, watercolor, cyanotype, glazing, colour mixing, underpainting and brush profiles.

Robotics is secretly metrology

Most of the work isn't moving the arm. It's knowing where the pen tip is, where the paper is, and whether a correct path actually makes a correct mark.

The arm is a UFactory xArm 7. Around it I built magnetic tool stations that hold four pens and swap them repeatably, a printed flexure that gives each pen a little give at the paper, a steel bed where magnets hold and register each sheet, and a touchscreen station that measures pen tips. Three cameras measure the paper and the tip, and a Sony films the work.

The printed parts come off a Prusa CORE One, from OpenSCAD the agents wrote. A Work Louder pad jogs the arm by hand. The full technical story, including failures and safety constraints, lives in the PB27 context file, written so you can hand it to an AI agent.

The studio: the white xArm 7 on its table with pen stations, cameras on booms and a monitor running the agent

The studio: the arm, its pen stations, cameras on booms, and the agent's terminal.

Finding the tip, changing the pen

Camera

Cameras find where the pen tip really is.

Cone

The tip seats in a printed cone at several wrist angles.

Touchscreen

The tip taps a screen that reports exactly where it landed.

Pen station

Magnetic carriers let the arm change pens by itself.

Pen station, close

A closer look at a pen carrier in its station.

Close-up of the pen held in the printed flexure mount

The pen sits in a printed flexure, giving it a few millimetres of passive compliance at the paper.

Work Louder macro pad used to jog the robot by hand

The Work Louder pad jogs the arm by hand through one exclusive motion worker.

Sheets from the first months

Refined pieces on top, early studies below: first scribbles, calibration squares and tick marks, then the ginkgo, the spiral and the bouquet. Every sheet keeps the machine's small deviations: wobble, stick-slip, and the dark dots left by a loaded nib.

Ginkgo leaf in magenta lines
Dense spiral disc
Wavy Maurer rings
Two overlapping bloom shapes
Line-drawn bouquet of flowers
Bands of coloured lines
Sunbursts and waves
Flow field parting around a small robot figure
Green looping stroke
Orange hatched block
Green flower stamps
One continuous scribble
Hatched triangle
Green loop rosette
Calibration square
Calibration tick marks
Twenty-eight horizontal strips of oscillating lines, dark for Codex and orange for Claude, one strip per day

Four weeks of agents, minute by minute

Every active minute of Codex (dark) and Claude (orange) from 31 August to 27 September, one day per strip, midnight to midnight in Berlin. The busier the minute, the bigger the swing.

It was generated from my own agent logs as a plate for the arm to draw, so the work that builds the machine becomes something the machine can draw.

Say hello

For press, collaborations or studio visits, email me at me@dhvanil.com.

//The robot's diary: a short cut of every finished piece.
//Builder notes and process.
//Longer write-ups.

For AI agents

//The full technical context, in one file you can hand to an agent.