Skip to main content

A Pythonic creative coding package inspired by p5.js.

Project description

p5-py

p5-py is a Pythonic creative-coding package inspired by p5.js.

It keeps the familiar p5 sketch lifecycle and many p5-style APIs while staying native to Python, backend-agnostic, typed, and testable.

Status

The current package supports a strong 2D-first workflow, a deterministic headless renderer, a native Pyglet interactive backend, optional WEBGL-style/3D APIs, optional media extras, and optional Rust acceleration for a few compute-heavy paths.

The public API is intentionally Python-first:

  • canonical APIs use snake_case, such as create_canvas() and frame_rate()
  • p5.js-style aliases such as createCanvas() and frameRate() delegate to the same implementations
  • excluded browser-only APIs fail with explicit p5 exceptions instead of failing indirectly

Installation

Install the published package with pip:

pip install p5-py

Install optional media support when you need camera/video helpers:

pip install "p5-py[media]"

For local development in this repository, use uv:

uv sync --dev

Quick start

import p5


def setup() -> None:
    p5.create_canvas(320, 240)
    p5.no_stroke()


def draw() -> None:
    p5.background(245)
    p5.fill(255, 80, 80)
    p5.circle(160, 120, 80)


p5.run(setup=setup, draw=draw)

Run a sketch headlessly for deterministic tests or export flows:

uv run python examples/basic_shapes.py --backend headless --frames 1

Backends

p5-py keeps the user-facing API backend-agnostic.

  • headless renders deterministically with Pillow and is ideal for tests, CI, and export.
  • pillow is currently an alias of headless.
  • pyglet opens a native interactive window and presents frames with HiDPI support.

For backend details, see docs/user/backends.md.

Examples

Examples live in examples/.

A few useful entry points:

  • examples/basic_shapes.py
  • examples/bouncing_ball.py
  • examples/transforms.py
  • examples/image_text_data.py
  • examples/pixels_blend_export.py
  • examples/plugin_hooks.py
  • examples/webgl_primitives_gallery.py

See examples/README.md for the full index.

Documentation map

User docs:

  • docs/user/getting_started.md
  • docs/user/lifecycle.md
  • docs/user/backends.md
  • docs/user/compatibility.md
  • docs/user/images_and_pixels.md
  • docs/user/events.md
  • docs/user/plugins.md

Technical docs:

  • docs/technical/testing.md
  • docs/technical/releasing.md
  • docs/technical/hidpi_rendering.md
  • docs/technical/native_pyglet_renderer.md
  • docs/technical/rust_acceleration.md
  • docs/technical/p5_canvas_rust_backend.md
  • docs/technical/canvas_migration_release.md
  • docs/technical/advanced_3d_media_strategy.md
  • docs/technical/project_plan.md

Development workflow

Common local commands:

uv run ruff check .
uv run ruff format .
uv run mypy src
uv run pytest
uv run python examples/basic_shapes.py --backend headless --frames 1
cargo test --manifest-path crates/p5_canvas/Cargo.toml
uv build

Equivalent shortcuts are available in Makefile:

make lint
make test-fast
make test
make typecheck
make build

Compatibility policy

p5-py aims to keep the p5 mental model while remaining idiomatic Python.

  • Use the snake_case APIs as the canonical interface.
  • Use camelCase aliases when porting or teaching from p5.js material.
  • DOM and browser-only features are excluded.
  • Unsupported compatibility stubs raise explicit package-specific errors.

See docs/user/compatibility.md for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

p5py_vibe-0.2.2.tar.gz (376.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

p5py_vibe-0.2.2-py3-none-any.whl (79.8 kB view details)

Uploaded Python 3

File details

Details for the file p5py_vibe-0.2.2.tar.gz.

File metadata

  • Download URL: p5py_vibe-0.2.2.tar.gz
  • Upload date:
  • Size: 376.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for p5py_vibe-0.2.2.tar.gz
Algorithm Hash digest
SHA256 567575c71cdb35836bfd6875e0066b82967c387a78fa7d6a5dc4cd72a582f691
MD5 cca298e462186a31df38ed4ae3df0233
BLAKE2b-256 ae21c27c7f6d50688744593fac27b2c08f2adb803ae42d8c792c2b6eee9de7e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for p5py_vibe-0.2.2.tar.gz:

Publisher: publish.yml on JonathanHHenson/p5.py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file p5py_vibe-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: p5py_vibe-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 79.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for p5py_vibe-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 64b122b58afff3786cfca349f72e24c245cacbf8cd18f5dc9d5430c4c31bbe4c
MD5 64a576e855d22490d5ef9c2be2eb38b5
BLAKE2b-256 f2c53cb9505b9ae2b00f86bf5a39e95368168e914e7b68f97b91a156f19e2f2f

See more details on using hashes here.

Provenance

The following attestation bundles were made for p5py_vibe-0.2.2-py3-none-any.whl:

Publisher: publish.yml on JonathanHHenson/p5.py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page