This page covers installation, a first run, the data downloader, the run dialog, the outputs, and troubleshooting. The introduction explains the model itself, the theory page relates it to the published model, and the scenario library provides prepared data and parameters to start from.
isobenefit engine and, if
missing, offers to install it into the QGIS Python environment (this requires an internet connection).
Restart QGIS once it finishes.If the automatic install is not available or not working on your system, run the shown command yourself with the QGIS Python:
<qgis-python> -m pip install "isobenefit>=0.12.18,<0.13"
The fastest route uses the OSM downloader for the data and accepts most defaults.
scenarios folder beside the downloaded data (numbered upward when
earlier runs exist); all of the run’s files take the name.<name>_params.json. To repeat or
adjust the run later, use Load parameters at the top of the dialog.If the first result shows less growth than expected, some constraint is usually binding harder than intended for the place. The usual suspects, in order: the target population against the iterations available (the run report states both); the centre walk, which bounds growth around each centre until a new one seeds; a minimum green span wider than the gaps growth would need to fill; and unbuildable land fragmenting the window. The troubleshooting section walks through each.
To start from a prepared case instead, use a scenario download, described in the next section.
Each entry in the scenario library downloads as one ZIP with the data and parameters for a run.
extents*.geojson (the study boundary), the input layers (built, green,
centres, unbuildable, industrial, streets, railways, stops, stations), the
terrain bands (steep.geojson), and one or more params*.json presets.steep.geojson holds slope bands (15° / 20° / 25° / 30°) from the Copernicus
GLO-30 elevation model. The bands at or above the scenario’s maximum slope belong in the
unbuildable layer (Vector → Data Management Tools → Merge Vector Layers).params.json fills in the dialog.Downloading and simulating are separate steps. The layers are on disk and can be edited or swapped before any run. The simulation dialog recognises the downloaded layers and pre-selects them.
Parameters. Load parameters repopulates the dialog from a previous run’s
*_params.json sidecar or from a scenario preset. Every run writes such a sidecar next to its
output.
Simulation.
| Field | Default | What it does |
|---|---|---|
| Max iterations | 100 | Cap on growth steps; a run stops early at the target population |
| Grid size (m) | 50 | Cell size of the simulation grid |
| Target population | 100,000 | New residents to house; growth stops once reached (checked between iterations, so the final count can slightly overshoot) |
| Build probability | 0.25 | Per-step chance an eligible cell develops (the growth rate) |
| Dispersed development | Moderate | Leapfrog rate: Off / Moderate / Aggressive |
| Random seed | 42 | The same seed reproduces the same run and the same ensemble, independent of core count |
Walkable access. Centre walk (800 m) and Green walk (400 m): how far people walk to a mixed-use centre and to a park. The defaults follow common practice: a ten-minute walk to a neighbourhood centre, and everyday green within the stricter reach the WHO and Natural England standards use. During growth the engine uses one walk radius for its checks, set to the larger of these two values, so growth is never cut off by the stricter one mid-run. The finished plan is then scored against each walk separately, and any shortfall shows in the coverage figures and steers the centre re-positioning.
Post-processing.
| Field | Default | What it does |
|---|---|---|
| Optimise centre placement | on | Re-position centres central to their development, add one wherever new development lacks a centre of its own (a nearby existing centre does not stand in), cull redundant ones; saves moderately and tightly clustered options. Off keeps the grown centres (one plan) |
| Centre area (m² per person) | 20 | Mixed-use centre land provided per new resident served |
| Min settlement (people) | 1000 | A detached new cluster housing fewer people than this reverts to green (converted to cells via the mean density); the raw plan keeps everything for comparison |
| Min green span (m) | 400 | A green patch must span this to count as a park; also a build rule protecting corridors |
Development density. Three densities (people per km²) for the high, medium and low tiers, each with a share. The dialog requires positive, strictly descending densities and shares between 0 and 1 that sum to 1; the feedback line shows the running total and the mean. Every new block is built at one of the three densities; post-processing arranges the highest nearest the mixed-use centres.
Output. Development likelihood (the default) blends many runs; the Detail picker sets how many (Quick 10 / Standard 50 / Thorough 100). Untick it for a single run written as a growth animation. The output folder and run name determine where the run’s files land (see Outputs below); the CRS must be a local projected CRS (a suggestion is made from the extents layer; geographic lat/lon CRSs are rejected so the model always works in metres).
Input layers. Extents (required, polygon) plus optional existing urban, existing green, unbuildable, urban centres (points or polygon areas), PT stops, and rail/tram stations. All layers may be in any CRS; they are reprojected to the chosen run CRS.
The Run button stays disabled until four things are set: an extents layer, an output folder and run name, a projected CRS, and valid densities and shares. The red status line names whichever are missing.
Ensemble mode writes a family of files into the output folder, sharing the run name:
<name>.tif (the
built and green likelihood bands), <name>_existing.tif (the starting fabric),
<name>_pre.tif (the chosen run before post-processing), <name>_moderate.tif and
<name>_tight.tif (the two clustering options, each coloured by density tier: built as a
yellow-to-brown ramp, mixed-use centres as a reds ramp, existing fabric muted),
<name>_report.txt (parameters and per-option statistics) and <name>_params.json (the
reloadable settings). QGIS loads them as a layer group in that order.
Every population figure counts new residents only; existing fabric is assumed served by its own centres. The per-person readouts follow the same convention: m² of mixed-use centre per person is new centre land over new residents, and m² of green per person is new green over new residents. Coverage percentages include every home, existing and new.
Single-run mode writes one band per growth step. QGIS loads it as a temporal animation: open View → Panels → Temporal Controller, press the play button, and the town grows step by step.
<name>_params.json, and load back with the dialog’s Load parameters button.