Isometric worlds, built by pipeline. Concept to generated art to clean, game-ready 3D.
Every world is a scene file.
Bespoke isometric art is slow to make, slower to change, and drifts the moment a second artist touches it.
Here every world is a scene file. Every piece in it is named, parameterized, and locked. Change one line and the whole thing re-renders, consistent.




| Day | Dusk | Night | Dawn | |
|---|---|---|---|---|
| Phase | 0.00 | 0.35 | 0.60 | 0.85 |
| Tint | #fff6e6 · 0.04 | #26201c · 0.00 | #161426 · 0.12 | #3b3550 · 0.10 |
| Lamps | 0.00 | 1.00 | 2.40 | 1.30 |
| Window | 1.00 / 0.75 | 0.35 / 0.50 | 0.00 / 0.00 | 0.55 / 0.30 |
The room is a list. The list is the contract.
PARTS = [
('floor', floor),
('rug', rug),
('walls/shell', wall_shell),
('windows/left', window_l),
('windows/right', window_r),
('walls/pilasters', pilasters),
('walls/sconces', wall_sconces),
('console_wall/sconces', console_sconces),
('walls/print', wall_print),
('console_wall/mirror', mirror),
('curtains/left', curtains_l),
('curtains/right', curtains_r),
('console_wall/console', console),
('console_wall/still_life', console_still_life),
('sofa_group/sofa', sofa),
('sofa_group/side_lamp', side_lamp),
('sofa_group/coffee_table', coffee_table),
('sofa_group/tub_chairs', tub_chairs),
('sofa_group/drinks_table', drinks_table),
('bar_cart', bar),
('floor_lamp', floor_lamp),
('right_front/pouf', pouf),
('palm', palm),
]# Deco salon: status of each part. locked | open | explore
#
# locked accepted. check.py fails the pass if its drawing changes.
# open being worked on; free to change.
# explore wants variants to choose from.
#
# A group name covers every part under it: `walls` covers walls/shell,
# walls/pilasters and the rest. A part can be listed on its own to differ from
# its group (windows/left: locked). Parts not listed are open.
floor: locked
walls: locked
console_wall: locked
sofa_group: locked
rug: explore
right_front: exploredeco_salon: 23 parts, 14 locked, 2 explore, 7 open
PASS floor 134 shapes
PASS walls/shell 38 shapes
PASS walls/pilasters 16 shapes
PASS walls/sconces 20 shapes
PASS console_wall/sconces 20 shapes
PASS walls/print 23 shapes
PASS console_wall/mirror 49 shapes
PASS console_wall/console 122 shapes
PASS console_wall/still_life 267 shapes
PASS sofa_group/sofa 315 shapes
PASS sofa_group/side_lamp 85 shapes
PASS sofa_group/coffee_table 273 shapes
PASS sofa_group/tub_chairs 130 shapes
PASS sofa_group/drinks_table 92 shapes
locks: 14 pass, 0 fail, 0 without a reference. All hold.The status file says what may change. The check says whether anything did: fourteen locks, and all of them hold. The machine holds the line, not the artist’s memory.
Three looks, one camera.
One camera, one engine, nothing else shared. A radar platform and a salon come off the same bench.



Nothing here was keyframed by hand.
| Station | x | Touch at | Does |
|---|---|---|---|
| Robot | 7.95 | 0.85 | Paints the body, grey to cream |
| Robot | 12.35 | 0.18 | Fits the face plate and the corner lamp |
| Robot | 16.74 | 0.51 | Fits the panel of four lights |
| Robot | 18.70 | 0.21 | Lifts the finished unit and drops it down the chute |
Belt: 3.3 units per lap; a blank drops from the hopper at the wrap.
Motion is the same scene with a phase. The belt, the robots’ touches and the drop are one function of time, and so is the salon’s day.

The system was built to make a game.
Here is the first town block from it.