What is py5?

Py5 is a creative coding framework for Python 3.8+. Its use and functionality is analogous to the widely used Processing framework. It is a Python version of Processing.

Internally py5 uses Processing’s core libraries, which are written in Java, while providing the end user with a (mostly) seamless Python programming experience.

I started working on py5 in the Spring of 2020 when I was a Research Resident at ITP. It began as a diversion from my pandemic-related anxieties and grew into the library it is today. I intend to use it as an outlet for my artistic endeavors involving Python’s machine learning and data science tools and want to make it available and useful for other artists to do the same.

The py5 library itself is created by the meta-programming project py5generator. The source code for py5 and the source code for py5generator are both available on github.


I’d like to thank and acknowledge all the people who helped make py5 possible.

  • Ben Fry, Casey Reas, and the rest of the Processing team. Processing has been around for almost 20 years and is used by thousands for creative coding projects. Much of py5’s functionality is provided by the Processing core libraries. Py5 stands on the shoulders of giants.

  • Jonathan Feinberg and the rest of the Processing.py contributors. Processing.py is a Jython version of Processing, combining the same Processing core libraries that py5 utilizes with Jython, a Java implementation of Python. Processing.py is the spiritual ancestor to and inspiration for py5. Py5 is similar to Processing.py in that both use Python syntax but their implementations are very different. Processing.py and py5 do not share any code but py5 benefits from code in the Processing core libraries written to accommodate Processing.py.

    I’d also like to thank Jonathan Feinberg for building the awesome Processing library PeasyCam. PeasyCam is one of the Processing libraries I know to work well in py5.

  • The developers of the JPype and PyJNIus Python libraries. Both of these libraries allow Python code to interact with Java code in the Java Virtual Machine using JNI. Py5 originally used PyJNIus but later switched to JPype. PyJNIus is maintained by the Kivy project (which I am a member of). JPype’s lead developer Thrameos introduced us to their library and motivated me to switch.

  • Lauren McCarthy, who created p5.js, a JavaScript version of Processing. Lauren helped me understand the importance of developing the py5 Community. It is from p5 that py5 gets its name.

  • The ITP faculty, including Tom Igoe, Dan Shiffman, and Allison Parrish. All provided early feedback that provided guidance and helped keep me motivated. Allison also helped me understand the importance and value of the integrating py5 with Jupyter notebooks.

  • The ITP residents of 2019 to 2020, for putting up with me and being available to bounce ideas off of as I was in the early stages of developing this idea.