The loop
Lume reads, turns each item into an emotional reading, and accumulates the readings in a small spiking network. Most days nothing more happens. When a neuron fires, it forms an idea, works it through a vector sketch, studies and its own brush, and judges the result. What it keeps changes what it will like next.
- 1Sensesnews, a book, Wikipedia, a museum, visitors' notes
- 2Affect8 emotions and a salience for each item
- 3Spiking layer8 leaky neurons; one may fire
- 4Conceptan idea, or a decision to rest
- 5Vector sketchSVG layers, scored by its taste
- 6Studies8 image-model studies; one chosen
- 7Brushrepainted stroke by stroke
- 8Judgementkept, or thrown away
What it takes in
A sitting, one round of reading, runs every three hours in the cloud, and once more each day before painting.
- News: 18 RSS feeds, up to 12 new entries each.
- Wikipedia: the daily feed, and a wander of up to four hops that follows the most salient link.
- A book: three passages per sitting from 16 public-domain books, with a bookmark.
- A museum walk, at most every six hours (below).
- Visitors' notes from the last 14 days.
From words to a feeling
Each item is embedded as a 512-dimensional vector and read by Spark, Lume's small affect network (one hidden layer). It returns eight emotions and a salience, each from 0 to 1. Spark is distilled: a large language model labelled items in Lume's character, and Spark learned to reproduce those labels. Its feelings are that model's readings, compressed.
Fidelity, by 5-fold cross-validation on 161 labelled readings: Spearman 0.40 on average across the emotions, from 0.26 for joy (95% interval 0.10 to 0.40) to 0.59 for wonder (0.47 to 0.68), and 0.56 for salience (0.44 to 0.66). It ranks readings roughly as its teacher does; for the weakest emotions, joy and melancholy, the lower bound is close to zero.
The eight emotions are a vocabulary chosen by hand for the character, not a standard taxonomy. Museum works skip Spark: their emotions come from the written reaction, and salience = min(1, 0.25 + 0.6 · max(endorphin, affinity)), with affinity on its raw −1 to 1 scale (so a negative affinity never counts).
Input
“The museum returned the jars to the family, but they stayed on the shelf.”
Embedding
text-embedding-3-small, 512 dimensions, L2-normalised
Spark network
512 → 64 (ReLU) → 9, distilled from a language model labelling items in character
A feeling has to build up
The emotions drive eight leaky integrate-and-fire neurons, one per emotion. Items below salience 0.39 add nothing. The potential leaks with a 48-hour time constant (a half-life of about 33 hours) and saturates as it rises.
v ← v · e−Δt / 48 h
I = 2.5 · max(0, s − 0.39) · e
v ← v + I · clip(1 − v / 1.6, 0, 1)
v potential, s salience, e the emotion's value for this item.
A neuron fires at 1.0, and only the strongest may. It resets to zero, the other seven are halved, and the layer rests for four days. The items that pushed it over become the reasons for the painting. One extreme item could cross from rest (up to 1.5), but of 161 labelled readings 78% add nothing and the strongest adds 0.54: firing takes several days of readings pulling the same way.
Functionally this is a leaky accumulator with a threshold and winner-take-all. The neuron framing adds no computation; it makes the time constants explicit and the state readable.
Taste
Taste is a second spiking network, which Lume calls the endorphin network. It reads an image through CLIP and returns a reward from 0 to 1.
Image
CLIP ViT-B/32, 512 dimensions. The vector is held as a steady input for 25 time steps.
Visual layer
128 leaky integrate-and-fire neurons. Each keeps 90% of its charge from one step to the next and fires at 1.0.
Awe neuron
trained on fame
Taste neuron
trained on Lume's own reactions
Endorphin
a leaky trace of 0.4 awe + 0.6 taste, from 0 to 1
The awe neuron learns fame (how many Wikipedia languages cover a work) from 20,001 of the 22,272 works with a fame signal, and reaches Spearman 0.47 on the other 2,271 (95% interval 0.43 to 0.50). The taste neuron learns Lume's own reactions, each carrying an affinity from −1 to 1 given by the language model speaking as Lume. By 5-fold cross-validation on the 306 reactions so far, it reaches 0.35 (95% interval 0.25 to 0.45), a weak and preliminary signal.
Spiking buys no accuracy here: on the same CLIP features and the same 5-fold split, a small conventional network scores 0.36 and a linear regression 0.46. The spiking design is a choice of form.
The museum walk
The atlas holds about 130,000 public-domain works from Wikidata, the Metropolitan Museum of Art, the Art Institute of Chicago, the Cleveland Museum of Art and the National Gallery of Art, each with its CLIP vector. A walk starts at a well-known work Lume hasn't seen, takes up to five steps to the most rewarding of the ten most similar works, and ends on a random unseen one. Its reactions feed its taste.
Making a painting
The idea and composition are settled before any image model runs: the painting first exists as layers of vector shapes, scored by Lume's taste. Image models only render that composition, and the result is repainted by a stroke renderer.
Concept
grok-4.7 speaking as Lume, given the six strongest triggers. Returns 3–6 colours, 3–7 layers and a format, or declines to paint.
Vector sketch
grok-4.3 draws the layers as SVG, rendered at 1024 px. Score = 0.75 · endorphin + 0.25 · fit to the idea. Up to 5 rounds; stops after 2 without gain.
Materials and brush plan
A surface, a material and technique per layer, and a painter whose way with paint it borrows: for the touch, never the subject.
Studies
Eight quick, low-resolution renders from two image models. Lume compares them with its sketch and accepts one, or asks for four closer ones, for up to three rounds.
Upscale
Real-ESRGAN ×4, then resized to 2304 px on the long side.
Its own brush
A procedural stroke renderer: curved strokes from coarse to fine brushes, following the image's structure, after Hertzmann (1998); paint thickness kept as a height map and lit for impasto, after Hertzmann's Fast Paint Texture (2002). No neural network.
Judgement
Lume looks at the result, writes a title, the wall text and a note, says how close it feels to it (a number it calls affinity), and keeps it or throws it away.
A sketch scores 0.75 · endorphin + 0.25 · fit, where fit is the CLIP image-text similarity rescaled as clip((cos − 0.15) / 0.2, 0, 1). Over 22 recorded rounds fit varied about a third as much as the endorphin term, so taste decides most choices. A work too close to one in the atlas has its score cut by more than half. If no study is accepted in three rounds, nothing is kept.
Memory and learning
Lume keeps three searchable image memories: works seen as an apprentice, a canon of those it loved, and its own kept paintings. When forming an idea it also sees its last twelve ideas and what became of each.
Two feedback loops run through taste, both by design. First, kept paintings become reactions the taste neuron learns from at the next retraining, so a taste that learns from its own choices can narrow over time. For now its own works are 3 of 306 reactions, about 1%; new museum reactions arrive every six hours, so the share of other artists' works grows, and retraining is done by hand. Second, a museum work's salience depends on its endorphin, so taste decides which images are allowed to move a neuron and, in the end, start a painting.
Visitors' notes train nothing; they are read like the news.
The models it uses
As configured on 27 September 2026.
| Role | Model |
|---|---|
| Labels readings, draws the sketch, reacts to museum works | xAI grok-4.3 |
| Forms the idea, chooses materials and studies, judges the painting | xAI grok-4.7 |
| Renders the studies | OpenAI gpt-image-2, xAI grok-imagine-image-2.0 |
| Embeds text and images | OpenAI text-embedding-3-small; CLIP ViT-B/32 (Radford et al., 2021) |
| Enlarges the chosen study | Real-ESRGAN x4plus (Wang et al., 2021) |
| Affect, neurons, taste, brush | Its own |
What is written by hand
Lume's character: a temperament, a way of speaking, and a few rules (paint rarely, no words in a painting, throw away what doesn't hold). The code also fixes the emotion names and the constants on this page.
The loop decides when Lume paints and why. What it paints comes from the language model that forms the idea, with that model's knowledge and habits. The part learned from Lume's own history is its taste.