World generator using simulation of plates, rain shadow, erosion, etc.

Project maintained by Mindwerks Hosted on GitHub Pages — Theme by mattgraham

Announcement: Lands and WorldSynth have been merged to create WorldEngine

Lands has been recently merged with WorldSynth. We are now working on merging the code, taking the best of the two projects.

We started a google group: if you have ideas, problems, suggestions or want to contribute please join us!

WorldEngine - a world generator

Build Status Build status

Last Lands version: 0.5.3, Last WorldSynth version: 0.12, First WorldEngine version will be 0.18

You can generate worlds data (heighmap, biome, etc.) and images for your own worlds.

For example:

# WorldEngine
worldengine world -s 1 -n seed1

# Lands 0.5.1 or next
lands world -s 1 -n seed1

# Lands 0.5.0 or previous
python lands/ world -s 1 -n seed1

Worlds are generated using plate simulations, erosion, rain shadows, Holdridge life zones model and plenty of other phenomenons.

Once a world it can be used for simulation civs evolution (see project civs).

For a generated world is also possible to generate additional maps, for example ancient looking map:

# WorldEngine
worldengine ancient_map -w

# Lands 0.5.1 or next
lands ancient_map -w

# Lands 0.5.0 or previous
python lands/ ancient_map -w


An experimental (and limited!) GUI is available.


Note: it requires to install QT (available here


Using pip

# Currently not yet released on pypi, you may want to still use Lands or WorldSynth
# or alternatively download the source
pip install worldengine

From source code

git clone or download the code

# before using worldengine: if you plan to change the code
python develop 

# before using worldengine: if you want just to install worldengine
# on unix-ish system you could have to prepend sudo
python install

On Windows

If you want to install Worldengine on Windows you can read these instructions.

Executable file is also available under releases, but is currently out of date.

Note: you need also a copy of the worldengine src directory in the same folder as the exe.


The gui is based on QT, so you will need to install them


The program produces a binary format with all the data of the generated world and a set of images. For examples seed 1 produces.

Elevation Map

Precipitation Map

Temperature Map

Biome Map

Ocean Map


worldengine [options] [world|plates|ancient_map|info]

Note that options were changed in version 0.5.3

General options

Short Long Description
-o DIR --output-dir=DIR generate files in DIR default = '.'
-n STR --worldname=STR set world name to STR
-b --protocol-buffer save world using protocol buffer format (smaller file)
-s N --seed=N use SEED to initialize the pseudo-random generation
-t STR --step=STR use STEP to specify how far to proceed in the world generation process. Valid values are: plates precipitations full
-x N --width=N WIDTH of the world to be generated
-y N --height=N HEIGHT of the world to be generated
-q N --number-of-plates=N number of plates
--recursion-limit=N you need that just if you encounter an error while generating very large maps
-v --verbose Enable verbose messages
--bw --black-and-white Draw maps in black and white

Options valid only for generate

Short Long Description
-r FILE --rivers=FILE produce a map of reivers, after the option it expects the name of the file where to generate the map
--gs=FILE --grayscale-heightmap=FILE produce a grayscale heightmap, after the option it expects the name of the file where to generate the heightmap
--ocean_level=N elevation cut off for sea level (default = 1.0)

Options valid only for ancient map operations

Short Long Description
-w FILE --worldfile=FILE WORLD_FILE to be loaded
-g FILE --generatedfile=FILE name of the GENERATED_FILE
-f N --resize-factor=N resize factor

For example these commands:

worldengine world -s 4 -n an_example -p 2048 -q 25 -x 2048 -y 2048

Produce this output

Worldengine - world generator
 seed              : 4
 name              : seed3
 width             : 2048
 height            : 2048
 plates resolution : 2048
 number of plates  : 25
 operation         : world generation
 step              : full

starting (it could take a few minutes) ...
...plates simulated
...elevation noise added
...elevation level calculated
...precipations calculated
...erosion calculated
...humidity calculated
...permeability level calculated

Biome obtained:
     subtropical thorn woodland =   16353
                tropical desert =     188
             boreal rain forest =   69472
        tropical thorn woodland =   19680
            subpolar dry tundra =    6316
      warm temperate wet forest =   17799
            subpolar wet tundra =   24453
          subpolar moist tundra =   15104
            tropical wet forest =   18441
           subpolar rain tundra =   79723
           tropical rain forest =    5906
                            ice =   85254
          tropical moist forest =   28871
        subtropical rain forest =   14733
            boreal moist forest =   24395
              boreal wet forest =   35212
         subtropical dry forest =   26259
       subtropical desert scrub =    3256
       subtropical moist forest =   25220
    cool temperate desert scrub =   11162
          cool temperate steppe =   25604
               boreal dry scrub =   13403
            tropical dry forest =   22415
       tropical very dry forest =   27033
          tropical desert scrub =    2473
    warm temperate moist forest =   27704
    warm temperate desert scrub =    4861
     warm temperate rain forest =   10774
    cool temperate moist forest =   42770
      cool temperate wet forest =   52813
      warm temperate dry forest =   29992
                          ocean = 3314282
          cool temperate desert =    2950
             subtropical desert =     287
          warm temperate desert =     709
     cool temperate rain forest =   46844
         subtropical wet forest =   18280
                  boreal desert =    5445
     warm temperate thorn scrub =   16175
                   polar desert =    1693

Producing ouput:
* world data saved in './'
* ocean image generated in './an_example_ocean.png'
* precipitation image generated in './an_example_precipitation.png'
* temperature image generated in './an_example_temperature.png'
* biome image generated in './an_example_biome.png'
* elevation image generated in './an_example_elevation.png'

This is the corresponding ancient map

worldengine ancient_map -w


The world generation algorithm goes through different phases:

Install dependencies

Using virtualenv you can install the dependencies in this way

Python 2:

virtualenv venv
source venv/bin/activate    
pip install -r requirements2.txt

Python 3:

pyvenv venv3
source venv3/bin/activate    
pip3 install -r requirements3.txt

Do you have problems or suggestions for improvements?

Please write to us! You can write at f dot tomassetti at gmail dot com Thank you, all the feedback is precious for us!


Libjpeg and libtiff are required by PIL


The merged project is maintained by Bret Curtis and Federico Tomassetti.

All contributions, questions, ideas are more than welcome! Feel free to open an issue or write in our google group.

We would like to thank you great people who helped us while working on WorldEngine and the projects from which it was derived:


WorldEngine is available under the MIT License. You should find the LICENSE in the root of the project.