How it works
Jev is a small model that answers questions with probabilities. It cannot see, draw or write. Jev Paints turns it into a painter anyway: code describes the canvas in words, Jev picks from fixed lists, code moves the brush. This page follows one real painting from prompt to last stroke.
Watch it once
Mont Blanc sunset
Every stroke was chosen by Jev on the day it was painted. The page replays the saved decisions, so it is the same painting each time. Jev is not called while you watch.
One request before the first stroke
The prompt goes to Jev with seven independent questions in one request. Three are yes-or-no checks that block only clearly offensive requests. Four choose the foundations of the painting from fixed lists: a palette from 61, a painter or movement from 50, a composition from 16, and a stroke character.
{
"request": "Mont Blanc sunset"
}Jev only ever sees words. The palette option it chose read: Golden hour: low sun, long shadows. Colours: gold (light), honey (light), warm shadow (dark), soft peach (light), dusty blue (light); on ivory (very light) paper. The style option read: Watercolour travel sketch: loose pen lines with light transparent washes, unfinished edges.
The plan
A composition is a set of named places and an order to paint them. The places are generic on purpose: sky, ground, main subject, never boat or tree, so any prompt fits. Code splits the gesture budget across the phases and tells Jev which phase is current. Jev may still paint anywhere.
- sky the upper part of the canvas, above the horizon
- horizon band the thin band where sky meets ground
- far distance the far ground just below the horizon
- ground the land in the lower part of the canvas
- foreground the nearest ground at the very bottom
- focal point a spot slightly left of centre on the horizon for a main element
Every gesture is one request
Before gesture 36, while the plan was on main subject, Jev received the state below and eight independent questions. One round trip, 310 ms, about 1,894 tokens.
- request
- Mont Blanc sunset
- style
- Watercolour travel sketch, loose pen lines with light transparent washes, unfinished edges
- palette
- Golden hour, gold (light), honey (light), warm shadow (dark), soft peach (light), dusty blue (light), on ivory (very light) paper
- composition
- Landscape, low horizon, 6 named places
- progress
- step 36 of 50, now painting the main subject
- canvas
- 25 cells, each described in words. Shown in full in the next section.
- gestures so far
- the last 12 gestures as rows of step, phase, gesture, place, size, medium, colour, weight; earlier ones summarised by place and colour
- Which gesture do you paint next? 31 options
- Where on the canvas does the next gesture go? 31 options
- How big is the next gesture within its place? 3 options
- Which medium do you paint the next gesture with? 11 options
- Which colour from the palette is the next gesture? 5 options
- If the next gesture is a solid shape, how is it painted? (Line gestures are always plain strokes, whatever is chosen here.) 6 options
- How heavy are the marks of the next gesture? 3 options
- Looking at the canvas as it is right now, is the painting already finished? yes or no
Jev answers each question with a probability for every option. These were the answers, with the option that got painted in violet:
How Jev sees
There is no image in the request. After each gesture, code reads the pixels back, divides the canvas into 25 cells and writes one short phrase per cell: how much of it is covered and by which palette colours. That grid is the whole of Jev's view of the painting. This is what it saw before gesture 36.
From picks to strokes
Jev never names a coordinate. A gesture is a motif, a place and a size. Code puts a box of that size somewhere inside the place, and the motif fills the box with strokes using a random generator seeded from the painting and the step number. The same decisions always give the same strokes, which is why replays are exact.
A medium triangle at the focal point: warm shadow pen with medium marks, as a wash.
The medium, the weight and the fill style are p5.brush settings. Lines are always drawn as plain strokes; solid shapes take the fill style Jev chose.
- 2B
- soft dark graphite pencil
- HB
- ordinary pencil, medium grey line
- 2H
- hard light pencil, faint thin line
- cpencil
- coloured pencil, grainy line
- pastel
- soft pastel stick, chalky broad mark
- crayon
- wax crayon, waxy uneven mark
- pen
- ink pen, clean dark line
- rotring
- technical ink pen, very thin precise line
- spray
- spray can, soft airbrushed cloud of paint
- marker
- felt marker, bold flat opaque line
- charcoal
- charcoal stick, smudgy black mark
- fill
- filled solidly with opaque paint, soft uneven edges, no outline
- bleed
- filled with a wet watercolour wash that bleeds and feathers well past its edges
- wash
- a thin transparent wash of colour; the paper and earlier paint show through
- fill and stroke
- filled with paint and outlined in the chosen medium
- hatch
- not filled; the shape is covered in parallel hatching lines of the chosen medium
- stroke
- outline only in the chosen medium, hollow inside
- small
- a detail, roughly a third of the chosen region
- medium
- about two thirds of the chosen region
- large
- fills the whole chosen region
- fine
- fine, thin marks
- medium
- medium marks
- bold
- bold, thick marks
The painting grows
The canvas at the end of each phase of the plan.
Weighted pick or top pick
Jev returns a probability for every option, never a single answer. Top pick always takes the option with the highest probability. Weighted pick draws one option at random with the probabilities as weights, so an option Jev gave 30% is chosen about three times in ten. In the gesture above, weighted pick chose triangle with 13% behind it.
Top pick gives calm, minimal paintings and repeats itself, because Jev's answer barely changes from one gesture to the next. Weighted pick is the default: the second and third options are what give a painting its focal shape and its second colour.
The lists Jev chooses from
Everything Jev can pick is written down in advance. Changing the art means changing these lists, never the model.
31 gestures
Solid shapes in violet, line gestures in ink. Each is drawn here with the same code that paints it, in a fixed random state.
16 compositions
61 palettes
50 painters and movements
Vincent van Gogh, Claude Monet, Henri Matisse, Wassily Kandinsky, Mark Rothko, Jackson Pollock, Gustav Klimt, Katsushika Hokusai, J. M. W. Turner, Paul Cézanne, Pablo Picasso (cubism), Joan Miró, Jean-Michel Basquiat, Edward Hopper, Georgia O'Keeffe, Hilma af Klint, Edvard Munch, Paul Klee, Piet Mondrian, Cy Twombly, Helen Frankenthaler, Marc Chagall, Paul Gauguin, Georges Seurat, Egon Schiele, Friedensreich Hundertwasser, Yayoi Kusama, David Hockney, Sonia Delaunay, Agnes Martin, Richard Diebenkorn, Joan Mitchell, Frida Kahlo, Francis Bacon, Andy Warhol (pop art), Impressionism, Expressionism, Fauvism, Abstract expressionism, Minimalism, Art Nouveau, Bauhaus, Ukiyo-e, Sumi-e ink wash, Cave painting, Children's crayon drawing, Watercolour travel sketch, Charcoal life drawing, Street art / graffiti, Folk art.
What it cost
This painting took 23.0 seconds and 51 requests to Jev, 235,968 input tokens in all, about $0.010. Jev charges $0.042 per million input tokens and nothing for output. The gallery holds 164 paintings so far.
Built with Jev by TypeSafe, p5.brush and p5.js. Paint your own.