Open Call for pr05 (メモ)
このページは個人的なメモ書きです。何かあればご連絡ください。
https://github.com/processing/pr05-grant/
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.
beginShape()
vertex(30, 30)
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.
shape = Path.rect(20, 30, 80, 70)
shape = Path.roundCorners(shape, 10)
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.

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.
What is your motivation for contributing to Processing and p5.js projects?*
My motivation for contributing to the Processing ecosystem stems from my passion for making creative coding more playful and expressive for artists, particularly those with backgrounds in graphic design and accustomed to "declarative" design toolkits. By developing the "p5.path" library, I aim to introduce a new mindset for drawing shapes that moves away from command-based imperative API to a functional, intuitive approach. This library will enable a broader range of path manipulations, allowing artists to engage with shapes in more creative and exploratory ways than typically afforded by generative art's traditional focus on point clouds, wireframes, and overwhelming detail. My goal is to enrich the creative tech landscape by reintroducing the joy and diversity of 'playing with shapes', often overlooked in both Processing and the wider creative coding culture.
(873)
What do you hope to gain from this program?*
I hope to gain both financial support and a deeper cross-cultural understanding from this program. To be honest, financial support is crucial as it alleviates economic concerns, allowing me to focus on producing high-quality work. Additionally, while my engagement with the creative coding and generative art community has primarily been within the Japanese-speaking regions, I am eager to expand my perspectives and understanding by interacting with other cohorts. This will enable me to appreciate and integrate diverse cultural approaches and methodologies into my artistic practice, enriching both my personal development and the broader creative landscape.
How will you seek and incorporate feedback during your project?*
While I am not yet fully aware of the specific expertise my mentors possess, I am eager to learn more about their specializations so I can appropriately integrate their feedback into my project. Essentially, my preferred approach to receiving feedback is not just about getting direct answers, but rather learning the methodologies—akin to "teaching me how to fish, not just giving me a fish." Useful guidance for me would include references to scholarly articles, practical implementations, and articles about Bezier and spline manipulations. As someone who has struggled to access necessary information in English-speaking contexts, even fragmentary pieces of advice can be extremely beneficial.
How do you plan to document your project progress and outcomes?*
I plan to document my project progress and outcomes by initially releasing the "p5.path.js" library, which can be easily imported via CDN. The design of this library is agnostic to data representation formats, making it versatile for creative coders working with SVG or the Canvas API, not just those within the p5 community. As a visual artist, I will use the library to experiment with and create daily sketches of intriguing shapes and forms. These sketches will be shared almost daily on social media throughout the fellowship period, providing a practical showcase of "p5.path's" creative potential and engaging a wide audience in real-time. (653)
How do you plan to manage your time, particularly if you have other commitments during the program's duration?*
Actually, a significant number of fundamental features have already been implemented in "Pave.js," a path manipulation library I have been developing since February. "p5.path" will essentially be an adaptation of "Pave.js" for p5, meaning the most challenging hurdles have already been overcome. As for the daily sketches, I have experience with this practice, so I am confident it will go smoothly. Using this foundation, I will allocate specific time blocks each week dedicated solely to this project, ensuring consistent progress alongside my other commitments. I will prioritize important development milestones and adjust my workload to maintain a balance.