Fork of P5.js Starter
This example shows an interactive P5.js sketch displaying concentric circles in grayscale, adapted from P5’s “Functions” example. It demonstrates how to integrate P5.js with VizHub’s hot reloading by importing the library and manually managing the p5 instance on the container element. The sketch extracts P5 APIs like `createCanvas`, `background`, `fill`, and `ellipse` from the instance and binds them, attaches custom `setup` and `draw` functions, and sets the canvas parent to the container. This pattern enables live editing of parameters with immediate visual feedback.
AI-generated descriptionUnlocking P5.js with hot reloading!
<video autoplay="" loop="" muted="" width="100%"> <source src="https://vizhub-images.s3.amazonaws.com/p5-demo.mp4" type="video/mp4" /> </video>This example is copied from the P5: Functions example. Several modifications were required to make it work in VizHub with hot reloading:
- Since VizHub uses ES modules, we can't rely on the P5
globals (like
setupanddraw), and we can't rely on the way P5 usually runs and interprets those. - Therefore in
index.js, some setup is required to import P5 and manually execute the Sketch. - To support hot reloading, we store the sketch instance on
the
containerDOM element, and remove the old one if it's present. - The sketch is defined in
sketch.jsas an ES module that exports a function that accepts thecontainerelement. This was required so that we can call use the P5parentfunction to tell it to attach the canvas to our container element. - Within the sketch, we can't reference functions like
createCanvasandbackgroundbecause we are using ES modules and not globals. However, we can "simulate" globals by extracting those functions from the p5 instancep! Since those internally referencethis, we need to usebindto make sure that they work properly. If you need more p5 functions, you can follow the same pattern used here. - Finally, we need to attach our
setupanddrawfunctions to the p5 instance.
I've tried to make this setup mimic regular P5 in the internals as much as possible. It should, in theory, be possible to copy the code from any P5 example straight into this template. Just make sure to:
- Set up
.parenton the canvas - Extract the p5 instance functions you need
- Attach your
setupanddrawfunctions
Magically, this all works pretty well with VizHub's hot reloading, so you can use Alt+drag to edit numbers and see the rendered graphic update instantly.
Enjoy!