Ensemble

ARRANGE NINE. Take one of your Proving Ground studies (or the V7 4 Rectangles default) and copy it nine times across the real ground of your site — any of the five studio Superfund sites (a chat pile at Tar Creek by default; the pit rim at Butte, the Solvay waste beds at Onondaga, the slag terrace in Pueblo, the cinder bank at Palmerton) or any coordinate you paste or saved in the Surveyor, then walk the box across it on the key map. Then cycle through the organizations: fifteen GENERATORS that re-solve for any count, module, study and ground — the nine on the assignment sheet (grid, staggered grid, linear, axial, centralized, radial, cluster, contour, chain) and six fields from the textures sheet (twigs, striated, field vectors, patchwork, collision, open field) — plus every organization on every “Nine ways to arrange” sheet, loaded as drawn — and the thirty that read the ground fitted to yours: drag the centre and they re-fit. Each is explained, the sheets themselves are in the How to use tab, and every organization can be seen at once on your ground in the All organizations view. Every organization opens turned and drifted out of symmetry; Drift and its seed are dials. Drag any lounge to place it by hand. Then switch on the ORDERING GRID — a grid or a staggered grid at any angle, with bays in feet — and pull every lounge toward its own node by as much or as little as you like, so intuition, the land and an ordered dimension meet in one plan. Turn each lounge by the organization, the grid, the contour, the fall line, or exactly as it was tested in Proving Ground; seat each plinth lifted, balanced or bedded, and read what the arrangement asks of the ground: the fall under every plinth, cut and fill, gaps and overlaps, how far each copy is turned from the orientation its sun and wind readings were taken at. Plan, 3D, a SECTION through the village (set the line's direction and position; the earth hatched, the lounges it cuts solid, what stands beyond in elevation) and the four ELEVATIONS, in one, three or four viewports as in Proving Ground, and WALK the village at eye level (5′-6″ over the ground, stopped by the lounges' walls) — the 3D drawn in Proving Ground's Shaded, Solar, Pen or Rendered look, on a ground of any colour — and Proving Ground's Water layer on the whole village: a design storm routed over the pile with every plinth in its way and every roof shedding at its eaves, the hollows that fill, where it leaves and the swale to carry it, in plan and 3D; Proving Ground's per-lounge sun, air and ground readings with every neighbour and the pile shading each; the Solar look and the daylight factor on every floor; the wind between the lounges — Proving Ground's Air layer on the sealed village, streamlines moving at the air's speed over a speed plane draped 5 ft over the ground — and the two-winds study, January's and July's wind at pedestrian height as a ratio to the empty site; every organization read side by side; and the hours each lounge sits downwind of the high ground (the pile); export the village on its ground to Rhino (surfaces or mesh), a watertight STL, the plan as SVG, the readings as CSV and a nine-plate sun study of the 3D view (the equinox and both solstices, morning, noon and afternoon). Save this study keeps an arrangement — with its view and look — in the Studies box, Proving Ground's own filmstrip, to step through and compare. Or WRITE YOUR OWN RULE: say your organizing principle in words and the AI writes it as a short program you can read and change, which then arranges the village like any organization. Everything but asking the AI is client-side and works without an account. TWO VERSIONS (the Version strip under the header, or /ensemble?v=2): V1 ARRANGE is all of the above; V2 LIVING GROUND grows a woody planting across the same village — many futures at once, every one planting the same trees, each with its own luck and drought years — on the village's own water (the landform's wetness, each roof shedding at its eave), sun (cast past the lounges and the pile) and wind (the Air layer between the lounges), and draws each planted tree's survival odds as how broken its ring is, volunteers as stipple and drought deaths as fading scars.

VersionArrange nine studies on the real ground and read what each organization asks of it — the sun, the air, the water and the earth.

Organizing rules your class has published. Load one to run it on your site, then change it in the box under Organization. Publish yours here when it's ready.

To publish a rule, make one first — change an organization or write your own in the box under Organization.

0 of 60 on this browser

No studies saved yet. Arrange the village, then press Save this study (or Save, top right — the same thing): it keeps the whole arrangement with its view and 3D look, so you can step through several with ◀ Prev / Next ▶ and compare.

Built from Proving Ground's own program at its default sliders.

Method: Your Proving Ground studies are read straight from this browser's storage (Proving Ground's own Save study ledger, in the browser's IndexedDB), never copied or changed; a program study is rebuilt from its code and sliders, a Rhino import from its mesh.
Loaded: 4 Rectangles — V7 default
Make a study in Proving Ground ↗ (opens in a new tab)

Plinth 36 ft × 30 ft · 18 ft tall · tested with its long side running E–W. Make one in Proving Ground (V7 → Save study) and it appears here when you come back to this tab — or import a lounge from Rhino below.

Import a lounge from Rhino

Bring in a lounge you modelled in Rhino — no Proving Ground study needed. Set the plinth’s layer to floor / plinth: the lounge is copied by its plinth, long side on the grid. It comes in as geometry only, without Proving Ground’s sun, air and view readings. Scale figures and notation layers are left out.

Reading the lounges kept on this browser…

Bring the village back from Rhino

Export the village (Export › Rhino .3dm): every lounge is on its own Lounge 01, Lounge 02 … layers, with a small L-shaped pin on its Notations layer. In Rhino, move, turn or scale a lounge (select its layer, pin included), delete one, copy one onto a new Lounge NN layer, or redesign one — then bring the file back. Rhino wins: the number of lounges, where each stands and what each is become the file's. The ground and the organization stay this page's.

Load the coordinate you saved in the Surveyor (or paste one — from Google Maps or a classmate, 36.9958, -94.8284; degrees-minutes-seconds work too — or press a studio site): the village stands on the landform there. Then drag the box on the key map, or use the two shift sliders, to try the ground around it; the landform is fetched again where you put it. Copy hands back the coordinate the ground is read at.

Where the village stands — your coordinate or a studio site

Load coordinate — saved in the Surveyor

Looking up your saved coordinates…

Your saved coordinates are the rows the Surveyor's ★ Save coordinate writes to your account (the surveyor_sites table, owner-only by row-level security) — the survey's centre: the pin you dropped, the place you searched, or a studio site's anchor.

Key map

The ground is on Tar Creek, at 36.99580, -94.82840. The map shows ½ mi across.

The key map is drawn in feet east and north of the anchor — the coordinate you loaded, typed or surveyed, or a studio site's anchor — north up. The square is a window on that frame: it opens on the ground box, holds still while the box is moved inside it and follows the box when it reaches the edge; the crosshair is the anchor, or an arrow at the edge points to it with the distance. A drag, a click or an arrow key moves the SHIFT; the shift is converted to a latitude and longitude through the same equirectangular projector the terrain client uses (lib/site-analysis/geo → makeProjector) and the landform is fetched again there. The imagery under it is Esri World Imagery or the USGS topo map, the same keyless tiles Relief's key map and the Surveyor draw; the loupe fetches the same tiles two zoom levels closer.

36.99580, -94.82840 · on the anchor

Drag the box — or click anywhere — to move the ground; the map follows the box when it reaches the edge. Arrow keys nudge it 10 ft; hold Shift for 1 ft. The crosshair is Tar Creek; the box is the Ground extent the massing stands on. The loupe shows the ground under the pointer at ×3 (on the box while the map has keyboard focus).

Imagery: Esri World Imagery

Tar Creek — Lead + zinc — ore mining, Picher + Miami, Oklahoma. Pinned on the chat-pile complex toward Picher — the gray tailings mountains fill the study box, the tallest pile's summit about 1,400 ft to the east. Standing on the anchor itself, 36.99580, -94.82840. …

Each button stands on that site's SURVEY ANCHOR — the studio's chosen survey point inside the EPA zone (studio-sites-data), not the NPL layer's own reference point, which can be a town hall or a road junction. The same five anchors ground the Surveyor, Eco-Architect and the Ecolounges map. The shift moves the COORDINATE, not a window onto a grid: feet east/north of the site's anchor are converted to degrees through the same equirectangular projector the terrain client uses (lib/site-analysis/geo → makeProjector), and the landform and the sun's latitude are re-read at the moved point. The weather year is NOT re-read on a move: ERA5's cell is ~15 miles across, so a mile of shift is the same year (pressing a site, or loading a coordinate, is what fetches one). Relief's two sliders re-cut a survey it already holds; here the ground is fetched again where you put it. This version fetches the landform, seats the massing on it and casts the solar layers on it, but its readings are the bench read — the terrain is not in them. V2 Grounds, V6 Site forces and V7 put the same five grounds into the score.

Now: reading….

ft
Method: The side of the square of ground fetched and drawn. The terrain is resampled to 97 × 97 points across it (the tiles themselves are roughly 13–33 ft resolution).

Show more ground: widen the square — the landform is fetched again around the site. Wider takes in more of the pile; narrower resolves the slope under each plinth.

Contour lines · 0.6 / 1.2 px · ink
px
Method: The line weight of every contour, in screen pixels (the same weight at any zoom, and in the SVG export). 0 hides them.
px
Method: The heavier line drawn every fifth contour (every 5 × the interval), in screen pixels. 0 hides them.

Ink follows light/dark; a chosen colour stays put (and goes into the SVG export).

ft
Method: The organization's own interval — the grid's bay, a ring's spacing, a path's station step. Never closer than a plinth plus a clear gap, whatever you set — unless Hold within the max span draws it closer.

Now 275 ft between the farthest two plinth edges (lounges 1 and 9). Off — turn on Hold to keep the village within the span.

ft
Method: The distance between the village's two farthest plinth edges — outer edge to outer edge, over every plinth corner — may not exceed this. When the organization runs past it, every lounge's offset from the Centre is scaled by one factor, the largest that fits (a ternary search for the tightest, then bisection), which is the organization drawn at a smaller Module; plinths keep their size and turn, lounges you placed by hand stay put and are measured with the rest, and nothing is pushed apart after, so a span too tight shows as overlapping plinths. First turned on, it is the side of the board at the scale picked beside the Scale Model Outline (288 ft at 1/8"=1'-0"; the tick marks it): a span no more than the board's side always fits the board (a set whose farthest points are D apart is never wider than D either way). The ordering grid's snap comes after and can carry it back out; the note above says when.

Provocation

Method: The force the challenge below asks the village to answer. A prompt, not a test: change the design and the reading under it follows.

The prevailing wind comes from the west at 11 mph (5 m/s). Make the village answer it: turn the lounges edge-on so the air slips between them, or broadside so a few shelter the rest — and say which lounges take the weather.

Now:

Try: Rotation · Turn each lounge (Orientation and seat) · the Air group shows the wind between them.

Every organization, category by category: site forces, the real sites, the rules that redraw, geometry, people, the family, time.

Method: Filters the Organization list below to one category of sheets — Site forces first. Prev, Next and Cycle step inside the chosen category. If the organization on the page isn't in it, the page shows the category's first.

Equal intervals in two directions. Every lounge takes a node: the grid answers to a measurement, not to the ground. Redrawn for your count and ground.

Change it — or make your own

Your words change an exact copy of this organization; the copy becomes your rule. The original stays in the list.

Method: What the words in the box change. The organization on the page (the default): a change to it — on a built-in, to its exact copy (its fork), which becomes your rule; on your rule, a change to that. Nothing: a new rule from your words alone, in a fresh conversation. Either way the AI writes a short program you can read and edit, and asking it needs you signed in.
Ideas — sun, wind, water, view and more

Site forces

A rule reads the ground — height, slope, the way water runs, the contours — and the compass. So say the sun as the south and a wind as the bearing it comes from; then check the village in the Daylight, Air and Water groups, which run the real studies.

For this organization

A press puts the words in the box; change them if you like, then send.

How Grid works — and how to say it

Say it in plain words

Put the lounges on a square grid about the Centre, as close to square as the count allows. Space the bays one Module apart, never less than a plinth plus a 12 ft walk. Fill the grid row by row from the north-west corner, every lounge square to the grid, and turn the whole grid by the Rotation. Draw the grid lines.

That paragraph is enough to build it from nothing — choose Start from: Nothing and paste it in, or give it to anyone building a tool like this. Any organization can be said the same way: where it starts (the Centre, the summit, a contour), the figure and its numbers (rows, a ring, arms — in Modules or feet, with a smallest gap), how each lounge turns (square to the figure, along the contour, facing a point), and what happens when it doesn't fit (push apart, step down, leave it out).

How the code works

  1. 0.Draw about (0, 0); then turn it by the Rotation and move it to the Centre.
  2. 1.As square as the count allows: columns = the square root of the count, rounded up.
  3. 2.One bay = the Module, never less than a plinth plus a 12 ft walk.
  4. 3.Fill the nodes row by row from the north-west; every lounge square to the grid.
  5. 4.Draw the grid lines through the nodes, half a bay past the last ones.
  6. 5.The page's Drift (the slider), as the built-in gets it: each lounge nudged and turned a little, then pushed apart.

The steps are the program's own numbered comments. site holds the page's numbers (the count, Module, plinth, Centre, Rotation, Drift, the ground's summit and low point); lib holds the moves (lib.place puts a lounge down, lib.spread pushes overlaps apart, lib.stream deals the organization's own dice from the Seed, lib.drift applies the page's Drift, lib.layDrawing lays a sheet drawing on the site, lib.guide draws a dashed line). The full library is in Under the hood.

Exact: untouched, the fork places every lounge where the organization does — the same arithmetic, the same dice for the same Seed, the same push-apart, the same Drift (a drawing: its own rows, laid by the page's own method). The tests run both through the page's own pipeline and compare them. Two things a rule doesn't take: Family and Size and Height variation (a drawing's own sizes do travel with its rows); and the Frame holds a rule, so where the organization would run past the site box, the fork's lounges are moved inside it (the page says so).

The program
// A fork of Ensemble's Grid organization [grid]. Change it by asking the AI, or edit it here.
function organize(site, lib) {
  // 0. Draw about (0, 0); then turn it by the Rotation and move it to the Centre.
  const cosR = Math.cos(site.rotation * (Math.PI / 180)), sinR = Math.sin(site.rotation * (Math.PI / 180));
  const at = (u, v) => ({ x: u * cosR - v * sinR + site.centre.x, y: u * sinR + v * cosR + site.centre.y });
  const world = (p) => { const q = at(p.x, p.y); return { x: q.x, y: q.y, rot: p.rot + site.rotation }; };
  // 1. As square as the count allows: columns = the square root of the count, rounded up.
  const cols = Math.ceil(Math.sqrt(site.n));
  const rows = Math.ceil(site.n / cols);
  // 2. One bay = the Module, never less than a plinth plus a 12 ft walk.
  const sx = Math.max(site.module, site.plinth.w + 12);
  const sy = Math.max(site.module, site.plinth.d + 12);
  // 3. Fill the nodes row by row from the north-west; every lounge square to the grid.
  const placed = [];
  for (let k = 0; k < site.n; k++) {
    const c = k % cols, r = Math.floor(k / cols);
    placed.push(world({ x: (c - (cols - 1) / 2) * sx, y: ((rows - 1) / 2 - r) * sy, rot: 0 }));
  }
  // 4. Draw the grid lines through the nodes, half a bay past the last ones.
  const ex = ((cols + 1) / 2) * sx, ey = ((rows + 1) / 2) * sy;
  for (let c = 0; c < cols; c++) { const x = (c - (cols - 1) / 2) * sx; lib.guide([at(x, -ey), at(x, ey)]); }
  for (let r = 0; r < rows; r++) { const y = (r - (rows - 1) / 2) * sy; lib.guide([at(-ex, y), at(ex, y)]); }
  // 5. The page's Drift (the slider), as the built-in gets it: each lounge nudged and turned a little, then pushed apart.
  lib.placeAll(lib.drift(placed, "plain"));
}
Method: How many copies of the study. Nine is the brief; the calendar allows 7–12 Elements. A rule that redraws places exactly this many; a sheet drawing has nine (fewer shows the first n, more still places nine); your own rule places what its tests allow.
°
Method: Turns the whole organization about its centre, degrees counter-clockwise from east.
%
Method: Seeded irregularity over the organization (mulberry32, seed × 101 + 9): at 100% each lounge is nudged up to a quarter module and turned up to 20° (a chain only turns; Contour, Field vectors and a sheet drawing fitted to the slope keep the ground's turn), then pushed apart so nothing stacks. A sheet drawing is nudged on the hill it was drawn on, a quarter of its 80 ft module, before it is fitted to this ground. The Seed makes it repeatable.
%
Method: Seeded (mulberry32, seed × 37 + 21, its own stream): each lounge is scaled by 2 to the power ±½ × this, so at 100% anything from 0.71× to 1.41× — plan and height together, on top of the size its organization or family gave it — then pushed apart as the organization allows. The study scaled, a stand-in for a lounge modelled at that size in Proving Ground.
%
Method: Seeded (mulberry32, seed × 41 + 29, its own stream): each lounge's height alone is scaled by 2 to the power ±½ × this, so at 100% 0.71× to 1.41× — its plan stays put, so nothing is pushed. Every storey, window and roof is stretched with it: the study scaled, not re-designed.
Method: The starting point of every seeded draw (mulberry32): the seven organizations that are random by nature (Cluster, Chain, Twigs, Striated, Field vectors, Collision, Open field), which lounge is small, medium or large, Size and Height variation, Drift — each on its own stream, so turning one up never re-deals the rest — and lib.random() in your rule. It reaches every generator and every sheet drawing. Type any whole number: the same seed, organization and settings always rebuild the same arrangement, so a classmate can type yours and get your village.

A new seed re-deals Drift's nudges and turns.

Centre x 0 ft · y 0 ft
ft
ft

In 3D, grab the centre pin on the ground and drag it, or open the Plan window above the view and drag its ⊕ — the village moves in 3D as you go.

Drag any lounge in the plan to place it by hand (it stays put in this organization).

0 of 8
Open the 3D view to save one.

Kept with the study when you Save this study — so your teaching team and your class can load your views from Class studies.

No views saved yet. Find a viewpoint in the 3D view, then press Add view.

Plan — Grid, 9 loungesGrid: 9 copies of “4 Rectangles — V7 default” on a stand-in mound. Drift 35% breaks it out of its own symmetry (seed 1). Turned the organization's own; the farthest lounge is 27° off the orientation the study was tested at. The plinths step through 0 ft of height; the worst fall under one plinth is 0 ft. Balance: about 0 cubic yards of cut and 0 of fill under the plinths. The closest two plinths are 33 ft apart. The farthest two plinth edges are 275 ft apart.The site a 3'x3' physical model holds at 1/8"=1'-0": one inch of model is 8 ft, so 36 in × 8 = 288 ft on a side. Test another board beside the button: Model size sets its side (24" to 72" in 6" steps), Model scale how many feet of site each inch holds. Drawn dashed, square to north, about its own centre (the ◇): it starts on the organization's Centre and follows it; drag the ◇ or the dashed edge to set the board where your base sits, and it stays there while the village moves, so the composition can sit off-centre on the board.Model board centre: drag the dashed edge to move the board288'x288' — 3'x3' physical model at scale: 1/8"=1'-0"123456789The site a 3'x3' physical model holds at 1/8"=1'-0": one inch of model is 8 ft, so 36 in × 8 = 288 ft on a side. Test another board beside the button: Model size sets its side (24" to 72" in 6" steps), Model scale how many feet of site each inch holds. Drawn dashed, square to north, about its own centre (the ◇): it starts on the organization's Centre and follows it; drag the ◇ or the dashed edge to set the board where your base sits, and it stays there while the village moves, so the composition can sit off-centre on the board.N0100 ft

Grid

Equal intervals in two directions. Every lounge takes a node: the grid answers to a measurement, not to the ground. Redrawn for your count and ground.

A field of equal bays. The grid is indifferent to what is under it, which is its power and its problem: on a mound, a waste bed or a slag terrace some nodes land on the top, some on the flank, some at the toe, and the plinths have to do very different work to hold the same plan. Use it when you want the village to read as one decision; then let the ground show up in section.

Dashed lines: the grid lines through the nodes.

Precedent: Aldo van Eyck's Amsterdam Orphanage (1960): many small domed units held by one grid.

What the ground and the grid say

0 ft
0.0 ft
0 / 0 cu yd
33 ft
27°
no grid
0.88 ac · 252 ft × 254 ft
275 ft
Each lounge — worst fall 0.0 ft, seats 0 ft to 0 ft
#SeatFallRidgeΔ testedGap
10′0.0′ENE–WSW27°34′
20′0.0′ENE–WSW26°34′
30′0.0′ENE–WSW25°44′
40′0.0′ENE–WSW20°43′
50′0.0′ENE–WSW26°33′
60′0.0′ENE–WSW19°33′
70′0.0′ENE–WSW26°43′
80′0.0′ENE–WSW22°39′
90′0.0′ENE–WSW18°39′

Sun, air and ground — lounge by lounge

Proving Ground’s own readings, run once per lounge with every neighbour and the pile shading it — the arrangement’s effect on each copy. The site's weather year could not be fetched just now, so the wind is Proving Ground's placeholder, 11 mph (5 m/s) from the west, and the season dials are placeholders too — not this site's.

Reading each lounge…

Compare the organizations

The same 9 copies of 4 Rectangles — V7 default, the same ground and weather, arranged by each of the fifteen generators — every one with your drift, grid, seat and hand moves — and Proving Ground’s per-lounge readings run on each. Each row is the village’s mean. Sort a column to see the spread; nothing here is ranked.

Upwind of the pile — hours downwind of the cap — not a dust or exposure model

How often each lounge’s air has just crossed the pile: the site’s high ground (at Tar Creek, the chat: lead- and zinc-bearing mine tailings). The pile is the ground above the toe height, outlined (dashed) in the plan.

ft
Method: The pile's footprint is the ground standing more than this many feet above the lowest ground in the site box. Raise it to read only the crown; lower it to take the whole heap and its apron. It opens at 40 % of the box's relief.

The site's weather year could not be fetched just now, so the wind is Proving Ground's placeholder, 11 mph (5 m/s) from the west, and the season dials are placeholders too — not this site's. The pile reading needs the hour-by-hour year, so it waits for it.

The ground

Reading the ground…

Grid: 9 copies of “4 Rectangles — V7 default” on a stand-in mound. Drift 35% breaks it out of its own symmetry (seed 1). Turned the organization's own; the farthest lounge is 27° off the orientation the study was tested at. The plinths step through 0 ft of height; the worst fall under one plinth is 0 ft. Balance: about 0 cubic yards of cut and 0 of fill under the plinths. The closest two plinths are 33 ft apart. The farthest two plinth edges are 275 ft apart.

Ensemble · Good Tools