The Snowflake Machine

Our new Snowflake Machine uses random numbers, mathematical algorithms, computer code, and SCIENCE to create well over a billion unique and beautiful snowflakes. But all you have to do is press a button; from the Thingiverse link, press “Open in Customizer” and then choose a random seed. You can make over a billion different 3D-printable snowflakes, including this one:

large_flake_3_preview_featured (4)

How does the Snowflake Machine work?

The Snowflake Machine generates snowflakes with an algorithm that approximates the way that some kinds of snowflakes grow in real life.

Stellar plane crystal snowflakes start from a hexagonal prism seed and then grow outward with branches and plates whose size and positions are determined by the temperature and humidity of the atmosphere.

To mimic this process, the OpenSCAD code behind the Snowflake Machine generates sequences of random numbers based on a random seed that you select, and then grows a snowflake design by adding branches or plates in each step. The random number sequences and the style parameters whose values you select with the Customizer sliders act like the temperature and humidity of the air around the snowflake, making it more or less likely that different formations will be generated.

Here are some of the many sizes and shapes of snowflakes you can create with just this one OpenSCAD file:

small_flake_2_preview_featured (2)  large_flake_1_scale_preview_featured  micro_flakes_preview_featured (1)

large_flake_2_scale_preview_featured  tiny_flakes_quarter_preview_featured (1)  small_flake_3_preview_featured

large_flake_2_preview_featured  small_flake_4_preview_featured  medium_flake_1_scale_preview_featured

Tips and tricks for snowflake design

Here is some advice for getting the most out of the Snowflake Machine whle using the Thingiverse Customizer (or in OpenSCAD):

  • Once you set a seed, you can change style sliders to alter the look and feel of the snowflake. Or you can change the seed again to generate more random snowflakes whose formation patterns are governed by your style slider settings.
  • If you like a particular seed, then write it down so you can come back to it later! Once you change the seed value your old seed will be lost forever, like a melted snowflake.
  • Mathematically perfect snowflakes (with “organic” set to zero) generate more quickly and also print faster. But snowflakes with a random/natural look (with larger “organic” parameter values) look more realistic and stylized.
  • Snowflakes with six steps and medium style settings will be approximately the size of the orange preview circle. You can go up to 11 steps, but the snowflakes usually look best when they have between 4 and 7 steps.
  • The best way to change the target size of your snowflake is to set the “target_diameter” parameter to your desired size. This will change the size of the orange target circle, and adjust lengths and widths accordingly in the algorithm.

It’s worth keeping in mind that sometimes things look good on the screen but don’t come out exactly how you expect when they are actually printed. If you keep track of your seed values, then you can iterate your design and make it better. Below is a photo that illustrates such an iteration, with the initial design on the left and the updated design on the right. Based on the outcome of the initial design, I turned down the “organic” and “fat” parameters and increased the “fuzzy” and “sharp” values to get a cleaner and more detailed design.


It’s a little bit difficult to see snowflake details in the small Customizer window within Thingiverse. If you’d rather work with a larger, faster preview then you can download a free copy of OpenSCAD, download the snowflakerator.scad file from the Snowflake Machine, and then generate random snowflakes directly in OpenSCAD. To do this, you modify the parameters in the editor on the left-hand side, and then press “F5” to see the result. UrbanAtWork made a great video of the Snowflake Machine in action in OpenSCAD:

Leave a Reply

Your email address will not be published. Required fields are marked *