example-p5-animation · git:20261009.c6b0c13 · 2026-10-09 · sha256 04917548cbc36be2
example-p5-animation git:20261009.c6b0c13A
Immutable. This exact content never changes and is served at /api/v1/blob/04917548cbc36be2.
---
name: example-p5-animation
description: Learn how to use P5.js with Helios. Use when creating creative coding sketches or generative art.
---
# P5.js Animation
Integrate P5.js with Helios by using P5's **Instance Mode** and driving the `draw()` loop via Helios's state.
## Quick Start
```typescript
import { Helios } from '@helios-project/core';
import p5 from 'p5';
const helios = new Helios({ duration: 10, fps: 60 });
window.helios = helios; // lets the renderer and player drive it
const sketch = (p: p5) => {
p.setup = () => {
p.createCanvas(1920, 1080);
p.noLoop(); // Disable P5's internal loop
};
p.draw = () => {
// Get time from Helios
const { currentFrame, fps } = helios.getState();
const time = currentFrame / fps;
p.background(200);
p.fill(255, 0, 0);
// Animate based on time
const x = time * 100;
p.circle(x, 540, 50);
};
};
const instance = new p5(sketch, document.getElementById('canvas-container'));
// Drive P5 from Helios: redraw on every frame change.
helios.subscribe(() => instance.redraw());
```
## Key Patterns
### Instance Mode
Always use Instance Mode (`new p5(sketch)`) instead of Global Mode. This prevents global variable pollution and ensures compatibility with module bundlers.
### Disable Internal Loop
Call `p.noLoop()` in `setup()`. P5's internal loop uses `requestAnimationFrame` which runs independently of Helios. By disabling it, you ensure P5 only draws when Helios updates.
### Reactive Drawing
Instead of relying on P5's `frameCount`, calculate positions based on `helios.getState().currentFrame`.
```typescript
helios.subscribe(() => {
// Assuming 'myp5' is your instance
myp5.redraw();
});
```