Overview

Punctual is a live coding platform that runs in your browser and handles both audio and visuals. The creator says it was inspired by a way of using SuperCollider called JITLib, but uses a newer and more economical notation. Because it is browser-based, you do not need to install anything, which makes it much more accessible to start experimenting and learning. David Ogborn, the creator, also provides tutorials and guides on YouTube, which make it easier to understand and explore the platform.

Wider Context

Punctual is really accessible because it runs straight in a web browser, so you don’t have to deal with complicated setups like installing SuperCollider or Hydra. The documentation is actually a great starting point; you can take the example code, run it, and see how every parameter affects both the sound and the visuals. This makes it easier to understand what each function does before you start making your own pieces. That’s important because tools that require lots of setup can feel intimidating, but with Punctual, the barrier is lower, which makes live coding feel more approachable and encourages experimentation.

How it Works (+ My Observations)

One thing to note is that there’s no scrolling feature; you have to move the cursor with the arrow keys if your code gets long. Unlike Hydra, where Shift+Enter runs just the current line, in Punctual, Shift+Enter seems to reevaluate all the code in the editor, which is convenient but can feel a bit limiting for live coding because you can’t isolate just one line. Still, the documentation and tutorials are super helpful, you can paste a line, run it, then add another line and run again, and you get a sense of how each parameter affects the audio and visuals as the code is reprocessed.

My Code

osc 440 * lftri 3 * 0.7 >>audio;
[unipolar (1 - sqrt(fx*fx + fy*fy)/0.5) * 0.7, 0, 0]>> add;

saw 33 * 0.25 >> audio;
[unipolar (0.05 / (sqrt(fx*fx + fy*fy) + 0.01)), 0, 0] >>add;

osc [220, 261, 311] * 1.1 >>audio;
[unipolar (lftri 5 * (sin(fx*10)sin(fy*10))), 0, 0] >> add;

osc [330, 440, 523] * lftri 5 * 0.6 >>audio;
[unipolar (lftri 5 * fx * 5), 0, unipolar (lftri 5 * fy * 5)] >> add;

lpf 120 1 (saw 55) * lftri 0.15 >>audio;
[unipolar (0.5 - abs(sqrt(fx*fx + fy*fy) - 0.3)), 0, 0]>> add;

osc [196, 220, 233] * 1.05 >>audio;
[unipolar (lftri 4 * lftri 3 * 0.35), 0, 0]>> add;

osc 110 * lftri 1.5 * 0.5 >>audio;
[unipolar (lftri 1.5 * 0.5), 0, unipolar (lftri 0.7 * 0.3)] >>add;

osc 87 * 0.3 >> audio;
[unipolar (0.6 - sqrt(fx*fx + fy*fy)), 0, 0]>>add;

Video Demo:

https://drive.google.com/file/d/1RrrvHwDGgeVrWRvA2tjVaBR-KlmWS0Cg/view?usp=drive_link