Let's simulate a random snowflake
Bash and ImageMagick
#!/bin/bash

third=()
x=90
y=90
while (( x&gt;10 )); do
  (( dx=RANDOM%10 ))
  while :; do (( dy=RANDOM%21-10 )); (( y-dy&lt;95 )) &amp;&amp; (( y-dy&gt;(x-dx)/2 )) &amp;&amp; break; done
  third+=(
    -draw &quot;line $x,$y $(( x-dx )),$(( y-dy ))&quot;
    -draw &quot;line $x,$(( 200-y )) $(( x-dx )),$(( 200-y+dy ))&quot;
    -draw &quot;line $(( 200-x )),$y $(( 200-x+dx )),$(( y-dy ))&quot;
    -draw &quot;line $(( 200-x )),$(( 200-y )) $(( 200-x+dx )),$(( 200-y+dy ))&quot;
  )
  (( x-=dx ))
  (( y-=dy ))
done

third+=(
  -draw &quot;line 90,90 90,110&quot;
  -draw &quot;line $x,$y 15,100&quot;
  -draw &quot;line $x,$(( 200-y )) 15,100&quot;
  -draw &quot;line 110,90 110,110&quot;
  -draw &quot;line $(( 200-x )),$y 185,100&quot;
  -draw &quot;line $(( 200-x )),$(( 200-y )) 185,100&quot;
  -draw 'color 20,100 filltoborder'
  -draw 'color 180,100 filltoborder'
)

convert \
  -size '200x200' \
  xc:skyblue \
  -background skyblue \
  -stroke 'white' \
  -strokewidth 1 \
  -fill 'white' \
  -bordercolor 'white' \
  -fuzz 10% \
  &quot;${third[@]}&quot; \
  -rotate 120 \
  -crop '200x200' \
  &quot;${third[@]}&quot; \
  -rotate 120 \
  -crop '200x200' \
  &quot;${third[@]}&quot; \
  -draw 'ellipse 100,100 15,15 0,360' \
  x:

Sample run:
bash-4.1$ for i in {1..30}; do ./showflake.sh &quot;showflake-$i.png&quot;; done

bash-4.1$ montage showflake-*.png x: