This program fills shapes with a Conway still life pattern.
If you don't adjust parameters, it typically may take
5 to 20 minutes for the algortithm to terminate on a 40 by 40 grid,
but it might take three hours, or not terminate. It's probably
best to restart with a different random configuration of life values
if a still life takes too long to arrive.
You can either choose a letter, by typing in the input field,
or else choose to fill another shape.
scale of mask: 1
Change grid size
Use your own image mask:
Life threshold values
Life count of cells in grid
This is a kind of
Conway game of life, except
instead of having cells only alive (value 1) or dead (value 0), we have a range of life values from 0
to 1, increasing in steps of a variable life increment. The cell is considered to be
alive if it's life value is greater than or equal to the life threshold.
Apart from this, the rules are the same as in the usual Conway game of life.
The point of this is to generate high density still life patterns filling simple shapes.
This is possible because the still life configurations are the same independent of the parameters.
However, different parameters are more likely to lead to still life configurations.
These are not generally maximal density patterns.
The density can be worked out
from the displayed dot count.
Choose a shape, letter, or image as a mask.
Click the step button to increment life generation, or else click on auto button to auto increase.
The program attempts to stop running when a still life is
achieved. However, it might make a mistake, and stop
when there is still a non still region, so you can click
the step incrememnt button to check there is no change left
to be made.
Use the sliders to change the parameters life threshold,
and life increment. These change the characteristics of the
game. I do not allow life threshold 0, since then everything vanishes, because then everything is alive, so
in the next generation everything is dead.
When the parameter is quite low, we tend to
stabalise to a high density almost still life situation. When the parameter is high, we tend to
stabalise to a low density still life. For intermdiate parameter, the life is less
stable. By varying the parameters, we can generally end up with a stable still life position eventually.
Set all parameters to 1 for the traditional Conway life game.
Description of colours in default colour choice:
A black dot is a fully live cell - life val 1
A white square is a fully dead cell - life val 0
A green square is at least half alive - life val ≥ 0.5
A magenta square is half dead - life val < 0.5
By using green and magenta, it makes it easier to see when still life is achieved: this is when
the picture becomes monochrome
This still life is a wrap round as on a torus
In this version of the game, I am changing the life value by randomly chosen pixel,
one by one,
rather than changing the whole screen at once. Changing everything at once needs all
computations done at the same time, via another intermediate storage array. This
what the usual game of life should use. However, to aim for stability, it seems better to change one at a time.
I have tied the outside mask life threshold value to the closeness of this
game to the regular Conway game of life, so actually I take a linear combination of
the two, which seems to work better in quickly approching still life.
Images can be downloaded in jpg, svg, latex, or plain text format, though they don't look exactly the same.
The dynamic image on this page is produced with WebGL. The image at the bottom is svg output,
which just marks life cells as squares. The other images on this page are the jpg downloaded from this program,
or another very similar one with red background.
The number of times cells are inspected for possible change is
displayed. The average number of actual changes per cell
is also displayed, and
the total number of milliseconds elapsed since beginning the
process is shown. These numbers are given after the "restart"
When the shape is mostly filled with still life regions, sometimes
a small area can have a peristant local minimum configuration
that persists for a long time.
In order to move from the local mimimum to a better solution,
when there are less than
cells in an indeterminant state
(neither value 0 nor 1),
I make the life threshold value in the mask
for a duration of
then it is reset to 0.05,
where it will remain for at least
These values can be changed with these
The time until the first triggering of this event (short period of
increased life threshold) will appear after the "colour choice"
selector, followed by the number of times this event is triggered.
In order to reduce the amount of CPU used, the screen
is updated less frequently when N>50. Whether or not the CPU usage is
a problem will depend on your device. On my laptop, it's best not to have
You can upload your own image to use as a mask shape.
The image should be black and white, since intermediate shades will just be
interpreted as black or white, possibly not in the way expected.
Effect of different grid size
These are all versions of the letter B, created with the same mask,
but ending up with different
versions of B because of the different grid size used.
Circle image is example of the svg output produced.
"LIFE" is written as just dot form still life, and then with a texture put on
the underlying pattern. The "colour choice" drop down menu gives a few options for different colourings. Some other examples of possible textures are
Some different interpretations of the same still life result.
This took about 20 minutes to produce, 115785000 cell considerations,
average of 150 changes per cell. Circle on 100x100 grid.