Writing, 11 min read

It is not a one-shot scene

How I built a studio-style 3D kitchen with Claude Code, Codex and one human art director. Nine and a half hours, six stills, eleven reviews by a second AI model, and a floating cup that seven review rounds missed.

One kitchen, two models, one human

People ask me if AI can “just make” a 3D scene now. Type a sentence, get a room. Sometimes you do get something. It looks fine for three seconds. Then you look at the cup.

This post is about one kitchen. It was the first full test of a pipeline I am building for 3D environments, and it ran in one day, 19 October 2026.

Claude Code was the builder: it wrote every line of the Blender scene, ran the renders and measured them. Codex, a model from a different family, reviewed every gate from the files and images only, never from the builder’s chat. And I was the art director. I signed the brief, I passed or failed the clay, I accepted the finals.

The result: six stills at 2560 × 1440, a 16-second film, about 9.5 hours of builder time, and a log of 54 frictions. A gate is a checkpoint: the work stops there until I accept it.

  1. ReferenceAlex Jerjomin, “Granny’s Kitchen”Not shown here. See it on ArtStation.
  2. Clay, round 1: the hero view, morningClay, round 1Grey, flat, no sun
  3. Light lock, c9: the hero view, morningLight lock, c9Passed by the art director
  4. Vertical slice: the hero view, morningVertical sliceMaterials, lace, glass
  5. Final: the hero view, morningFinalAfter the dressing layers

Why a pipeline at all

Part 1 of this series is the lake cabin: 34 Blender rounds, the best at 7.5 out of 10 against 9.45 for the reference, and a cozy pass that I called edgy, flat and AI-generated. Nobody owned the taste there, and light and water came after the materials. So the pipeline made a human the art director and put clay and light first.

01of 08

Concept lock: Codex finds the mirrored room

One rule from the start: I pick a reference I love, and I credit it. Alex Jerjomin’s kitchen has an L-shaped corner, low sun through lace, worn teal paint on cream tiles. We took the composition, the palette, the window light and the restraint in the wear. We did not take the layout, the props, the tile pattern or any asset.

The brief locked the rest. An Eastern-European kitchen, early 1980s. Two story states in one build: morning (breakfast, sun through the window) and evening (supper cleared, the kettle on a small blue flame, a fabric pendant lamp). Three fixed cameras: near, hero and dense. And a list of forbidden cues, the things that make a render read as “AI”: bloom on every light, dust everywhere, fog, clean surfaces, centred symmetric framing.

Codex read the brief and the settings file with the camera positions. There were no images yet. In 98 seconds it came back with FAIL and six findings. The first one: the hero camera shows the window on the right and the stove on the left, the reverse of what the brief says. It worked that out from the camera coordinates alone. The first proof render confirmed it.

The fix took about 15 minutes.

02of 08

Renderer proof: glass that blocks the sun

Before any asset, a box room: three cameras, one sun, one window. The first proof had two bugs, and neither one gave an error.

The sun through the window made no sun patch at all. In Cycles, a glass shader blocks shadow rays when caustics are off, which is the default for clean renders. The fix is a pane that is transparent for shadow rays only. The second bug: the evening state rendered with the morning sky, because Blender drops an unassigned world when it saves the file.

Then the budget. Half-size test renders, scaled up, predicted 605 to 698 seconds per final still. One real render at full size measured 192.5 seconds for the morning hero and 83.2 for the evening. The budget was 360.

03of 08

Assets: free only, 512 checks

Free assets only: Poly Haven, ambientCG and the free Megascans tier on Fab. A researcher agent filled the asset bible in 22 minutes, with free candidates and licence evidence for every row.

A Soviet-era kitchen has things no free scan library holds: the enamel stove, the kettle with a flower decal, the radio. So Claude modelled them in Blender, from code: the cabinets, stove, sink, window, hood, pipes, tiles, pendant lamp, kettle, radio and cups. The scans brought the rest: the brown enamel pot with the flame decal, the fruit, the bread, the cutting board, the geraniums.

An ambientCG apple came in at 11.4 cm; real apples are 7 to 8.5. A pan rack from Fab arrived 100 times too big, with a stray plane at the origin. A plant lay on its side.

I signed in to Fab myself and approved each download. Once, a stale screenshot nearly made Claude tick a licence box for me.

The asset gate ran 512 checks, Codex found seven problems, and I approved the lock.

What the kitchen is made of

Claude wrote the kitchen as Python: 27 scripts, about 2,260 lines, run headless with blender -b. One command rebuilds the whole scene from the code, the downloads and a single scene.json that holds the cameras, the lights and the focal objects.

Scanned and downloaded: 22 free assets.

Enamel pot

Drag to turn them. The pot and the jug are scans; the kettle and the radio are Claude’s models.
  • Props, scanned: the brown enamel pot with the flame decal, the jug, the succulent, the cutting board (Poly Haven); three apples, two pears and the bread (ambientCG); an apricot (Fab).
  • From the Fab community: the geraniums by Nimah and the wall pan rack by Sousinho, both CC-BY.
  • Surfaces and small dressing: linoleum, cabinet wood, wall plaster, gingham, food cans (Poly Haven) and Megascans dust (Fab).
  • Through the window: two HDRIs, a meadow for the morning and a museum courtyard for the evening, visible only through the glass.
  • The geranium scan lying on its side on the studio floorGeraniums: on their side, 2.2 m wide
  • Five copies of the apricot scan side by side, one per level of detailApricot: five LODs in a row
  • The pan rack far too big, with a loose plane under itPan rack: 42 × 163 m, with a stray plane
Intake, straight from the download. Every asset gets a studio turntable and a size check before it enters the room.

Made in code: everything else. No free library has a Soviet gas stove, so Claude built the room from real dimensions: a counter at 0.88 m, base cabinets 0.60 deep, a gas stove of 0.50 × 0.57 × 0.85 m, 15 cm tiles with 3 mm grout, a DN20 gas pipe of 26.9 mm, a window in a 0.38 m panel wall.

  • Boxes with bevels for the cabinets, doors, stove, hood, fridge, sink and window.
  • Lathe profiles, a line spun around an axis, for the kettle, the cups, the bowl and the preserve jars with their jam.
  • Tubes along a path for the pipes and the pan hooks.
  • Cloth without a simulation: the towels, pot holders and dishcloth are shaped meshes with noise for wrinkles. The lace curtains are a procedural pattern.

Materials without Substance. The teal is a layered shader: paint over the scanned wood, with wear on the outer edges. The stove and the fridge get chipped enamel with dark iron in the chips. Every tile gets its own small colour shift, and a few get a printed flower.

The stove wall in grey clay: the radio, the kettle on the stove, the tiles and the pipes, all modelled in code
The made kit in clay, round 4: radio, kettle, stove, tiles and pipes, before any material.

04of 08

Clay and light: c1 to c9

Everything grey, under the final light, before any texture.

Final still, hero camera, morning
Hero, morning. Focus: sun patches on the back worktop and tiles.Clay focal rank 15 of 819. Final render 200.7 s.

Nine clay rounds. In c1 the morning had no sun at all: the clay glass was a plain glass again, the same bug as the proof. Then the morning was flat, because the sky fill swamped the sun. Then the sun fell on the wall above the props instead of on them. Claude wrote a small tool that ray-casts the worktop toward the sun and prints where the light lands. One move after that put the bowl and the pot in the light. The sun went from 15 to 24 degrees.

The best fix was a café curtain on the lower half of the window. It blocks the rays that lit the cabinet doors and keeps the rays that reach the pot and the radio. At night the closed curtain hides the bright courtyard behind the glass. A story prop, used as a light modifier.

To stop judging by eye alone, Claude wrote a focal check: it splits the frame into 819 blocks and ranks the block with the strongest local contrast inside the focal area. Rank 1 means the focal area beats the whole frame. The hero evening went from rank 150 in c7 to rank 6 in c9. I passed all six frames at c9.

05of 08

Slice: three rounds, 80 out of 120

Next, one area fully finished: final materials, lace, glass. Three full-size rounds, about 25 minutes of rendering each. Codex said FAIL twice. The auditor, a separate agent that scores the frames against a look rubric, gave 80 out of 120 both times.

The score stayed flat because it held back points for grime and clutter, which only come after the slice. That mismatch cost about an hour and a half.

One lesson was pure physics. The lace cast no pattern at all. A sun disc of 0.6 degrees blurs any shadow detail under about 15 mm at a distance of 1.5 m. Fine lace can never cast a visible pattern. The motifs have to be centimetres wide.

The night was the hard part. The brief allowed under 1 % crushed pixels, too dark to show detail, and no night frame that kept the mood got there. Three rounds of fill light: 16 % to 5.3 %, but the lace glowed like a lit window; then 14.6 %, because the lace blocked the fill; then 4.9 %. I accepted the slice with three changes to the brief: night frames may crush up to 5 %, the scanned pot stays, and the bread leaves the board in the evening.

06of 08

Dressing: layers 3 to 9

Then the room gets lived in, one layer at a time: story props, cloth, wear, wet, plants, framing, atmosphere. After each layer: a check render and an auditor pass, and Codex on every second layer.

The final hero view, morning
Hero, morning: the slice against the final.

What went wrong:

  • The layer 3 code ran after the file was saved. The whole layer vanished, and every image check stayed green. Now a tool compares before and after, and a layer that changes less than 0.5 % of the pixels fails as “DID NOT LAND”.
  • The stove’s worn enamel was a text edit whose search string did not match. Nothing failed. The stove stayed plain from stage 5 to layer 5, and every review flagged the spotless stove.
  • A random wear variation turned whole cabinet doors into bare wood.
  • Water drops on the dark worktop read as black holes. They went.
  • Layer 8, the foreground framing, never went in: nothing fit at these camera heights without covering the props.

The auditor’s score barely moved: 80 before, 79 after.

07of 08

Delivery: and the floating cups

The first final passed every mechanical gate. Codex said FAIL again: crushed pixels in the focal area at night, hard-coded paths, a ledger behind the build.

Then I looked at it as the art director, not as a reader of numbers.

The cups floated. The saucer was modelled 8 mm inside the worktop, so the cup hung in the air above a ring. The jug stood over the sink opening, because it was placed before the hole was cut. The geranium grew through the tap. A café rod floated across the glass with no brackets. And there were black squares where the window-frame pieces overlapped.

The cup standing on its saucer on the worktop
The saucer sat 8 mm inside the worktop. The cup floated above it.
The window corner with the jug on the worktop and the geranium on the sill
The jug stood over the sink. The geranium grew through the tap.

Seven review rounds, Codex and the auditor, had not named one of them. They looked at full frames and three fixed crops. They measured contrast, crush and focal rank. Nobody asked: does this cup touch the table?

Claude wrote a contact check that ray-casts down from each prop. The first run: 29 of 41 props bad. Fruit 9 to 65 mm above the bowl. The kettle 4.7 mm above the grate. Cups 5 to 11 mm in the air. After a settle step that drops every prop onto its surface: 0 of 25. That check is now a gate in pipeline v2.4, which came straight out of this test.

I accepted the second final.

The six finals, 2560 × 1440, Blender 5.2 Cycles, 512 samples. Open any still at full width.

08of 08

Film: 16 seconds, 144 minutes of rendering

After the delivery I asked for a film. Two shots on the hero view, each a slow 28 cm push-in. Morning: dust only where the sun reaches, the café lace breathing, one cloud passing over the sun. Evening: a gas flame with its own blue light, and steam from the spout.

The first check failed. The dust motes were smaller than a pixel. Motes in the shade read as fireflies. The steam was invisible, then black smoke. Rendering took 144 minutes for 16 seconds.

16 seconds, two shots, a one-second dissolve. Sound on for the mix.

The sound is ten CC0 recordings from Freesound: room tone, a fridge hum, a wall clock, birds and a tram behind glass, the gas, the kettle, crickets, and a Brahms music box that moves “into the radio” across the dissolve. The mix was checked by measurement, and that found a click at the dissolve and a 19.5 kHz tone in one source.

What AI gave, and what it did not

Builder time
9.5 h
Final stills
6
Seconds per render
85–260
Codex reviews
11
Auditor runs
9
Frictions logged
54 + 5

Each of the 54 frictions, and five more in the film, has a time cost and a proposed fix. Most fixes are in the pipeline now.

What AI gave me is speed and rigour. Loop engineering. A harness that rebuilds the whole scene from code, on a fresh copy, first time. Gates with hundreds of mechanical checks. A second model that says FAIL without knowing how the work was made, and that was right about the mirrored room. Small tools written on the spot whenever a guess was too slow: the sun map, the focal rank, the contact check.

What it did not give me is the eye. It is not a one-shot scene. The kitchen got good because a person kept saying “that cup floats” and “the night can be darker than your rule”. The reviewers were not always right either: in the layer 4 review, two of Codex’s claims were contradicted by the pixels and dropped.

The concept is Alex’s. The corner, the palette, the feeling of that window: a person made that first. We built a study of it. If all we do is this, we get very good copies.

“We need creatives, we need people that apply a soul, else we just get beautiful references from others.”

Credits

Concept reference: “Granny’s Kitchen” by Alex Jerjomin, ArtStation; an independent study, not the original.

CC-BY assets: “Geraniums” by Nimah; “Wall pan rack” by Sousinho. CC0 assets from Poly Haven and ambientCG. Free Fab assets: Apricot by Zahaoha, Dust by Quixel Megascans.

Film sound: ten CC0 recordings from Freesound by Legand569, Jupo_22, giddster, cupido-1, megashroom, Jamesyeremeyev, kyles, Flying_Deer_Fx and callmethefoo.

Built with Blender 5.2 Cycles, Claude Code and Codex.