I had a little bit of time to spare, so I implemented the Abelian sandpile model, a classical example of a system displaying self-organizing criticality.
You can find the code here. It’s flexible but also reasonably fast, as the main loop is implemented in Cython.
Here you can see a video of dropping about 10 million grains on the sandpile.
I find the ideas around self-organizing criticality really amazing. Self-critical systems have a critical point as an attractor and many interesting properties originate from that. If you are interested, I really recommend reading How Nature Works: The Science of Self-Organized Criticality by Per Bak.