The thing I wanted to fix
Computational art analysis fails in two ways. Classical pipelines dump arrays of numbers no viewer can read. Machine-learning systems do the opposite: they emit confident labels, emotion, quality, style, that hide what they actually measure and quietly inherit their training set’s bias. Both hand you a verdict. Neither teaches you to look. I did not want a score. I wanted an instrument that is honest about its own edges.
One painting, many lenses

Every work is read along a small, fixed set of lenses. Four are computed: Structure, Light, Colour, Surface. The fifth, Meaning, is written by a person, cited, and deliberately excluded from any machine reading. The rule that held the whole thing together was restraint: switch lenses, do not stack redundant panels, and keep the painting itself the largest thing on the screen. The design is an argument that noticing beats dashboards.
Honest instruments, not confident scores
Each lens answers exactly one question with one primary signal, and each one states, in the data model itself, what it reveals and what it misses. The colour lens reads a palette in perceptual space and tells you plainly that it cannot read subject or intent. A programmatic uniqueness test enforces the separation, so a signal that belongs to one lens cannot leak into another’s output. Structure never gets to borrow raw colour. That constraint is the design.
Localise the finding, never explain it away

The decision I am proudest of is small. Instead of a text disclosure that says “see the colour study,” a finding gets drawn on the image. An equal-luminance, different-hue boundary is computed and pointed at the exact region it lives in, the sky and cloud line of the Great Wave. It fires on eight of the nine works and correctly refuses to fire on Monet’s diffuse water lilies, where no such edge exists. If the instrument cannot see something, it says so on the artwork, in place.
Where the AI actually sits

There is a Claude vision call in this project and I want to be exact about where it lives. It runs at build time only, reading a coarse mass-map and palette to help author each study. The shipped product computes no interpretation with a model at all: it is static and deterministic, with a lint guard that fails the build if an API key could ever reach public output. The Composer, where you drop in any image and it ranks which master your composition rhymes with by mass, palette, and style, runs entirely in your browser.
What it taught me
Nine works, not nine hundred. The hardest discipline here was not the colour science, it was deleting the prototypes that got subsumed and refusing to add a tenth lens that would have said the same thing twice. Depth over breadth, and a measurement that names what it misses, turned out to be more honest and more useful than any single confident number.
Interested?
This is a personal inquiry, still moving. If the way it thinks about seeing is interesting to you, write to me or find me on the contact page.