Author: Scott Pollard

  • What if washing up looked like a solar eclipse?

    What if washing up looked like a solar eclipse?

    Sometimes an idea for a project doesn’t come from looking for one.

    I was doing the washing up after breakfast and noticed the sediment left in the bottom of a cereal bowl. The liquid had drained away, leaving behind a strange collection of stains, particles, darker edges and almost vein-like structures.

    I took a photograph.

    At first, I was simply interested in whether I could recreate some of those textures using Processing. But there was something else about the shape that seemed familiar.

    A dark crescent.

    And, by coincidence, this Wednesday evening there’s a major solar eclipse.

    Suddenly the experiment had a direction.


    Cereal bowl inspiration No 1
    Cereal bowl inspiration No 2

    From cereal bowl to crescent

    I wasn’t particularly interested in recreating the photograph pixel for pixel. What interested me was working out why it looked the way it did.

    There seemed to be a few different things happening:

    • a large area of very diluted colour;
    • pigment collecting more heavily in one area;
    • thousands of tiny particles spreading away from it;
    • occasional larger deposits;
    • branching, vein-like structures;
    • areas where the sediment had disappeared completely.

    Instead of drawing a crescent, I wanted to create a system that could produce something that felt like one.

    The main structure is therefore made from hundreds of individually generated curves.

    for (int i = 0; i < 650; i++) {
    
      float startAngle =
        radians(105) + radians(random(-20, 35));
    
      float endAngle =
        radians(255) + radians(random(-35, 20));
    
      // draw the sediment curve...
    
    }

    The important part here is the randomness in the starting and finishing angles.

    My first attempts gave the crescent very obvious straight edges. Giving every strand a slightly different length allowed the sediment to gradually break apart instead.



    An accidental eclipse

    Once the crescent began appearing, it was difficult not to see an eclipse in it.

    That’s particularly timely because on 12 August 2026 a total solar eclipse will cross parts of the Northern Hemisphere, with a deep partial eclipse visible from the UK.

    I liked the idea of taking two completely unrelated events from the same week — washing a cereal bowl and looking forward to an eclipse — and allowing one to influence how I interpreted the other.

    The code isn’t actually drawing the Sun or Moon.

    There are no circles being placed on top of one another to manufacture an eclipse symbol.

    Instead, the illusion comes from the distribution of sediment.



    Making sediment with code

    The smallest particles are just ellipses.

    Lots of them.

    float d = random(0.4, 2.1);
    
    fill(0, alpha);
    
    ellipse(
      x,
      y,
      d,
      d
    );

    On their own they’re nothing particularly interesting.

    The important part is where they appear.

    Each particle originates somewhere around the crescent before being allowed to drift away from it.

    float drift =
      pow(random(1), 2.2)
      * width
      * 0.52;
    
    float x =
      sourceX + drift;
    
    float y =
      sourceY
      + randomGaussian()
      * (12 + drift * 0.18);

    Using:

    pow(random(1), 2.2)

    means most of the particles remain relatively close to their source while progressively fewer travel a long distance.

    It’s a very small mathematical decision, but visually it makes the particles feel as though they are dispersing from something, rather than simply being sprinkled randomly across the canvas.


    A little imperfection

    One detail I particularly liked in the original bowl was that the darkest sediment wasn’t uniformly dark.

    There were tiny holes and lighter particles within it.

    So I added a deliberately limited number of white sediment particles over the black.

    int fineCount =
      int(random(70, 130));
    
    float d =
      random(0.7, 2.7);
    
    fill(
      255,
      random(100, 210)
    );
    
    ellipse(x, y, d, d);

    There aren’t many.

    That’s intentional.

    Too many and it starts looking like a graphic effect. A small number helps break apart the otherwise dense black area.


    Adding washed-out colour

    The original photographs also contained very subtle colour.

    Rather than creating a palette of unrelated colours, the sketch starts with just one:

    color baseColour = #208FA0;

    Processing then generates lighter tones by mixing that colour with white.

    washLight =
      lerpColor(
        baseColour,
        color(255),
        0.84
      );
    
    washMid =
      lerpColor(
        baseColour,
        color(255),
        0.58
      );
    
    washDeep =
      lerpColor(
        baseColour,
        color(255),
        0.25
      );

    That gives me several concentrations of effectively the same pigment.

    The lighter tones form the watery areas while the darker tones sit closer to the sediment.

    The black particles remain black, which keeps the contrast of the original experiment.

    And because everything comes from one hex value, I can completely change the character of the image by changing a single line of code.



    One set of rules, many eclipses

    The finished sketch doesn’t actually have a finished composition.

    Pressing R creates a new random seed.

    void generateNew() {
    
      seed =
        int(random(1000000));
    
      redrawArtwork();
    }

    That seed controls the proportions, sediment, texture and rotation.

    So every generation is related, but none is identical.

    Sometimes the result looks very obviously like an eclipse. Other times it looks more like ink, a microscopic image, a coastline or something geological.

    I prefer that ambiguity.

    The eclipse was the inspiration for the form, rather than something the program has been instructed to illustrate.


    Turning the light off

    There’s also an inverted version.

    Pressing I switches between the light and dark compositions.

    if (key == 'i' || key == 'I') {
    
      inverted = !inverted;
    
      redrawArtwork();
    }

    Importantly, it doesn’t generate another random seed.

    The same artwork is redrawn with the relationship between light and dark reversed.

    It felt particularly appropriate for a project that had unexpectedly become about an eclipse.


    Look at the washing up

    I like that this project started with something as mundane as doing the washing up.

    There was no plan to make an eclipse artwork.

    I noticed some sediment in a cereal bowl, wondered whether I could reproduce it with code, started experimenting with particles and curves, and then realised the forms I was producing connected with something happening in the sky a few days later.

    A cereal bowl gave me the texture.

    An eclipse gave me the form.

    Processing gave me a way of connecting the two.

    And on Wednesday evening, assuming the British weather cooperates, I’ll hopefully get to see the other version.


    One last thought…

    I’m wondering what happens if I take these back out of the computer. I’m thinking of printing a few of the black-on-white versions and adding washes of real watercolour by hand — bringing some of the unpredictability of the original cereal-bowl sediment back into the finished pieces.

    Code, ink, water and a little randomness.

    Watch this space…

  • Study 03: Random

    Study 03: Random

    What if the computer only gave the instructions?

    For Study 003, I wanted to move away from using code to create the finished image.

    Instead, the computer would simply tell me what to do.

    The Processing sketch creates an invisible square grid. Each position in the grid is randomly assigned one of seven possible instructions:

    .↓      Colour 1 / down
    ..↓     Colour 2 / down
    ...↓    Colour 3 / down
    
    .→      Colour 1 / right
    ..→     Colour 2 / right
    ...→    Colour 3 / right
    
    blank   No mark

    The number of dots tells me which of three brush pen colours to use, while the arrow tells me whether to make the mark horizontally or vertically.

    That’s all the computer decides.


    Random within rules

    Unlike the previous two studies, there isn’t a mathematical relationship between one grid position and the next.

    Processing randomly chooses from the seven possible outcomes:

    int outcome = int(random(7));

    This means every generated sheet is different, but the randomness is still tightly controlled. The computer can only choose from the rules I’ve given it.

    Adding the blank or null instruction turned out to be particularly important. Without it, every position had to contain a mark and the results became very dense. Empty cells introduce gaps and allow irregular areas of white space to form naturally.



    From code to paper

    I printed the generated instructions onto A4 paper in a very light grey and then worked through the grid by hand with three brush pens.

    This is where the computer loses control.

    The algorithm determines the colour, position and direction, but it can’t determine exactly how I make the mark. Pressure changes. Lines aren’t perfectly straight. Some strokes are wider than others. Colours behave differently on the paper.

    Repeating the same generated process with different sets of three colours also produces surprisingly different results.

    What starts as a rigid grid of random computer instructions becomes something much less precise once it’s interpreted by hand.

    For me, that’s the interesting part of this study: the code creates the rules, randomness creates the composition, and the hand creates the final image.


  • Study 02: Addition

    Study 02: Addition

    For the second experiment in this series, I wanted to keep the rules almost identical to the first project and change just one thing.

    Study 01 used multiplication to determine the rotation of each line. This time, I’ve replaced the lines with outlined squares and changed the mathematics from multiplication to addition.

    The question became:

    What if every square knew where it was?

    Each square sits within a regular grid. Its position is described by two values: its column and its row. Instead of multiplying those values together, I simply add them.

    float angle = radians(column + row);

    Every square is then rotated by the angle produced from that calculation.

    The result is surprisingly different. Squares that share the same column + row value also share the same rotation, creating gentle diagonal bands that flow across the composition. Where the multiplication project felt more complex and unpredictable, this one feels calmer and much more structured.

    Nothing else changes.

    • The grid remains fixed.
    • Every square is the same size.
    • Every outline has the same weight.
    • Only the mathematical relationship has changed.

    This is what fascinates me about working in code. A tiny adjustment to a single formula can completely alter the visual language of the piece.

    Like the first project, this isn’t about creating a finished artwork. It’s about asking a simple question, changing one variable, and observing what happens.

    Sometimes the smallest mathematical change produces the biggest visual surprise.

  • Experiments: What if every line had a memory?

    Experiments: What if every line had a memory?

    What if every line could remember the moment it was created?

    This project explores that thought by treating every line as its own little life. Each one is born with a timestamp, a unique set of characteristics and its own colourful identity. Some grow quickly, some take their time. Some live long lives, while others disappear much sooner.

    As each line ages, it slowly grows, changing direction as it travels. Every twist and turn becomes part of its story. Although the movement appears random, each line is confined to its own invisible space, giving every life a set of boundaries it can never leave.

    When a line reaches the end of its lifespan, it doesn’t simply vanish. It fades to a soft grey and remains on the canvas as a memory of where it has been, while a new generation begins its own journey.

    Watching the artwork over time reveals hundreds of small, individual stories unfolding at once. Some areas become dense with memories, while others remain surprisingly sparse. No two runs are ever the same.

    Like many of my projects, this started with a simple question. It isn’t trying to represent anything literally; it’s more about exploring how a few straightforward rules can create something that feels surprisingly human.

  • How AI Helped Me Bridge the Gap Between Code and Art

    How AI Helped Me Bridge the Gap Between Code and Art

    I’ve always felt like I’ve had one foot in two different worlds.

    I’ve been creating art for as long as I can remember, and I’ve worked as a developer for years. The strange thing is that those two passions rarely overlapped as much as I wanted them to.

    When you’re learning to code professionally, your focus is very different. You’re learning how to solve problems, build websites, create applications and deliver reliable products. It’s practical, structured and driven by deadlines. There isn’t always much room to explore creativity through code.

    That meant there was always a gap between the ideas I could imagine as an artist and the code I was capable of writing.

    A few years ago I took some fantastic courses by one of my biggest inspirations, Joshua Davis. They introduced me to Processing and the HYPE Framework, opening my eyes to generative art and what was possible when design and programming came together.

    It completely changed how I thought about code.

    Even so, I still felt limited. I understood the concepts, but many of the ideas in my sketchbook felt just out of reach. I knew what I wanted to create, but I didn’t always know how to translate those thoughts into algorithms.

    Then came ChatGPT.

    For me, AI hasn’t replaced the creative process—it has unlocked it.

    Instead of staring at a blank editor wondering where to begin, I can now describe an image that’s only ever existed in my head. We can discuss the mathematics behind it, break down the logic, experiment with different approaches and iterate rapidly until the code starts producing something unexpected and exciting.

    More importantly, the conversation doesn’t stop once the first version works.

    What if the shapes reacted to sound?

    What if the colours were driven by live data?

    Could gravity affect typography?

    What if every square behaved like its own tiny organism?

    Those are the kinds of conversations that happen almost daily now. One idea naturally leads to another, and projects evolve far beyond where I originally imagined they would.

    It’s also become an incredible learning tool. Rather than simply copying code, I can ask why something works, explore different mathematical approaches, simplify algorithms and understand concepts that would previously have taken days of research.

    Every project teaches me something new.

    The more I create, the more confident I become writing Processing sketches myself. AI isn’t writing my artwork—it has become a creative collaborator that helps me turn abstract ideas into working prototypes that I can refine, question and develop.

    Looking back, the biggest barrier wasn’t a lack of imagination.

    It was the distance between imagination and implementation.

    AI has shortened that distance dramatically.

    This blog is becoming a record of that journey—experimenting, learning, making mistakes and discovering new ways to combine art, mathematics and code. Every project starts with a simple question: “What if…?”

    Now, for the first time, I feel like I have the tools to find the answer.

  • Climate Loom — Weaving Weather into Generative Art

    Climate Loom — Weaving Weather into Generative Art

    Weather is something we all experience, yet it’s often reduced to numbers on a chart or icons on a forecast. For this project I wanted to explore a different approach by translating decades of climate data from North West England and North Wales into an abstract woven composition.

    Using Java and Processing, the artwork is generated from historical Met Office climate datasets covering rainfall, sunshine and maximum temperatures. Rather than plotting the information as a conventional graph, each data series influences a different visual characteristic, allowing the climate to emerge as a textile-like structure.

    Rainfall is represented through dashed threads that build density and rhythm across the composition. Sunshine introduces bright yellow strands and small bead-like markers that punctuate the weave, creating moments of light amongst the darker fibres. Temperature is expressed as a flowing gradient, shifting from cool blues to warm reds, giving the piece an additional layer of movement and seasonal character.


    One of the most striking patterns isn’t just that the summers are getting warmer, but that the warmth is lingering for longer, gradually stretching further into autumn and delaying the onset of winter.


    One of the most enjoyable parts of the project was discovering how a simple woven structure could communicate such complex information. The result isn’t intended to be read as a chart. Instead, it encourages the viewer to experience the data first as an artwork before gradually recognising that every thread is responding to genuine climate records.

    Developing the project also became an exercise in balancing aesthetics with information. Too much emphasis on the data and the composition lost its visual appeal; too much abstraction and the connection to the climate disappeared. Finding that middle ground became the focus of the design process.



    The sketch is fully generative, meaning each composition is created programmatically while remaining rooted in historical weather observations. Features such as animated fibres, interactive colour modes and woven layering help transform static datasets into something that feels organic and alive.

    This project continues my exploration of using code as a creative medium, where information becomes material rather than simply content. By treating climate data as texture, rhythm and structure instead of statistics, the work aims to reveal familiar weather patterns from an entirely different perspective.

    Although this is an early iteration, there are plenty of directions to explore next. I’m interested in introducing more complex weaving behaviour, allowing threads to respond to long-term climatic trends, and experimenting with larger-format outputs where the fine details become even more immersive.

    As with many of my Processing projects, the goal isn’t to create a digital chart or dashboard, but to build something that sits somewhere between data visualisation, generative art and printmaking—using code to uncover beauty hidden within everyday information.

  • Exploring p5.js

    Exploring p5.js

    Most of my recent generative art projects have been built with Processing and Java. It’s a workflow I’ve really enjoyed because it keeps the focus on the code and the creative process.

    Lately, I’ve started exploring p5.js. It takes many of the ideas from Processing and brings them into the browser using JavaScript, making it easy to create interactive sketches that anyone can experience without installing anything.

    One of the main reasons I’m experimenting with p5.js is to make this blog more interactive and visual. Instead of only sharing finished images, I’ll be able to embed live sketches that visitors can explore and interact with directly on the page.

    I’m not moving away from Processing—far from it. Processing will remain my main tool for creating high-resolution prints and posters, while p5.js opens up new possibilities for interactive experiences on the web.

    It’s another creative tool to add to the collection, and I’m excited to see how it shapes future projects.

  • Study 01: Multiplication

    Study 01: Multiplication

    Learning from Vera Molnár — Study 01: Multiplication

    When people look at early computer-generated art, it’s easy to focus on the finished image. What interests me is the thinking that produced it.

    This project marks the beginning of a series inspired by the methods of Vera Molnár, one of the pioneers of computational art. Rather than attempting to recreate her work, I’m exploring the kinds of mathematical systems that shaped it. The aim isn’t imitation; it’s understanding.

    To do that, I’ve imposed a number of deliberate constraints. Every study in this series will begin with a simple mathematical rule and a minimal visual language. The artwork should emerge from the logic of the system, not from decoration or visual effects.


    Starting with the simplest possible system

    For the first study I wanted to use the smallest possible set of ingredients.

    • A3 portrait format
    • A regular grid
    • One line positioned in the centre of every square
    • Black lines on an off-white background
    • No colour
    • No animation
    • No randomness
    • One mathematical operation

    Nothing more.

    The challenge was to discover whether something visually interesting could emerge from almost nothing.


    Why multiplication?

    Multiplication is one of the most fundamental operations in mathematics.

    Unlike randomness or noise, multiplication is entirely deterministic. Given the same two numbers, it will always produce the same result. That predictability makes it an ideal starting point when exploring algorithmic drawing.

    Every line in the composition is positioned according to its location within the grid.

    Each square has two values:

    • its column number
    • its row number

    Those two numbers are multiplied together.

    Angle = Column × Row

    That single calculation determines the orientation of every line on the page.

    There are no exceptions.

    No adjustments.

    No artistic intervention once the rule has been defined.


    Angle = Column × Row

    From arithmetic to drawing

    If we imagine the grid beginning in the top-left corner, the first few values are surprisingly simple.

    ColumnRowMultiplication
    000
    100
    200
    111
    224
    4312
    8648
    1115165

    Those results are then interpreted as rotation angles.

    Small numbers produce only slight changes.

    As the values increase, the lines rotate further.

    Although the underlying calculation remains extremely simple, the visual complexity gradually increases across the page.

    Nothing has been randomised.

    The pattern is entirely generated by elementary arithmetic.


    The invisible grid

    One of the most important decisions was not what to draw, but what not to draw.

    The square grid exists only as a mathematical structure.

    It isn’t printed.

    The viewer never sees it.

    Instead, it acts as an invisible coordinate system that provides every line with two pieces of information: its row and its column.

    Without the grid there is no calculation.

    Without the calculation there is no composition.

    The geometry exists before the drawing.


    Thinking like an early computer

    This project is written in Processing using Java, but the algorithm itself could be described without referring to any programming language.

    1. Create a grid.
    2. Number every row.
    3. Number every column.
    4. Multiply the row and column numbers.
    5. Rotate a line by the resulting value.
    6. Repeat for every square.

    That’s the entire system.

    Modern software makes it easy to implement, but the underlying idea doesn’t depend on modern computing power. It’s a sequence of instructions that could be described on paper before a single line is programmed.


    Constraint as a design tool

    One of the things I’m beginning to appreciate is that removing possibilities often leads to stronger ideas.

    It’s tempting to add colour, texture or movement, but each additional decision moves the work away from the central question.

    Can a single mathematical operation generate a compelling image?

    For this study, I wanted the answer to depend entirely on multiplication.

    Everything else was intentionally stripped away.


    Reflections

    Looking at the finished print, I find it interesting that the eye naturally begins to search for order.

    Diagonal rhythms begin to appear.

    Clusters seem to form.

    Some areas feel calm while others become increasingly energetic.

    None of those relationships were drawn manually.

    They’re simply the visual consequence of applying one rule consistently across an entire system.

    Perhaps that’s one of the enduring lessons of early computational art: complexity doesn’t always come from complicated algorithms.

    Sometimes it begins with nothing more than a grid, a line, and a single mathematical operation.


    Technical Notes

    Software: Processing (Java)

    Format: A3 portrait

    Visual Language:

    • Off-white paper
    • Black lines
    • Invisible square grid
    • One centred line per cell

    Mathematical Rule:

    Angle = Column × Row

    A bit of a “what if” idea…

    Rather than using identical lines, I wondered what would happen if the basic element became a letter.

    The mathematical rule remains unchanged — only the visual language evolves. Each position in the grid is still rotated according to the same calculation, but the line is replaced with a randomly selected alphabetical character.

    It’s a small change, yet it introduces a new layer of controlled variation. The randomness only determines which character appears; the underlying system and composition are still governed entirely by the mathematical rule.


    Next Study

    The next experiment will replace multiplication with a different mathematical operation while keeping every other constraint the same.

    The image will change.

    The system will remain.

  • Learning from Vera Molnár by Starting Again

    Learning from Vera Molnár by Starting Again

    Can you understand an artist by rebuilding their process?

    Over the last few years I’ve been experimenting with Processing and Java to create generative artwork. Most projects have explored modern computing power, real-time animation and increasingly complex systems.

    This project is different.

    Rather than asking “What can today’s computers do?” I wanted to ask:

    “What could have been achieved with the mathematical thinking available in the 1960s?”

    That naturally led me to the pioneering work of Vera Molnár.


    Looking backwards instead of forwards

    Vera Molnár is recognised as one of the earliest artists to embrace computers as a creative partner. Long before generative art became fashionable, she was exploring systems, rules and controlled randomness.

    What’s remarkable is that many of her ideas existed before she even had regular access to a computer.

    She imagined what she called an “imaginary machine”—a conceptual computer capable of carrying out simple instructions repeatedly. When computers eventually became available, they simply became another tool for testing those ideas.

    Looking through her work, it’s easy to become distracted by the finished images.

    What interests me more is the thinking behind them.


    This isn’t about copying

    The intention isn’t to reproduce Vera Molnár’s artwork.

    Instead, it’s an attempt to understand the constraints she worked within.

    Today’s software makes almost everything effortless:

    • millions of calculations every second
    • unlimited colours
    • complex animation
    • advanced rendering
    • countless libraries

    Removing those luxuries forces different decisions.

    For this series I’ll deliberately restrict myself to:

    • Basic geometric shapes
    • Straight lines
    • Simple transformations
    • Repetition
    • Small amounts of controlled randomness
    • Elementary mathematics
    • Black and white compositions
    • A3 portrait layouts

    Every project will be written in Processing using Java.

    Not because it’s historically accurate, but because it allows me to think algorithmically without unnecessary complexity.


    Designing with limitations

    One thing that becomes obvious very quickly is that limitations are surprisingly creative.

    Instead of asking:

    “What should I draw?”

    the question becomes

    “What simple rule should I write?”

    A square becomes interesting once it’s repeated.

    A line becomes interesting once it’s rotated.

    A grid becomes interesting once every element breaks the rules slightly.

    Tiny mathematical changes produce surprisingly rich compositions.


    Thinking like an early computer

    Modern generative artists often build systems with noise functions, particle engines, physics simulations and GPU shaders.

    For this project I’m intentionally avoiding most of that.

    Instead I’ll explore ideas that feel closer to the computational mindset of the 1960s:

    • Regular grids
    • Rotation
    • Translation
    • Scaling
    • Sequential plotting
    • Iteration
    • Random number generation
    • Permutation
    • Probability
    • Simple geometric relationships

    Almost every image should be explainable in a few lines of mathematics.


    A study rather than a tribute

    I’m treating this as a research project.

    Each artwork will begin with a question.

    What happens if every square rotates by one degree more than its neighbour?

    What if a perfect grid slowly loses its precision?

    How much randomness is enough before order disappears?

    Those questions feel far more interesting than chasing a particular visual style.

    Hopefully, by rebuilding these ideas from first principles, I’ll gain a deeper appreciation of why Vera Molnár’s work remains so influential today.


    The series

    Over the coming weeks I’ll be creating a collection of A3 portrait artworks, each exploring a single mathematical idea.

    Every piece will be generated entirely in Processing using Java and deliberately limited to the simplest possible visual language.

    No textures.

    No gradients.

    No effects.

    Just mathematics, repetition and controlled variation.

    Sometimes the simplest rules produce the richest results.

    That’s a lesson Vera Molnár understood more than sixty years ago—and one that’s still worth exploring today.

  • Sound Bath

    Sound Bath

    Finding generative inspiration in an evening of sound, sea and code.

    On a warm Saturday evening I found myself lying on the beach, listening to the sound of Tibetan singing bowls as the sun disappeared over the horizon. It’s not something I’d ever done before, and if you’d asked me a year ago if I’d spend an evening at a beach sound bath, I’d probably have said no. I’m glad I did.

    There was something fascinating about hearing the bowls live. The tones didn’t feel like they travelled in perfect circles; they seemed to bend, overlap and interfere with one another as they drifted across the beach. Looking around, everyone was scattered naturally across the sand, each person having their own quiet experience while all sharing the same source of sound.

    That stayed with me long after the evening had finished.


    Turning a memory into code

    Rather than recreating the event literally, I wanted to capture the feeling of it.

    The piece starts from a simple aerial view. People become nothing more than small circles. The Tibetan bowls are reduced to three outlined rings. Everything else is generated procedurally.

    Clicking and holding one of the bowls allows it to “charge”. Releasing the mouse sends a wave travelling outwards. As those waves reach people sitting around the bowls, they begin to emit their own smaller ripples, creating a constantly changing network of responses.

    The result isn’t intended to be physically accurate. It’s more like a visual interpretation of shared resonance.


    Inspired by the beach

    The first colour palette came directly from photographs I took that evening.

    Soft golden sand, fading evening blues and warm sunset yellows became the foundation of the artwork. Those colours appear only in the waves, while the people and bowls remain simple white forms. Keeping the geometry minimal lets the movement become the focus.

    As the project developed, two additional modes emerged:

    • Beach – warm sand tones with colourful waves inspired by the evening sky.
    • Paper & Ink – reducing everything to black lines on textured paper, giving the piece the feel of a hand-drawn print.
    • Night – a dark background with softly glowing coloured waves, creating a more meditative atmosphere.

    Each mode changes the mood of the same underlying simulation without changing the behaviour.


    Building the interaction

    The sketch is written in Processing (Java) and is entirely interactive.

    Rather than looping through a fixed animation, the user creates the experience by interacting with the bowls. Holding a bowl increases its energy before releasing expanding waves that trigger reactions from nearby participants.

    Those reactions then become part of the composition, with multiple wave systems overlapping and slowly fading away. Every interaction produces a slightly different arrangement.


    What I enjoyed most

    This project reminded me that inspiration doesn’t always come from galleries, books or websites.

    Sometimes it’s simply being somewhere unfamiliar, experiencing something for the first time, and noticing the patterns your brain keeps replaying afterwards.

    I never expected a Saturday evening listening to Tibetan singing bowls on a beach to become the basis for a generative artwork, but that’s exactly why I enjoy working with code. It gives me a way to translate memories and experiences into something visual, interactive and constantly evolving.


    Tools used: Processing (Java), procedural animation, Perlin noise, generative drawing, interactive simulation.