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 on the Rust p5_canvas runtime, bounded/headless runs for deterministic tests and export, interactive native windows when available, 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 --headless --frames 1

Runtime

p5-py keeps the user-facing API backend-agnostic while routing rendering, assets, text, pixels, export, and presentation through the Rust p5_canvas runtime.

  • use headless=True or --headless for bounded/offscreen tests, CI, and export
  • use interactive runs for native windows when the installed canvas extension supports them
  • load_image() and image saving are canvas-owned and require the packaged p5.rust._canvas extension

For runtime 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 --headless --frames 1
uv run python scripts/bump_version.py --check
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 version-check
make bump-version VERSION=patch
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.3.tar.gz (107.0 kB view details)

Uploaded Source

Built Distributions

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

p5py_vibe-0.2.3-cp312-cp312-win_amd64.whl (2.8 MB view details)

Uploaded CPython 3.12Windows x86-64

p5py_vibe-0.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

p5py_vibe-0.2.3-cp312-cp312-macosx_11_0_arm64.whl (2.4 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

p5py_vibe-0.2.3-cp312-cp312-macosx_10_12_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: p5py_vibe-0.2.3.tar.gz
  • Upload date:
  • Size: 107.0 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.3.tar.gz
Algorithm Hash digest
SHA256 105d5e916671674bd5efa65bc70ebc8e8ba6e7d16659b0f75bc273203610a812
MD5 d86ec0b424b34059908042c7f50ab989
BLAKE2b-256 0e2a2025a26da07cf43de525de3e64a4c43301498bd650ec009a9c7a87145ad0

See more details on using hashes here.

Provenance

The following attestation bundles were made for p5py_vibe-0.2.3.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.3-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: p5py_vibe-0.2.3-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 2.8 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for p5py_vibe-0.2.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a38a21e27727378a9fd7026c03b81eabc17dd1858ea6f7d8fa28b490267fb0c1
MD5 fc20dfc7cebb02f9577a4ad05aecb207
BLAKE2b-256 ebdd631812d77eb6fd45b01b15d43e26295a908ce3e08d43cfc4838a26a78d28

See more details on using hashes here.

Provenance

The following attestation bundles were made for p5py_vibe-0.2.3-cp312-cp312-win_amd64.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.

File details

Details for the file p5py_vibe-0.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for p5py_vibe-0.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 351a1da3c1a01a7ef0c60c49535e154eb6166534df0df919128923231cb12ffe
MD5 37f1075c7b6f9195c2044e0f72b6b8bb
BLAKE2b-256 7f570343733ece75d1ff2fcde89bb95f625ce31f0734e9f02240480565fd149b

See more details on using hashes here.

Provenance

The following attestation bundles were made for p5py_vibe-0.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.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.

File details

Details for the file p5py_vibe-0.2.3-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for p5py_vibe-0.2.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 61487497698bf9be93051f427548476e5b5e567d511c39d5e794ec9d27e9583a
MD5 07c05991ecb8fca8c0fba9a7411fdd5b
BLAKE2b-256 a459aeb024a54937a3d6a77b51e71c957e4676eb4ee4ccab7b99915f16cadc09

See more details on using hashes here.

Provenance

The following attestation bundles were made for p5py_vibe-0.2.3-cp312-cp312-macosx_11_0_arm64.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.

File details

Details for the file p5py_vibe-0.2.3-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for p5py_vibe-0.2.3-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 994da251d608808268d408d86bb9b59557873451cfe53232b7dce8718fb238c0
MD5 1ecaa2ba3582b8a39c3d8f7fdced528f
BLAKE2b-256 ceb8159b918f58607660a308fa52e294531ce7322334a38e475941acbb6af95d

See more details on using hashes here.

Provenance

The following attestation bundles were made for p5py_vibe-0.2.3-cp312-cp312-macosx_10_12_x86_64.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