There’s a particular kind of designer who ends up in creative code — not the ones chasing speed or slick interfaces, but the ones who get hooked on the quiet logic of making an image appear from nothing but instructions. Choi Gunhyuk is one of them. He describes his practice, almost off-handedly, as “mostly drawing with code,” a line that sounds simple until you begin to understand just how much sits inside it: years of trial and error, a growing archive of visual experiments, and a commitment to building his own tools rather than relying on whatever software happens to exist.
This interview explores how Choi draws with code, why he archives everything, his shifting relationship with typography, and what he’s learned — and unlearned — in the past few years.

Amber Weaver: Hi Choi, lovely to chat with you. So you describe your practice as “drawing with code”, i’d love for you to go into more detail about exactly what this looks like.
Choi Gunhyuk: I attended a coding class about making a calculator a few years before learning Processing, and I could hardly keep my interest or patience to study it. In retrospect, the key difference was that processing is a visual library, meaning that the final result of some code would be a drawing of sorts.
In a similar sense, I started studying how to use shaders to draw because, although they do have other general purposes, the most common function of a shader is to draw images onto a computer screen. It was kind of empowering to know that I could build my own funky rendering engine, instead of using some well-made software.
When I started making images with code, I was so taken aback by the ever-generating, interactive nature of creative coding that I did not stop and ponder how it would look when it was captured as a still image. This was when I stopped using interactions or real-time rendering altogether for a while and took more time deciding whether I liked individual still images generated from my code. I think seeing comes hand in hand with drawing, and for some time, I was having difficulty seeing the images made with code while it was in constant motion. Consequently, most of my endeavours were focused on figuring out how to draw with code, hence the description.

Although my goal was always to draw stuff with code, the more I learned to draw with code and received opportunities to collaborate with other graphic designers and artists, I found that my role was very quickly reduced to a person who can make something functional for them.
The reason I have come to terms with this situation is as follows: I often see a lot of artists start with a sketch that describes a shape they want to draw or make, and proceed to make a result that adequately matches the initial idea. But when a person creates images with code, I see a lot of cases where the first step is to just make some algorithm work, and iterate onward until one discovers a visual that they like. This workflow is inherently unsuitable for a project with a short timeline, and hence, the person working with code is deprived of the time that is needed to suggest something about the visual or concept.
So to be seen as an artist who can weigh in on the concept or visual of a project, I came to the conclusion that all the images and techniques needed for a project should be prepared and tested in advance, or at least something I have tried before. This was when I started thinking that I should be constantly practising drawing with code and archiving the byproducts, to build a visual archive of reference that would help me communicate with other collaborators or clients.
As a side note, I felt terminology like “creative coder” or “generative artist” kind of mystified what I like to do when introduced to the general public in Korea, so that was also one of the reasons I wanted a more intuitive description of my practice.

AW: What creative coding tools are you using to create your experiments at the moment?
CG: For the videos and images I post online nowadays, I am mostly using moderngl, a Python library that significantly simplifies code that controls OpenGL. I can use this to play with shaders and other low-level drawing methods that OpenGL is capable of. I use this with other Python libraries to save individual image samples, save multiple frames and make them into a video with moviepy if I like the result.
I first started creating images with code using Processing and p5.js, through the most gracious tutorials provided by Daniel Shiffman. I still use Processing occasionally. Then I was told by a teacher at my school, Minha Yang, to try out OpenFrameworks and shaders, so I tried that for a little while.
I graduated from school in the first year of the COVID-19 outbreak, and whether the graduation exhibition was being held physically or not was unclear throughout the year. So I started studying Three.js to make something similar to what OpenFrameworks can do with OpenGL, using WebGL. I used this a lot in web projects after graduation, mostly for clients.
I was then invited by Sey Min, who taught me processing for the first time, to join a study group that mainly discussed applications of machine learning models as a creative tool. This was when there were Google Colaboratory notebooks emerging left and right that made use of diffusion models. I was naturally drawn to use shaders with them, and because Colab is focused on a Python environment, I proceeded to find a Python library that could use shaders, which was moderngl.

AW: You seem to enjoy using type and numbers as core parts of your visual concepts. Is there a reason for that?
CG: I was aiming for something that remotely resembles a graphic poster in terms of style, and I was inclined to add typography as an extra layer in my work, as graphic posters often do. I also feel that using multiple layers in a graphic design poster describes space in a way a typical 3D scene would not, and this intrigues me.
In addition, I thought that using typography could benefit me in the sense that it could be seen by a wider audience with less ambiguity, compared to my code-generated images, which are just drawings of something abstract. Lastly, clients frequently ask whether you can put some text in it.
AW: Do you feel type as functional in your work, or purely a visual tool?
I think functionality comes from necessity, and so for me, the visuals with typography are intended mostly for my pleasure or for experiments on techniques. But there are some cases where the visuals would make little sense without typography, like when I am drawing a clock.
Also, I guess potential clients might see my work and think, “What if we can just change the text and use it for our project?”, so in that sense, it does always have a functional purpose.

AW: What opportunities do you see in the technical processes that you explore, in the context of a commercial client?
CG: I feel iteratively creating and experimenting with images using code has resulted in forming my own wonky visual library of sorts, and maybe this appeals to people who seek something weird for their projects. Also, I do see a lot of graphic design studios adapting creative coding to their work, so I am keeping my hopes up.
AW: What if someone wanted to learn creative coding? Where would you tell them to start?
CG: Until a few years ago, I would have said something like the coding train YouTube channel, which is a great place to start to learn p5.js or Processing. But since ChatGPT was introduced, I would definitely recommend ChatGPT or anything similar. But I guess you would need to inquire where to start first, and that would be maybe Processing.
I am aware that a lot of creative coders are critical of so-called “vibe coding” using such LLM-based services, which might present itself in the form of “I built this app in an hour”. Although it is much easier to lean into this aspect using ChatGPT, it is a great starting point, as any online resource, especially for people with limited access to schools or other forms of academic systems.
There seems to be a thin line between treating it as a building tool which can do jobs for you and treating it as a resource for education. If the end goal is to learn creative coding as a practice, which augments how a person can learn math, algorithms, I guess we should treat it more as a learning tool.


AW: Do you have any lessons for yourself if you could go back in time 3 years?
CG: I would tell myself not to worry so much about my identity as an artist, how I could be more like the people I aspire to be, or how I can keep going on making works with little money. I now like to imagine that the uniqueness of each creator comes from failures to be something that they are not, and from their individual lives, which are bound to be full of ordeals that inhibit them from going this way or another. I often find that some works that I like emerge from a series of unintended failures stacked over time, like the Messy Clock series that was recently featured on TYPE01.
This was a case where I tried learning CCD IK, to make a rigged animation for some 3D models, and failed, but thought that the arms were a bit like clock hands.
I wish to view my practice as a mode of life that iterates and diverges over time, and not as an end result, meaning the important thing for me would be to live life as it is, and keep going if I can.
AW: To wrap things up, any upcoming projects we should watch out for?
CG: I recently made some works for a group exhibition in Seoul organised by a residency program called Welt, and it has pushed me a little out of my comfort zone. It would already have been released to the public at the point this article is published. I am not so sure about how my work will be received, but certain that it has expanded my horizons a little wider. Three artists were asked to live about two months in a house together, and make collaborative work together, which would then be exhibited inside the house.
The other two artists had backgrounds in architecture, interior, and furniture design, so it would be fair to say we all experienced some ordeals in mixing our work. But I did make a physical version of the Messy Clock, a mirror, and a photobooth with Minjae Kim, and also some sort of robot with Gyuhan Lee.
Enjoyed this piece? Browse more of our creative code editorials here.








