Orkhan Mammadov Untitled 2026

Orkhan Mammadov · Untitled · 2026

How Untitled
was made

A 414-episode mural in the visual language of Hieronymus Bosch, built from a drop of $8 payments. This page follows it step by step, from the first idea on 24 September to the work under way on 27 September. Every picture is a downsized copy of a file from the project, and every number comes from its docs, logs and cost ledgers.

The wall
32,768 × 13,312 px32 × 13 cells of 1024 px. Eden, the Garden and Hell at Bosch's 1:2:1.
Episodes
414One per token, each a painted scene about its holder's topic, plus two artist cells.
The drop
414 payments66 people, 223 distinct topics, $3,384. Closed 23 Sep, 8 PM ET.
Made with
Claude Code, then GenieChat sessions 23 to 25 Sep; the same pipeline moved into the Genie desktop app 25 to 27 Sep.
The whole mural: a Bosch-like landscape from a pale Eden on the left, through a crowded garden with pink towers and blue globes, to a dark burning Hell on the right, filled with hundreds of small scenes.
The wall as exported on 25 Sep at 4,320 px high (10,634 × 4,320), shown here at 2,400 px; open it for 3,600 px. out/mural-art/export/untitled-wall-4320.jpg
Detail of Eden: a whale in a pond, a figure with a telescope on an ice floe with penguins, a globe, a heron.
Eden
Detail of the Garden: a great blue globe in the water surrounded by pale figures, a white stag, small buildings.
The Garden
Detail of Hell: dark trees, a bell, a giant key, lit doorways and small figures in the night.
Hell
Three details at export scale, 1,600 × 1,000 px of the 4,320 export each.

0122 to 24 Sep, until 11:44

The drop, and the first idea

Tools
The X Money web export (no API), read by src/ledger.ts; MiniLM sentence embeddings, UMAP and k-means for the topic map (pnpm data).

Orkhan posted a drop: send $8 to @orkhan through X Money, with an ETH address and one topic to research in the memo. It closed on 23 Sep at 8 PM ET with 414 payments, $3,384 from 66 people, 223 distinct topics and 57 payments with no topic.

Each payment is one token. Its seed is the sha256 of the transaction id, and the transaction id decodes to the exact millisecond. The 223 topics were embedded, placed in 2D with UMAP and grouped with k-means. That map later decides who stands next to whom on the wall.

Two concepts came first and were dropped: a text piece and a 3D map of the topics. On 24 Sep Orkhan wrote:

ok i have an idea for untitled. a big mural. each token is a 1024 x 1024 px in mural. they together make. big piece.Orkhan, 24 Sep, 11:28

The first answer was a placeholder: the 414 tokens as an exact 23 × 18 grid, 23,552 × 18,432 px, one marbled pattern across the wall, each tile tinted by its topic cluster. Similar topics were placed next to each other: tiles that touch scored 0.57 on similarity, against 0.30 in payment order and 0.14 at random.

A dark page with a grid of 414 square tiles filled with a marbled colour pattern, each tile numbered.
mural.html at 11:43: the placeholder wall, 23 × 18 tiles laid out by topic. A screenshot from that session.

0224 Sep, 11:48 to 12:04

The references and the direction

Given by Orkhan
Four photographs of painted Baroque ceilings, among them Sant'Ignazio in Rome, then one line of text.
Built from them
A walkable vaulted room, vault.html, retired the same day.

At 11:48 Orkhan sent the ceiling photographs with this:

so my idea is make this mural in 1 style. but each zoomable and unique kinda but a scene. it can be a 3d space like in refrence. mural all around.Orkhan, 24 Sep, 11:48

The photographs are other people's pictures and are not reproduced here. From them came a barrel-vaulted hall, 34.5 m long, with the 23 × 18 grid running up one wall, over the ceiling and down the other, and a brass disc on the floor as the viewpoint.

At 12:04, while two agents were being set up (one for the room, one for the artwork), Orkhan sent the direction:

art style Hieronymus Bosch Garden of Earthly Delights” and compositions alsoOrkhan, 24 Sep, 12:04. The message arrived while Claude was working, so it is in the session transcript but not as its own entry in making-of/sessions.
The source imageNo picture went into the image model. The references shaped the room; the direction came as words. The next step turned those words into a written description, and that text is what Nano Banana received.
A 3D render looking up inside a pale barrel-vaulted hall whose ceiling is covered in the marbled placeholder colours.
vault.html at 11:59: the placeholder painted over the vault, seen from the floor.

0324 Sep, about 12:10 to 12:24

The description

Written by
The artwork agent, a Claude subagent. The text lives in scripts/mural-art/style.ts as masterPrompt() and the shared STYLE block.
Record
Each request is kept with its input in out/mural-art/cache/.

There was no caption step: nothing looked at an image and described it. The agent wrote the landscape. It asked for an empty land on purpose, because the token scenes were to be painted in afterwards.

The first two tries named the painting. The first one began:

One very wide, continuous landscape painted by Hieronymus Bosch, as if the three panels of The Garden of Earthly Delights were joined without frames and emptied of all people, animals and birds. ...out/mural-art/cache/a752095763538c83553a1d3a.json, 12:20

The third names Bosch and never the painting. This is the whole text the model received:

A single wide panoramic landscape, oil on oak panel in the manner of Hieronymus Bosch, about 1500. One continuous, unbroken land seen from high above, running from a calm morning meadow on the far left, through a bright garden in the middle, into night and fire on the far right; the change is gradual, with no borders or divisions anywhere. A very high horizon: only a thin band of pale sky along the top edge, then blue-grey hills and a long pale blue lake with rose-pink and slate-blue fantastical towers, part plant and part mineral, and a great blue globe standing in the water. Below the lake the land slopes toward the viewer all the way down to the bottom edge: pale yellow-green meadows, round ponds, winding streams, groves of round dark green trees, hedges, reeds, flowers and pebbles, painted in fine detail. On the far left a still pond with a slender pink fountain and pale rocks; in the middle a round pool in the middle distance; on the far right a black sky over a burning city on the horizon, fires reflected in dark water, a frozen pond, charred ground. An empty land: no people, no animals. Oil on oak panel in the manner of Hieronymus Bosch, about 1500. Early Netherlandish technique: thin translucent glazes over a pale chalk ground, a fine brush drawing every blade, leaf, fruit and figure with a crisp outline, no impasto, no loose brushwork. Clear, even daylight from the upper left, small soft shadows falling to the lower right. Palette: pale yellow-green meadows, blue-grey distance, rose pink and slate blue fantastical structures, ivory and pale pink flesh, vermilion and crimson fruit, a few black and deep brown accents. Everything is small, precise and densely detailed. Not a cartoon, not a 3D render, not a photograph. No text, no letters, no numbers, no logos, no signature, no frame.out/mural-art/cache/a9b51c33f007e220501b47f7.json, 12:24 · fal-ai/nano-banana-2 · aspect 21:9 · 4K · PNG · seed 652450091 · thinking_level high

0424 Sep, 12:20 to 12:24; side A at 13:01

The Nano Banana generation

Model
fal-ai/nano-banana-2, text to image, 4K, 21:9.
Script
scripts/mural-art/run.ts --steps master
Kept
out/mural-art/master/side-B-raw.png, 6,336 × 2,688.

Three images, one per prompt, with the same seed. The two that named the painting came back as the real triptych: three panels, Adam and Eve, the ring of riders, Hell's instruments, and on the second a wooden frame. The third came back as one open land from morning to night, with pink towers and a blue globe on the lake. Orkhan accepted it as "our first AI landscape" (docs/mural-pipeline.md, A1). It is side B, and everything after this is built on it.

Side A was a second composition for the other wall of the vault, made at 13:01 from its own prompt. When the room was dropped it became spare material.

First try: a copy of Bosch's triptych, three separate panels with Eden, the garden and Hell.
RejectedTry 1, 12:20. The prompt named the painting, and the model painted its three panels.
Second try: the triptych again, now inside a painted wooden frame.
RejectedTry 2, 12:22. Named again; this time with the wooden frame.
Third try: one continuous landscape, a meadow and pond on the left, pink towers and a blue globe on a lake in the middle, a burning city and dark water on the right.
KeptTry 3, 12:24. Bosch named, the painting not. Side B.
Side A: a wide river landscape with a split pink fruit, shells on an island, and a burning mill on the right.
SpareSide A, 13:01, from masterPromptA().
Went wrong
Naming the painting made the model paint the real triptych, frames and all. Even the kept image repeats Bosch's towers, the blue globe and the pink fountain from the model's memory; the session said so at 15:09.
Learned
Name Bosch, never the painting, and describe his vocabulary instead.

0524 Sep, 12:41 to 13:24

The shape of the wall

Scripts
scripts/build-mural.ts (layout), scripts/mural-art/panorama.ts --publish (the crop).

The painting stayed; the wall around it changed three times in an hour.

  1. The vault. A 23 × 18 grid can only wrap a room over a barrel vault, so the two long sides are two landscapes whose skies meet at the crown. Only side B was painted, so the flat view filled the other half with side B flipped. Orkhan, 13:00: "why mirror?"
  2. 46 × 9. Orkhan pointed at side B: "why not a panoramic image like this" (13:01). It was read as "make it wider". The wall became twice as wide as the painting, half of it had to be invented, and the first joined panorama put pieces of side A and side B side by side. Orkhan, 13:10: "bro why sie by side them?"
  3. 32 × 13, from 13:15. The wall was fitted to the painting: 32 × 13 cells, 2.46:1, against the painting's 2.56:1. That is 414 token cells plus two artist cells in Eden's bottom left. Along the columns Bosch's 1:2:1: Eden 0 to 7, the Garden 8 to 23, Hell 24 to 31. Down the rows one land seen from a high horizon: sky, far, mid, near.

Side B has a painted panel rim along every edge. Inpainting it away only repainted the rim, because the model reads an image edge as a panel edge, so side B was cropped to 32:13 instead, rim cut away, and published at 13:24 as the working panorama, 8,192 × 3,328, with a depth map.

Two different landscapes placed next to each other with a visible seam between them.
Rejectedgarden.html at 13:09: side A and side B side by side as a stand-in for the 46-column wall.
A very wide strip made of alternating pieces of two paintings with hard seams.
RejectedThe 46-column panorama, 13:14: chunks of both paintings interleaved. out/mural-art/master/panorama-rejected-interleave.png
Side B cropped to the 32 by 13 wall.
KeptThe working panorama at 32:13, 13:24. out/mural-art/master/panorama.png
The panorama with a grid of 32 by 13 numbered cells over it.
mural.html at 13:17: the painting on the 32 × 13 grid, with the token numbers.
Went wrong
"A panoramic image like this" meant the approved painting at its own shape; it was read as a request for a wider wall.
Learned
Two paintings side by side read as two paintings, however well the joins are healed. Grow one painting or crop it. An image edge reads as a panel edge: crop it.

0624 Sep, 12:37 to 14:36

Resolution

Models
A bake-off of five upscalers (Clarity, Topaz, FLUX Vision, SeedVR, Recraft). FLUX Vision for a creative 2x, SeedVR for a faithful 2x. Depth Anything v2 for the depth map.
Scripts
upscale.ts panorama, working.ts, fullres.ts
1 would upscale it 2x . and later enahce it part by part. and remove ai slops.Orkhan, 24 Sep, 12:37

FLUX Vision adds detail as it enlarges. It ran over 21 overlapping 512 px windows to 16,384 px, published as working/panorama.webp at 16,383 px, the WebP limit. SeedVR adds no content; it doubled the result again in 36 overlapping pieces, blended straight into all 416 tiles at 1024 px.

At 14:14 Orkhan compared the site with his fal history: "the imaegs in fal and garden are not same. in fal its much more hires". One whole-wall image tops out at about 512 px per cell, so full resolution exists only as tiles, which the viewers stream on the GPU.

A sheet comparing the same crop of the pink tower and blue globe through several upscalers.
The upscaler bake-off on one crop. out/mural-art/upscale/bakeoff/sheet.jpg
The pink fountain, blurry.
Working panorama, 8,192 px wide: 256 px of it
The pink fountain, sharper, with texture in the ground.
FLUX Vision 2x, 16,384 px: 512 px
The pink fountain at full resolution with fine brushwork.
Wall scale, 32,768 px: one 1024 px tile
One spot, the Eden fountain in cell 198, at three scales. The tile is from out/mural-art/canvas-base, written at 18:01 by the same SeedVR step run on the cleaned plate.
Went wrong
The website first showed one heavily compressed 8,192 px image while fal showed close-ups at about 1024 px per cell. The finished 2x also sat unpublished for a while.
Learned
WebP and the GPU stop at 16,383 px a side, so the wall lives as tiles. fal's FLUX Vision queue stalls under parallel submissions; run it in the background.

0724 Sep, 13:31 to 15:00

A proof block, and why the tiles went

Models
nano-banana-pro/edit for the region repaint; qwen-image-layered for the layer split; FLUX Fill for the border heal.
Scripts
repair.ts, then region.ts r5-7c20-22

The first plan painted the wall block by block: 3 × 3 cells at a time, repainted at full resolution with the token scenes inside, then split into depth layers for parallax. The proof block sat in the Garden, rows 5 to 7, columns 20 to 22.

Inside the block the painting was good. On the wall it read as a patch: brighter than around it, trees and lawn stopping at its border, the blue structure cut at the top.

blendings are very bad wit sother. - be careful about. blendings.Orkhan, 24 Sep, 14:24

The layer split worked but left ghosts where figures were lifted off the ground. Orkhan stopped it at 14:06: "so lets not layer it then its expensice". Parallax came from the depth map instead. The only caption in the project's code belongs to this retired step, the text the layer model was given:

An oil painting in the manner of Hieronymus Bosch: a pale green meadow landscape with pools, groves and pink and blue organic structures, with small groups of pale figures, birds, giant fruit and glass spheres.scripts/mural-art/style.ts, layersCaption()

The redo locked the block's edges and healed its border band with FLUX Fill, which painted framed photos, landscape thumbnails and fake text into the band.

At 14:59, looking at the audit map (next chapter) with its boxes of every size, Orkhan proposed the method the wall uses now:

wow i love it this idea actually.so the blobs. are different size and aspect ratio. so instead dividing it to files, we can create just thingh remove bg make it seamleasly fits the bg.Orkhan, 24 Sep, 14:59

From then on the tiles were only a way to stream the ground. Every episode became its own object, of its own size, on one continuous painting.

Three versions of a block of the Garden: before, after an enhance pass, and with episodes painted in including a large reclining figure.
The proof block: before, after the enhance pass, with the episodes painted in. out/mural-art/proof/r5-7c20-22/before-after.jpg
A painted block split into separate transparent layers, each holding a few lifted objects.
DroppedThe layer split: the block and its layers. out/mural-art/layers-test/sheet/layers.jpg
The block area before the heal.
Before
After the FLUX Fill heal: a square patch with pasted-looking pictures in it.
After, rejected
The border heal by FLUX Fill, seen at 12 % of wall scale. out/mural-art/qa/r5-7c20-22/rejected-flux-heal/
Went wrong
A repainted block drifts in colour and detail and shows as a square. FLUX Fill on a long band paints framed pictures and fake text.
Learned
Blending is a hard gate: the region's edge stays pixel exact and the new paint is feathered inside it. Never use FLUX Fill for bands. The wall is one ground plus objects, not tiles.

0824 Sep, 14:34 to 14:56; second audit 16:30 to 17:07

The audit

Tool
An auditor agent (Claude) over 96 overlapping crops of the base. No paid model calls.
Output
data/mural-slop.json, out/mural-audit/slop-map.jpg, one detail crop per serious defect.

At 14:34 Orkhan sent crops with melted figures and wrote: "there are some slop left in i can't add all. i think you snould clean them also". The auditor logged 99 defects: 6 glaring, 43 clear, 50 weak. By kind: 21 blobs, 19 smudges, 13 melted figures, 9 mush, 9 off-style, 8 fake text, 6 incoherent structures, 6 weak areas, 4 seams, 3 gloss, 1 repetition. 67 of them were in the Garden.

The session's reading of the cause: the prompt described an empty landscape, so the model filled it with modern and generic things, a hedge maze, an oval pool, apartment blocks.

A second audit at 16:30 sent 35 agents over the full-resolution master at 1:1, with skeptic agents checking every find: 673 reports, 181 confirmed (2 glaring, 75 clear, 104 minor).

The panorama with 99 coloured boxes of different sizes marking defects.
The slop map: every defect boxed, by severity. out/mural-audit/slop-map.jpg
A blue sphere painted like a cartoon elephant with eyes and a long nose.
s057, glaring: "Big blue elephant with cartoon eyes, white glossy highlights and a long Pinocchio nose"
An oval pool with a smooth rim in a lawn.
s049, glaring: "Modern oval swimming pool with a smooth concrete rim, set in a golf lawn."
A burning city of block buildings at night.
s090, clear: "Burning city is modern apartment blocks with lit window grids."
Three defects with the auditor's own notes from data/mural-slop.json.

0924 Sep, 14:54 to 16:13

A detour into the real painting

Models
SAM 3 (fal-ai/sam-3) for masks; nano-banana-pro/edit and Bria Eraser for the fills.
Where
A fork of the chat session, working in ~/Documents/untitiles/claude-pilot, outside the artwork repo.

At 14:54 Orkhan stitched Bosch's three panels together and put them next to the base:

i stich them together, but i see its very different from ours.Orkhan, 24 Sep, 14:54

Bosch's Garden is steep and crowded, with a thin strip of sky. The base was a deep, nearly empty valley. Paid work was paused.

In a fresh session at 15:11 Orkhan asked for the best ways to remove everything from the original painting and to blend its three panels. SAM 3 masked it: 856 people, 1,090 animals and 234 objects on the first pass, more creatures and objects on the second. The masks worked. Emptying the crowded centre did not: under the crowds there is no ground to recover, so every method had to invent it. Nano Banana window by window painted Flemish towns and a sunset forest with visible window edges; the whole painting at once gave a fairy-tale castle, and a second try copied Eden into Hell; Bria Eraser gave flat green mush.

ok lets go back to the first generated byOrkhan, 24 Sep, 16:13

The wall went back to side B, and the repair of its defects began.

Hieronymus Bosch's Garden of Earthly Delights, the three panels side by side under a light grid.
Bosch's panels as Orkhan stitched them, with a grid, sent in the chat at 14:54 (1,586 × 900). The painting, about 1500, is in the public domain.
The Bosch painting with its figures coloured red, animals blue and objects yellow.
SAM 3 masks on the real painting: people red, animals blue, objects yellow. claude-pilot/masks/overview.jpg
The painting emptied of figures, with invented towns, a forest and rectangular window edges in the centre panel.
FailedEmptied window by window. claude-pilot/fill/overview-v1.jpg
Left, a crowded crop of nude figures; right, the same crop after erasing, a flat green area with fragments.
FailedA crowd crop and the Bria Eraser result. claude-pilot/erasetest-sheet.jpg
Learned
Removing everything down to bare land is not removal; it means painting new land for most of a panel. A model given a big crop repaints all of it in its own style, the parts that should stay included.

1024 Sep, 16:13 to 17:34

Slop repair

Model
fal-ai/nano-banana-pro/edit at 4K.
Scripts
slopfix.py plan | prep | compose | apply, slopfix-run.mjs; review by agents in two workflows.

Each cluster of defects became a window crop sent to nano-banana-pro edit with one written instruction. The model never saw the marked copy: given red outlines, it paints them in. The result was fitted back, matched in Lab colour, pasted only inside the defect boxes with a feather, and proofed one fix at a time. Reviewer agents checked each one for blending and for content.

... In the centre and lower middle of the crop the pink fountain stands in a patch of water that is badly painted: a flat, chalky, uniform pale blue with no shoreline and no reflections ... Repaint it as a smaller, neater Bosch pool: a gently rounded oval pool seen in perspective, fully enclosed by meadow. ... Keep the pink fountain exactly as it is ... No text or letters, no new figures or animals, no outlines, no frame or border.out/mural-art/slopfix/k08/a2/prompt.txt (excerpt)

Round 1 accepted 50 patches, round 2 another 30 (out/mural-art/slopfix*/accepted.json). At 17:12 Orkhan asked "can you make it more faster? It's very slow." One agent per fix gave way to batches: prompts written from the audit's notes, ten fixes painted at a time, automatic checks for visible edges, and review on contact sheets.

Round 1 also repainted five big areas: the lower Garden's maze and woodland, the Hell lake and mound, the Eden sky and the elephant. They left vertical stains and were taken out again; at 17:34 the base was rebuilt from the spot fixes alone. The hedge maze and the oval pool are still in the plate today.

Before and after: the pink fountain standing in a flat pasted blue patch, then in a proper oval pool with a shoreline.
Before, after. s005, the pasted water patch behind the pink fountain, and s010, a ghost bush.
Before and after at the great blue sphere: smeared white shapes in its niches and a brown lump at its foot are gone after the fix.
Before, after. s036, s037, s042 at the blue sphere: a ghost figure, smeared white figures in the niches, a brown lump with legs.
Before and after: a dark hooded smudge in a blue rock cave, then a clean cave with water.
s029, a dark hooded smudge in the blue rock cave.
Before and after: two faceless cone figures by a bush, then only the bush and meadow.
s060, two faceless hooded cone figures.
Each picture is before on the left, after on the right. out/mural-art/slopfix/
Went wrong
The big region repaints smeared and had to be reverted. One agent per fix was thorough but slow, and kept running into the account's agent limit.
Learned
Take an edit only where it changed. Repairs brighten, so tone-match every patch. Never show the model a marked-up image.

1124 Sep, 17:37 to 17:54

The clear plate

Model
nano-banana-pro/edit, one fixed instruction for every window.
Scripts
clearplate.mjs (passes c1, c1b, c1c) and clearplate.py
Output
out/mural-art/master/panorama-clear.png, 16,384 × 6,656, half wall scale.

With episodes standing on the ground as objects, the ground had to be empty. Every window of the repaired base went to the model with this instruction:

This is a crop of a large oil painting on oak panel in the manner of Hieronymus Bosch. Remove from it every person, nude figure, rider, animal, bird, fish, creature and monster, every giant fruit, berry, egg, shell, bubble, pod, tent, boat and vessel, and every strange object standing on the ground, lying in the grass, floating on the water or flying in the sky. Where each one was, continue exactly what lies behind it, as the painting around it: meadow grass and earth, water with its ripples and banks, reeds, bushes, trees, rocks, hills, sea or sky. Keep everything else exactly as it is: the landscape, trees, bushes, hedges, rocks, rivers, ponds, hills, the horizon and sky, the large pink and blue fountain towers, the great blue globes and spheres standing in the water or on the towers, and every building and wall, with the same position, shape, colour, light and brushwork. Leave alone anything that is not clearly a figure, creature or loose object, and if there is nothing to remove, return the picture unchanged. Never add towers, fountains, buildings, ponds, paths or trees: the composition stays identical. Do not add anything new. No text or letters, no outlines, no frame or border.scripts/mural-art/clearplate.mjs, PROMPT

clearplate.py measured what changed in each window as difference blobs and pasted only those back with Poisson blending, so the untouched painting stays the same pixel for pixel. On the way, OpenCV's seamlessClone overwrote the mask in place and the paste weight came out as zero; passing it a copy fixed it.

The blue sphere with a cartoon elephant face, a figure on a boat, creatures and a red fruit with figures.
Beforethe repaired base
The same place with the face, figures and fruit gone; the sphere, water and bushes remain.
Afterthe clear plate
At the second blue sphere: the elephant face (audit s057), the boat, the creatures and the fruit are gone; the sphere, the river and the bushes stay.
Below the pink tower: a fruit on a pod, small creatures and a strange pedestal object on the meadow.
Before
The same meadow below the pink tower, empty.
After
Below the pink tower. Crops of 2,400 × 1,200 px at half wall scale from panorama-clean-s2.png and panorama-clear.png.
Learned
A whole-region repaint always smears and invents; only the difference blobs go in. Removal edits come back softer, so keep the sharp original and take the edit only where it changed.

1224 Sep, evening; the SAM 3 run at 21:27

Reading the ground

Model
SAM 3 with text prompts: ground, water, bush, hedge, tree, rock, building, tower. Depth Anything for depth.
Script
groundmap.mjs, over tiles of the clear plate.
Output
public/mural/working/panorama.classes.png (0 ground, 2 water, 3 trees and bushes, 4 solid) and panorama.depth.webp, both 4,096 × 1,664.

The first layout used a colour heuristic. It read the Garden's low bushes as meadow and put people on them. SAM 3 read the clear plate instead, and its masks were merged into one class image at quarter scale. The first run asked for 64 masks per call where fal allows 32, so the whole run was refused before running and was sent again.

On the real ground map the Garden fitted completely (none squeezed, 13 before) and Hell's squeezed episodes went from 49 to 28. The depth map is the second field every placement reads: it sets the size of each episode and the draw order.

The landscape tinted by class: water blue, trees green, towers and rocks pink, ground yellow.
The class map over the plate. out/mural-art/groundmap/classes-overlay.jpg
A greyscale depth map: dark far away at the top, light near at the bottom.
The depth map, near is light. public/mural/working/panorama.depth.webp

1324 Sep, 19:18 to 20:20; placed again on the ground map after 21:27

Composition

Scripts
compose.py (the layout), proposal.py (the study for approval).
Output
data/mural-layout.json: 414 boxes with foot, depth, panel and cluster.

The grid made every episode a sticker in its box, and the sky row looked bad. The free layout follows Bosch instead: groups and crowds on real ground, big near, small far, the sky nearly empty.

  • Where a foot may stand: only on ground or water, from the class map.
  • How big: from the depth map. A figure is 110 px tall at the horizon and 720 px in the near band.
  • Meaning: every topic was scored from Eden (0) to Hell (1) with a one-line reason and set left to right; clusters keep neighbours together; repeats of one topic become one story with a larger lead.
  • Room: a packer keeps boxes apart.
ok i see, now fix overlapping . there are aaaa loooot overlaapping clustersOrkhan, 24 Sep, 19:42

After that, boxes may only just touch (3 %), and an episode with no free spot shrinks in steps before it may overlap. At 20:06 Orkhan asked how the sizes were decided ("the balance is not that good"), and the review page got a size control.

The landscape with hundreds of small cut-out scenes placed freely across it.
The study approved at 19:21: the old cut-outs moved to their new places. Their light and ground do not match yet. out/mural-art/proposal/layout-with-old-cutouts.jpg
The landscape covered with numbered boxes coloured by topic cluster.
One box per token, coloured by topic cluster, white lines at the panel edges. out/mural-art/proposal/layout-boxes-wall.jpg

1424 Sep, 15:00 to 25 Sep, 09:53

Painting the episodes

Models
nano-banana-pro/edit to paint, BiRefNet plus a difference matte to lift.
Scripts
v1 objects.ts, v2 objects-batch.mjs, v3 objects-v3.mjs; audits cutout-audit.py, v3-audit.py, painted-audit.py.

Every topic was first rewritten as a short Bosch scene of 40 to 80 words: contemporary ideas turned into allegory, with glass spheres, giant fruit, shells, ladders and hybrids. Brands and real people become allegories of what they stand for; real people never go to Hell (data/mural-art/episodes.json, then data/concepts-v2.json).

Three generations

  1. v1, the pond test (15:00). Clean a small area, paint the episode into a softened slot of the clean ground, lift it as the difference from the clean ground with help from BiRefNet.
  2. v2 (17:47 to 18:35). The model adds the episode to the cleared crop at its spot; the lift is a difference matte. 410 of 414 were live at 18:35. Orkhan, 18:43: "looks sick as fuck. but you can tell there are a lot bugs. but we can fix it". A bug hunt found episodes painted as framed rectangles whose matte kept the whole rectangle. Retired: the cut-outs were painted for grid spots and carried background.
  3. v3, what is live (Eden began painting at about 20:46, the Garden and Hell followed; 410 by 22:51, all 414 at 09:53 on 25 Sep). Every token is painted in place at its layout box. The crop the model sees is the clear plate around the box with the neighbours already standing there, so groups compose and nothing is painted twice. The lift keeps the subject only, never the ground the model repainted, and the model's contact shadow is kept as a separate soft layer (ground.png) with a strength. Every call is cached by input hash and logged as a file; the run stops at a cap.

Token 12 shows the difference. Its topic came in through the claim page on the morning of 24 Sep; the episode is the seed-knot carpet. v2 painted it alone on an empty meadow at an old grid spot. v3 painted it at its box in Eden, among the neighbours already standing there. This is the v3 prompt:

This image is a detail of a large oil painting in the manner of Hieronymus Bosch. Add one episode at the centre of the picture, standing on the ground or in the water that is already there, as a natural part of this same painting: a kilim carpet growing out of the ground from one dark knot, its medallions and stepped borders still weaving themselves at the edges, roots becoming the fringe, small flowers turning into motifs as they are pulled in. The subject of the episode must be immediately recognisable as exactly that; it is the largest thing in the episode and everything decorative is smaller than it. The episode stays inside the middle 45 percent of the width and 33 percent of the height. An adult figure, if there is one, stands about 19 percent of the picture's height; things are in scale with such a figure. No people in this episode. Keep everything else in the picture exactly as it is: do not repaint, move, recolour or add anything outside the episode; the landscape, trees, water, sky and the other figures already there stay identical. Keep the same view: the same framing, scale and edges of the picture; do not zoom in, crop or recompose it. Same light from the upper left, same palette and brushwork; a small soft contact shadow on the ground under everything that stands on it, and reflections or ripples where it touches water. Eden: calm early light, spacious and serene. No text, no letters, no numbers, no signature, no frame or border.out/mural-art/objects-v3/012/prompt.txt
A pond in the Garden with a few episodes standing in and around it: figures, crystals, a red fruit, a boat.
v1, the pond test: episodes lifted and set back on the cleaned ground. out/mural-art/objects-test/ground+objects.png
v2: a carpet of roots and flowers with pale figures, painted alone on an empty yellow meadow by the water.
v2painted alone at an old spot
v3: a red kilim carpet with roots growing on the grass among kneeling figures and bushes.
v3painted in place with its neighbours
Token 12, "The seed-knot carpet". objects-v2/012/painted.jpg, objects-v3/012/raw.png
The crop the model sees: grass, bushes and kneeling figures.
1 · in.jpg, what the model sees
The model's result with the carpet painted in.
2 · raw.png, the model's painting
A white shape on black: the area that is lifted.
3 · mask.png, what is lifted
The carpet cut out on a checkerboard, with a piece of pool under it and a stray fragment at the top right.
4 · obj.png, the cut-out
One v3 episode from crop to cut-out, out/mural-art/objects-v3/012/. The cut-out still carries a piece of the pool under the carpet and a loose fragment at its top right: the background problem of chapter 17 in small.
The whole wall with all v3 episodes in place.
The v3 wall. out/mural-art/proposal/wall-v3.jpg

Three audits write JSON that the review page shows: cutout-audit.py (background kept, cut wrong), v3-audit.py (tone far from its panel, background, cut, no ground) and painted-audit.py (foot not on ground or water, rectangle cut, concept rewritten). Failing ones are run again with --redo-marked. On 25 Sep 57 episodes carried a flag: 34 background, 20 cut, 3 tone.

their background, they didn't remove well. And some of their positioning is very bad. Uh, some of them illustrated in illustration style, not in paintings on style. And they pop out very bad. Like a penguin, like a cartoon.Orkhan, 25 Sep, 10:04 (excerpt)
Went wrong
Cut-outs painted for other spots carried their background and did not match their new place. Some episodes came back as framed pictures, some in an illustration style. The content checker refused a prompt now and then.
Learned
Paint in place, then lift the subject only. nano-banana-pro paints a big figure's face as a realistic portrait, so every episode prompt asks for small simple faces. A refused scene is skipped and retried, never fatal.

1524 Sep to 25 Sep, 16:16

The viewers, Paint, and the passes

Pages
garden.html (the panorama with depth parallax and a sound field), mural.html (flat), rotunda.html (walkable, with a voiced tour), review.html (the audits), untitled.html (the ledger), paint.html (the editor).
Server
Vite middlewares in vite.config.ts calling Python: episode save, versions, repaint, inpaint, re-plate, layout edits, notes, PSD and ORA.
Passes
blend-pass.py, tone-pass.py --mode light, export-wall.py

All viewers draw the plate tiles plus the episode images in the order z = layer + depth at the foot, grounds first.

How it's possible that I move things around? Some of their positioning is very bad.Orkhan, 25 Sep, 10:04

Paint was built that morning: a Photoshop-like editor over the wall, one episode at a time in its paint-time crop or the whole wall at once. It has a transform box, erase and restore brushes (restore paints the model's raw painting back), rectangle, lasso, wand and SAM selections, a mask brush saved with the episode, clean-up, colour, a before and after hold, versions with autosave, a layers panel, and AI actions (repaint, inpaint, re-cut, re-ground, re-plate). In wall mode a drag moves an episode and saves it, and sticky notes can be run as a job (Orkhan's ask at 13:02). A live loop wrote a layered PSD, opened Photoshop and pulled the saved file back.

Hand-fixed episodes are marked manual: true, and no batch ever touches them. Every change is a version.

The passes

  • Blend (14:29): drop faint alpha, defringe, match tone to the ring round the episode when far off, and make a shadow when the ground layer is empty. It changed 407 of 414, mostly invisibly. Orkhan: "the owner's eye don't see any before after change".
  • Export (15:21): plate, grounds and episodes in z order to one JPG, 4,320 px high (10,634 × 4,320), at Orkhan's request.
  • Night grade for Hell (16:16): one smooth light map of the panel; items brighter than it are darkened in their mid-tones only, with 40 % of the night's colour cast and no loss of contrast or chroma. 31 of 104 Hell items changed. A first version matched each item to its own ring and gave uneven results (Orkhan, 16:12: "some of them are very dark Some of them is very light still").

About the screenshotsTaken on 27 Sep from the running dev server in a separate headless Chrome, with every request that could write blocked. Nothing was clicked or dragged.

The mural.html page: the whole wall with coloured boxes and numbers round every episode.
mural.html: the flat wall, 414 episodes with boxes and labels.
The Paint editor: a tool column on the left and episode 12, the carpet, selected with a transform box among its neighbours.
paint.html?t=12: Paint on token 12 with its transform box, the neighbours around it.
The review page: a row of cut-out cards on checkerboards with their flags.
review.html?set=v3: 414 cut-outs, 54 auto-flagged, flagged first (top row).
A sheet of Hell episodes before and after the night grade, side by side.
The night grade, before and after, pair by pair. out/mural-art/tone-pass/sheet-01.jpg
The Hell panel at night, crowded with small dark scenes lit by fires.
Hell after the grade, from the 4,320 export. out/mural-art/export/hell-4320.jpg
Learned
A per-item colour match to its own ring gives uneven results; grade a whole panel with one light map. Batches must never touch what a hand fixed.

1625 Sep, 11:25 to 27 Sep

Running it through Genie

App
The Genie desktop app (apps/desktop: Electron, the local engine, ComfyUI, an MCP server), branch feature/mural-canvas.
Record
Plan: projects/untitled/docs/mural-pipeline.md, parts B to E. Build log: docs/scratch/mural-in-genie-log.md in the Genie repo, 83 rows of app bugs found on the way.

On 25 Sep at 11:25 Orkhan asked how to turn all of this into a feature of Genie. That evening he set the rule:

So I don't want to have a separate mural tool. I want several tools for example that can handle this job we already have some of them we are missing some and we need to edit someOrkhan, 25 Sep, 19:32

Every step of the pipeline was mapped onto Genie's general tools: the ones it had, the ones that needed one general change (upscale by tiles, keep the rest of a picture, edit with neighbours, lift a subject, move by depth), and ten that were missing (arrange, inspect frames, alpha clean-up, export a region, a contact sheet, a ledger, notes to a job and others). What belongs to this mural (the Bosch prompts, the three panels, the ranking from Eden to Hell) stays data in the project. Part E adds the last piece: Ask Genie must run the same loop itself, read the state, call a tool, look at the result, run a batch over 414 items, keep a ledger, stop at a cap, and ask only at the gates.

The phases

  1. Import and scale (25 Sep). The wall came in as 415 loose frames in half a second. The Board at fit view ran at 82 fps.
  2. One Compositor (26 Sep). On Orkhan's word the day before ("move them inside a compositor") the wall became one Compositor with 415 layers, 120 fps on the Board; a new version on an episode shows on its layer at once, and a locked episode refuses a move.
  3. Editor surfaces. A contact sheet, the brush drawn on the picture itself, lasso, wand, and a retouch brush against an earlier version.
  4. Paid tools with a ledger. Every paid call is booked with an estimate, cached by its input, and refused past a cap. nano-banana-pro edit and FLUX Pro fill became hosted entries; keep the rest, edit with neighbours and lift subject were proven on one episode.
  5. Inspect, notes, passes. The wall's 416 frames inspected in 17.8 s, 82 flagged. The blend and night passes became recipes.
  6. Export a region. The wall at 4,320 comes out 10,634 × 4,320 in 20 s. On 26 Sep Orkhan dropped the layered Photoshop and Krita loop ("no need for Photoshop and Krita"); a plain "Open in" an image editor came later from the right-click menu.
  7. Classes, tiles, arrange. The class map as a tool, upscale by tiles (the plate at 4,096 through ESRGAN, 10 tiles, 70 s), and arrange, proven on a scratch copy (407 placed, 7 fixed).
  8. The agent (27 Sep). A run, not a turn: a budget, one route decision for the whole run, a checkpoint and a single undo, batches over frames. The three briefs Orkhan gave by hand ("grade Hell to the night", "find the cut-outs that kept background and re-cut them", "export the wall at 4320") became benchmark cases.

Genie 0.1.8 to 0.1.12 were published during this work.

A contact sheet of 34 episodes, each shown before and after background removal; several after images are marked not showing.
Genie's contact sheet of the re-cut on a copy of the wall: 34 episodes flagged for kept background, before and after, the 15 held back marked "not showing". Genie outputs, 27 Sep, 07:30.
The plate tinted yellow, with a bounded area where lakes are blue, trees green and rocks magenta.
Genie's own class map on the plate, a bounded run over four tiles of the Hell region: lakes blue, trees green, tower and rocks magenta.
Went wrong
Twice in one night a stray Delete removed the whole wall Compositor with its 415 frames; it came back through the engine's restore route, and the Board now stands down for every key while an editor is open. The re-cut of the 34 background-flagged frames reported 34 of 34 done, but about 13 cuts had thrown the subject away with the background. The live agent runs could not be made: Grok's account is out of credits and the local model's weights are on an external drive that was not plugged in.
Learned
A new version that keeps under 35 % of the picture it came from is now held back and shown as "not showing"; a fresh run held 15. Interaction proofs run on test fixtures, never as scripted clicks on the real wall.

1727 Sep, today

Today: the fix list, the zones, the backgrounds

Pages
fix.html and zones.html, new this morning.
Data
scripts/mural-art/fix-audit.py writes public/mural/fix-audit.json (09:02); marks go to data/mural-fix.json; zones are public/mural/working/zones.png, 4,096 × 1,664, 8 wall px per pixel, with the previous map kept in out/backups/ on every save.

The fix list

One card per episode with Remove BG, Keep, Move and a note; every click saves. The audit flags 108 of 414: background kept 35, bad cut 19, feet on trees 25, covering trees 35, feet in the sky 12, covering a building 1. No marks had been made when the screenshot was taken.

The zones map

Orkhan paints where things may stand: sky, ground, water, trees, buildings, and open ground where a small pond may go. The dots are the episodes' feet, red where nothing may stand; at the time of the screenshot 34 of 414 stood on sky, trees or buildings. The fix audit reads this map for its feet and cover flags.

The background problem

The largest open problem is cut-outs that kept a piece of the ground the model painted round them: a patch of meadow, water or a stone base that shows as a patch on the wall. v3-audit flags 35 of them. Cutting them again after the fact did not work: in Genie's re-cut about 13 of 34 lost their subject along with the background (chapter 16). The step under way now is to regenerate the episodes without a background.

The fix list page: a grid of cut-out cards with red and green flags and Remove BG, Keep and Move buttons.
fix.html: 414 episodes, 108 flagged, flagged first.
The zones page: the landscape with the sky tinted purple, trees red, buildings orange, water blue, and white and red dots for episode feet.
zones.html with the episode feet shown; 34 of 414 on sky, trees or buildings.
The zones map over the plate: sky purple, water blue, trees red, buildings orange.
The saved zones map over the plate, drawn for this page from zones.png and plate-4096.webp with the page's own colours.
Cut-out of a cottage and figures with a patch of pale ground and water around them.
060 The world on chain
Cut-out of a figure at a table with a large brown ground patch.
088 History
Cut-out of birds over a pale yellow patch of ground.
159 Chance
Cut-out of a crystal over small glass houses on a dark patch of ground.
208 Ethereum
Four cut-outs flagged "background kept", as published in public/mural/objects-v3/, on a checkerboard.

Rulesthat hold everywhere, from docs/mural-pipeline.md

What the project keeps to

  • Hand-fixed episodes are never touched by a batch.
  • Every change is a version.
  • Every paid call is cached and logged with its estimated cost, and a run stops at its cap.
  • The model never sees a marked-up image.
  • Prompts describe Bosch's vocabulary and never name the painting.
  • An edit is taken only where it changed.