# Parameters

Every setting, generated from `packages/core/src/params.ts`. Out-of-range values are clamped; integers are rounded.

| Setting | Element attribute | Range | Default | What it does |
|---|---|---|---|---|
| `lines.count` | `line-count` | 6 to 60 (integer) | 30 | How many contour lines cross the field. |
| `lines.width` | `line-width` | 0 to 1 | 0.26 | Stroke width of each contour line. |
| `lines.opacity` | `line-opacity` | 0 to 1 | 0.4 | How strongly lines show against the paper. |
| `lines.indexEvery` | `index-every` | 0 to 10 (integer) | 5 | Every Nth line is drawn bolder, like the index contours on a map. 0 turns it off. |
| `terrain.peaks` | `peaks` | 1 to 6 (integer) | 1 | Number of summits merged into the terrain. |
| `terrain.spread` | `spread` | 0 to 1 | 0.5 | How far extra peaks sit from the main summit. |
| `terrain.roughness` | `roughness` | 0 to 1 | 0 | Noise added to the slopes, from smooth hills to rocky ground. |
| `terrain.sharpness` | `sharpness` | 0 to 1 | 0.5 | Below 0.5 summits flatten; above 0.5 they sharpen into peaks. |
| `terrain.terracing` | `terracing` | 0 to 1 | 0 | Groups lines into stepped bands. |
| `terrain.variant` | `variant` | 0 to 1 | 0.5 | A knob that depends on the shape (for drifting lobes: three lobes to four). |
| `motion.speed` | `speed` | 0 to 3 | 1 | Animation speed. 0 holds a still frame. |
| `motion.warp` | `warp` | 0 to 1 | 0.47 | How much the lines wobble with the flow. |
| `motion.sparkle` | `sparkle` | 0 to 1 | 0.6 | Small bright dots travelling along the lines. |
| `layout.anchor` | `anchor` | 0 to 1 | 0 | 0 keeps the summit to the side, 1 centres it. |
| `layout.fade` | `fade` | 0 to 1 | 0.7 | Fades lines behind a central text column. |

Other settings:

- `look` (attribute `look`, React prop `look`): one of the looks below, by id. It sets the shape, seed, groups, colours and camera pose. The other settings next to it override its values. An unknown look is ignored with one console warning. In `update()`, a look replaces the design and keeps the view: `mode`, `elevation`, `extent`, `detail`, `quality`, `view2d`, and the camera motion and pan.
- `shape` (attribute `shape`, React prop `shape`): one of the shapes below. Unknown shapes fall back to `drifting-lobes` with one console warning.
- `location` (attribute `location`, React prop `location`): a real place instead of the generated terrain. A built-in id (`istanbul`, `cyprus`, `matterhorn`, `geirangerfjord`, `grand-canyon`, `yosemite`, `torres-del-paine`, `fuji`, `everest`, `kilimanjaro`), or a height grid `{ samples, size, aspect }` such as one from `fetchLocation()`. A built-in id also sets `camera.azimuth`, `camera.elevation`, `camera.radius`, `elevation`, `extent: 'block'`, `lines` (`{ count: 36, width: 0, opacity: 0.9, indexEvery: 4 }`) and `layout.fade: 0.15`, under the values you set. It does not set `mode`. Default `null`, the generated terrain. Unknown ids fall back to `null` with one console warning. See [api.md](api.md).
- `seed` (attribute `seed`): integer 0 to 999999. The same seed gives the same terrain; 0 is the original look.
- `theme.mode` (attribute `theme`): `auto` (follows the OS), `light` or `dark`.
- `theme.ink` / `theme.paper` (attributes `ink`, `paper`): any CSS colour; paper may be `transparent`. Without them, the CSS variables `--topographic-ink` and `--topographic-paper` are used, then the mode defaults.
- `mode` (attribute `mode`): `2d` (the library default) or `3d`. The playground opens a bare URL on Istanbul in 3D; see llms.txt. 3D draws the same contour field as a terrain. The same seed gives the same map in both.
- `elevation` (attribute `elevation`): 0 to 1, default 0.62. 3D height. 0 is flat like the 2D map; higher values make the terrain taller, with a rounded crest.
- `extent` (attribute `extent`): `endless` (default) continues the terrain past the view. `block` is a finite tabletop whose cut sides carry thin ink layer lines.
- `detail` (attribute `detail`): 0 to 1, default 0.5. Mesh resolution, from 32² to 160². Use a low value on a slow device.
- `quality` (attribute `quality`): `auto` (default), `low`, `medium` or `high`. `auto` starts a phone at low and a desktop at high, then steps down if frames miss 60 Hz, or 120 Hz once that refresh has been seen. It does not step back up. The other values stay put. The tier caps the pixel ratio, the pixel count and the mesh size.
- `camera.azimuth` (attribute `azimuth`): degrees around the terrain. Any finite number. Default 349.7.
- `camera.elevation` (attribute `camera-elevation`): degrees above the horizon, 2 to 80. The camera never goes below the terrain. Default 33.6.
- `camera.radius` (attribute `radius`): distance from the terrain centre, 0.4 to 6.5. Default 1.92.
- `camera.motion` (attribute `camera-motion`): `still` (default), `orbit`, `push`, `flyover` or `drone`. The terrain's own `motion.speed` still morphs the field, so the two motions are independent.
- `camera.speed` (attribute `camera-speed`): 0 to 3, default 1. How fast the camera moves along its path. 1 is the path's own pace, such as an orbit in about 26 seconds; 0 holds the camera.
- `camera.panX` / `camera.panZ` (attributes `pan-x`, `pan-z`): where the camera looks, moved from the terrain centre across the ground (east and south), -6 to 6, default 0. The camera and every motion path turn around that point. The renderer keeps it over the terrain.

## Shapes

| Id | Name | Description |
|---|---|---|
| `drifting-lobes` | Drifting lobes | Three soft lobes drifting off to the side, morphing towards four. |
| `granite` | Granite | Many small lumpy lobes with a stone-grain tint. |
| `five-petals` | Five petals | A breathing five-petal summit. |
| `seed-pod` | Seed pod | Two long lobes slowly turning, like a seed pod. |
| `gentle-summit` | Gentle summit | One soft, slightly oval hill leaning with the flow. |
| `long-ridge` | Long ridge | A long winding ridge with rounded ends. |
| `dunes` | Dunes | Long wind ripples with no summits. |

## Looks

A look is a named, finished design. The order is the order of the playground's dock. `survey-map` and `rocky` set no colours, so they follow the page's theme.

- `survey-ridge` (Survey ridge): `{"shape":"long-ridge","seed":113,"terrain":{"roughness":0.12},"lines":{"count":46,"indexEvery":5,"opacity":0.55,"width":0.12},"layout":{"fade":0.15},"theme":{"mode":"dark","paper":"#141414","ink":"#e8e6e1"},"camera":{"azimuth":349.7,"elevation":33.6,"radius":1.92}}`
- `fine-granite` (Fine granite): `{"shape":"granite","seed":191,"lines":{"count":54,"width":0.1,"opacity":0.62},"layout":{"fade":0.15},"theme":{"mode":"dark","paper":"#0b0b0d","ink":"#d7d2c8"},"camera":{"azimuth":79.7,"elevation":30,"radius":1.92}}`
- `wide-lobes` (Wide lobes): `{"shape":"drifting-lobes","seed":157,"terrain":{"peaks":3,"spread":0.75,"variant":0.4},"lines":{"count":30,"width":0.16},"layout":{"fade":0.15},"theme":{"mode":"dark","paper":"#12141a","ink":"#c9c2b4"},"camera":{"azimuth":79.7,"elevation":30,"radius":1.92}}`
- `rose-pod` (Rose pod): `{"shape":"seed-pod","seed":71,"motion":{"speed":0.55},"lines":{"count":24,"width":0.18},"layout":{"fade":0.15},"theme":{"mode":"dark","paper":"#1a1214","ink":"#f0b2a8"},"camera":{"azimuth":294.7,"elevation":34,"radius":2.3}}`
- `terraces` (Terraces): `{"shape":"gentle-summit","seed":131,"terrain":{"terracing":0.85,"peaks":2},"lines":{"count":36,"width":0.14},"layout":{"fade":0.15},"theme":{"mode":"dark","paper":"#16130f","ink":"#e0b089"},"camera":{"azimuth":294.7,"elevation":34,"radius":2.3}}`
- `high-dunes` (High dunes): `{"shape":"dunes","seed":227,"terrain":{"roughness":0.35},"lines":{"count":40,"width":0.14},"layout":{"fade":0.15},"theme":{"mode":"dark","paper":"#101614","ink":"#c6d6a8"},"camera":{"azimuth":14.7,"elevation":34,"radius":1.92}}`
- `moss-granite` (Moss granite): `{"shape":"granite","seed":53,"terrain":{"roughness":0.22},"lines":{"count":40,"width":0.14},"layout":{"fade":0.15},"theme":{"mode":"dark","paper":"#101614","ink":"#9dcec0"},"camera":{"azimuth":79.7,"elevation":30,"radius":1.92}}`
- `sea-dunes` (Sea dunes): `{"shape":"dunes","seed":97,"lines":{"count":48,"width":0.12},"layout":{"fade":0.15},"theme":{"mode":"dark","paper":"#0e1a22","ink":"#8ec4d4"},"camera":{"azimuth":14.7,"elevation":34,"radius":1.92}}`
- `night-flower` (Night flower): `{"shape":"five-petals","seed":179,"lines":{"count":44,"indexEvery":4,"width":0.12},"layout":{"fade":0.15},"theme":{"mode":"dark","paper":"#10151c","ink":"#a9c7e4"},"camera":{"azimuth":79.7,"elevation":30,"radius":1.92}}`
- `night-lobes` (Night lobes): `{"shape":"drifting-lobes","seed":11,"terrain":{"variant":0.15},"lines":{"count":22,"width":0.18},"layout":{"fade":0.15},"theme":{"mode":"dark","paper":"#0b0b0d","ink":"#9fb0cc"},"camera":{"azimuth":294.7,"elevation":34,"radius":2.3}}`
- `violet-pod` (Violet pod): `{"shape":"seed-pod","seed":211,"motion":{"warp":0.7},"lines":{"count":30,"width":0.16},"layout":{"fade":0.15},"theme":{"mode":"dark","paper":"#16131a","ink":"#b9a4e0"},"camera":{"azimuth":294.7,"elevation":34,"radius":2.3}}`
- `ink-petals` (Ink petals): `{"shape":"five-petals","seed":37,"lines":{"count":26,"width":0.2},"layout":{"fade":0.15},"theme":{"mode":"dark","paper":"#16131a","ink":"#cbb6ea"},"camera":{"azimuth":79.7,"elevation":30,"radius":1.92}}`
- `stepped-petals` (Stepped petals): `{"shape":"five-petals","seed":233,"terrain":{"terracing":0.72},"lines":{"count":28,"width":0.16},"layout":{"fade":0.15},"theme":{"mode":"light","paper":"#f6eef2","ink":"#6b3050"},"camera":{"azimuth":79.7,"elevation":30,"radius":1.92}}`
- `day-lobes` (Day lobes): `{"shape":"drifting-lobes","seed":83,"terrain":{"variant":0.92},"lines":{"count":28,"width":0.16},"layout":{"fade":0.15},"theme":{"mode":"light","paper":"#f6eef2","ink":"#5c3348"},"camera":{"azimuth":294.7,"elevation":34,"radius":2.3}}`
- `still-dunes` (Still dunes): `{"shape":"dunes","seed":163,"motion":{"speed":0},"lines":{"count":26,"width":0.14},"layout":{"fade":0.15},"theme":{"mode":"light","paper":"#f3ece4","ink":"#7a3e2e"},"camera":{"azimuth":14.7,"elevation":34,"radius":1.92}}`
- `rocky-spine` (Rocky spine): `{"shape":"long-ridge","seed":181,"terrain":{"roughness":0.62,"sharpness":0.22},"lines":{"count":34,"width":0.18},"layout":{"fade":0.15},"theme":{"mode":"light","paper":"#efe6d6","ink":"#5c3a28"},"camera":{"azimuth":324.7,"elevation":34,"radius":1.92}}`
- `pale-dunes` (Pale dunes): `{"shape":"dunes","seed":23,"lines":{"count":34,"width":0.16},"layout":{"fade":0.15},"theme":{"mode":"light","paper":"#efe6d6","ink":"#6b4630"},"camera":{"azimuth":14.7,"elevation":34,"radius":1.92}}`
- `stone-grain` (Stone grain): `{"shape":"granite","seed":127,"terrain":{"roughness":0.5},"lines":{"count":32,"width":0.16},"layout":{"fade":0.15},"theme":{"mode":"light","paper":"#e7e2d8","ink":"#3a342c"},"camera":{"azimuth":79.7,"elevation":30,"radius":1.92}}`
- `open-pod` (Open pod): `{"shape":"seed-pod","seed":149,"lines":{"count":20,"width":0.16},"layout":{"fade":0.15,"anchor":1},"theme":{"mode":"light","paper":"#f4f1ea","ink":"#2c2c2a"},"camera":{"azimuth":349.7,"elevation":38,"radius":1.92}}`
- `quiet-hill` (Quiet hill): `{"shape":"gentle-summit","seed":197,"lines":{"count":14,"width":0.14},"layout":{"fade":0.05},"theme":{"mode":"light","paper":"#f7f4ee","ink":"#2c2c2a"},"camera":{"azimuth":294.7,"elevation":34,"radius":2.3}}`
- `bloom` (Bloom): `{"shape":"five-petals","seed":101,"terrain":{"terracing":0.45},"lines":{"count":20,"width":0.18},"layout":{"fade":0.15},"theme":{"mode":"light","paper":"#f3efe6","ink":"#3c4a36"},"camera":{"azimuth":79.7,"elevation":30,"radius":1.92}}`
- `soft-summit` (Soft summit): `{"shape":"gentle-summit","seed":67,"lines":{"count":16,"width":0.16},"layout":{"fade":0.15},"theme":{"mode":"light","paper":"#e5eef0","ink":"#1e4650"},"camera":{"azimuth":294.7,"elevation":34,"radius":2.3}}`
- `paper-ridge` (Paper ridge): `{"shape":"long-ridge","seed":41,"terrain":{"sharpness":0.35},"lines":{"count":22,"width":0.16},"layout":{"fade":0.15},"theme":{"mode":"light","paper":"#f7f4ee","ink":"#3d4c63"},"camera":{"azimuth":324.7,"elevation":34,"radius":1.92}}`
- `centred-lobes` (Centred lobes): `{"shape":"drifting-lobes","seed":223,"terrain":{"variant":0.55},"lines":{"count":24,"width":0.16},"layout":{"fade":0.15,"anchor":1},"theme":{"mode":"light","paper":"#e7eef6","ink":"#243656"},"camera":{"azimuth":349.7,"elevation":38,"radius":1.92}}`
- `survey-map` (Survey map): `{"shape":"gentle-summit","lines":{"count":44,"indexEvery":5,"opacity":0.55},"terrain":{"peaks":3,"spread":0.6,"roughness":0.2},"motion":{"speed":0.4,"sparkle":0},"camera":{"azimuth":294.7,"elevation":34,"radius":2.3}}`
- `rocky` (Rocky): `{"shape":"long-ridge","terrain":{"roughness":0.55,"sharpness":0.3},"lines":{"count":36},"camera":{"azimuth":324.7,"elevation":34,"radius":1.92}}`
