Shape Opacity

Random Shapes Per Step

Shape Mutations Per Step


Rotated Rectangles



Rotated Ellipses



Shapes Added


Max Shapes Cap




Save Image

Save Svg

How It Works

This page uses the Geometrize Haxe library to recreate images with geometric primitives. Given a target image to recreate, the library generates hundreds of random shapes, and repeatedly mutates them as part of a hillclimbing optimization approach. Internally, the code uses a web worker to keep the webpage responsive while the geometrization algorithm ranks thousands of these shapes behind the scenes - only picking the best-fitting shapes for use in the final image.

The "run/pause" button starts or stops the geometrization process, the "step" button adds one primitive to the image when pressed, the "open image" button lets you select your own images, and the "reset" button clears all of the current shapes, starting again from scratch. The "save image" button saves a raster PNG of the geometrized image, while the "save SVG" button saves an infinitely scalable vector-based image.

Options can be changed through the "settings" section. The shape opacity slider controls the transparency of added shapes, while the random mutations and shapes per step parameters can be changed to strike a balance between speed and quality. The shape type checkboxes allow you to select the shape types used in the final image. If you want to leave an image geometrizing in the background, you can set a cap on the number of shapes to add.

For more information and tutorials, see this list of resources. Also check out Geometrizer, the Twitter bot built on top of my cross-platform desktop app, Geometrize.

If you have suggestions, requests or comments, please open an issue or contact me.

default image - this is the default image that will be geometrized into geometric primitives when the page loads