Open Call for pr05
Describe the project you intend to develop during the fellowship. How does it address one or more of the 2024 focus areas (Archival Practices: Code & New Media, Open-Source Governance, Disability Justice in Creative Tech, Access & AI)? ( <= 500 words)
I will develop a new library called “p5.path̦” for p5.js, which specializes in path manipulation.
Processing has followed the tradition, dating back to PostScript and Design By Numbers (DBN), of using an imperative and stateful approach for graphics programming. For example, we calls primitive functions like rect and circle, and draw polylines with the vertex function. This is like coding the exact steps of moving a brush across a canvas. But following this analogy, you cannot bend a shape by simply rubbing it with your finger, once you draw it. code:js
beginShape()
vertex(10, 10)
vertex(60, 30)
vertex(20, 80)
endShape()
On the other hand, the new paradigm I propose in p5.path — if you don’t mind technical terms — will treat path objects as persistent and immutable data. By filtering, transforming, or composing them in a functional programming manner, we can manipulate shapes more freely and flexibly.
code:js
shape = Path.rect(20, 30, 60, 40)
shape = Path.roundCorners(shape, 5)
shape = Path.warp(shape, Warp.flag(0.5))
Path.draw(shape)
This is similar to wire crafting. It is like bending and cutting wire until you get a desired shape then stamping it onto a canvas. This approach brings a new mental model in the way of drawing in creative coding.
This project might sound hardcore and look way too focused on technical R&D rather than cultural and social initiatives. It might also not directly respond to either of the four focus areas. Nevertheless, from the perspective of an artist who still believes possibilities to expand the methodology of creative coding, these topics feel presuming that Processing as an ecosystem has matured sufficiently and no longer requires significant functional updates.
I certainly recognize their importance. And I even envision this project as a way to broaden the appeal of creative coding to individuals from diverse skills and backgrounds, while also enriching the aesthetic diversity of generative art.
As an experimental filmmaker, I've been more aligned with the video production industry than media art, and I've been surrounded by talented artists such as graphic designers, illustrators, and animators who may not have programming experience. Yet I've often felt that if these artists could adopt a generative approach, it would open up many more possibilities for expression. I have grappled with the gap between iterative, hands-on creation methods such as editorial design and stop motion, and parametric, generative techniques.
Drawing is a procedural act. Yet digital design, such as desktop publishing and non-linear video editing, is actually more declarative. In other words, what we are doing in design software is rather the destructive editing of “what kind of elements the graphics are made of” than describing an instruction of 'how the graphic should be drawn.”
The canvas and sketch analogy adopted in Processing may seem intuitive at first glance, but who has a brush in hand is not an artist but a program. Artists must constantly instruct this inflexible agent on how to move their brush up, down, left, and right to draw desired graphics. This difference in mental models and the certain indirectness have been barriers for non-programmers to naturally incorporate creative coding into their design process.
While it may seem contrary to my principles to take proprietary software as an example -- imagine the Appearance window in Adobe Illustrator.
https://scrapbox.io/files/6632f0f57c65d8002339af4d.png
There is a rectangular path with filters such as Round Corners and Warp: Flag stacked beneath it. The pseudocode I wrote earlier for p5.path is similar to this mechanism. Artists simply need to describe “a warped rectangle with round corners” without having to worry about each coordinate or the control points of Bézier curves after these filters are applied. The design principle of p5.path that I mentioned earlier, “declarative, immutable, and functional-programming oriented” might sound overly technical and appealing only to code snobs. However, the system I propose offers an intuitive paradigm of graphic programming, especially for those used to graphic software, and even provides accesibility to those not accustomed to algorithmic thinking.
Every tools have a certain type of power gradient. (『Beyond the Artifact: Power as a Lens for Creativity Support Tools』) They may align with artist's needs to empower them to realize what they imagine, whereas their specifications also structure and limit how artists can think and express themselves, both explicitly and unconsciously. In this sense, creative coding strongly guides an artist's thinking based on its underlying technologies like PostScript or OpenGL. For instance, much generative art emphasizes patterns, detailedness, and automation. Often, the elements used in such graphic works are like circles, rectilinear wireframes, or point clouds, and the uniqueness of their contour itself tends to be overlooked. Over the past few months, I have been developing and playing with the base library for p5.path, and found joy not just in its utility and efficiency, but in how it augmented my own inspiration about shapes. While p5.path is not a self-contained library on its own, I believe it can complement the ecosystem, community, and culture that Processing has nurtured over the decades, and can help artists in exploring freer ideas and more diverse styles.
Outline the technical methods, tools, or frameworks you plan to use in your project. How will these choices support the goals of your project? (<= 500 words)