Skip to main content

A tool to use a pyproject.toml instead of a blender_manifest.toml to build Blender add-ons

Project description

Peeler – Simplify Your Blender Add-on Packaging

This package is under active development. Feel free to ask for help here or open an issue here. I’ll be happy to develop the feature you need. :smile:

A tool to easily package your Blender add-on

Building and installing a Blender add-on with dependencies requires manually downloading the necessary wheels and specifying their paths in blender_manifest.toml. Peeler automates this process, allowing you to package your Blender add-on without manually handling dependencies (and their own dependencies !) or manually writing their paths in blender_manifest.toml.

Since Blender 4.2, add-ons must use blender_manifest.toml instead of the standard pyproject.toml used in Python projects. Peeler lets you use pyproject.toml instead (or alongside) to simplify dependency management and streamline your workflow.

Installation

uv is required to use the Wheels feature.

If you don't have uv installed

Either install uv and run:

pip install peeler

Or install uv and peeler at the same time:

pip install peeler[uv]

If you are already a uv user

Peeler does not need to be added to your project dependencies - you can use Peeler directly as a tool:

uvx peeler [OPTIONS] COMMAND [ARGS]

Or install Peeler without uv:

uv pip install peeler

Features

Each feature can be used independently.

Manifest: Generate the blender_manifest.toml from fields in a pyproject.toml.

Wheels: Download the required wheels for packaging your add-on based on the dependencies specified in your pyproject.toml, automatically write their paths to blender_manifest.toml.

Manifest

Generate the blender_manifest.toml from fields in a pyproject.toml.

1. Ensure your pyproject.toml contains basic field values

# pyproject.toml

[project]
name = "My Awesome Add on"
version = "1.0.0"
requires-python = "==3.11.*"

2. Some metadata are specific to Blender

For instance blender_version_min, you can specify these metadata in your pyproject.toml file under the [tool.peeler.manifest] table Here's a minimal working version:

# pyproject.toml

[project]
name = "My Awesome Add on"
version = "1.0.0"
requires-python = "==3.11.*"

[tool.peeler.manifest]
blender_version_min = "4.2.0"
id = "my_awesome_add_on"
license = ["SPDX:0BSD"]
maintainer = "John Smith"
tagline = "My Add-on is awesome"

3. Run Peeler to create (or update) your blender_manifest.toml

peeler manifest /path/to/your/pyproject.toml /path/to/blender_manifest.toml
# Generated blender_manifest.toml

version = "1.0.0"
name = "My Awesome Add on"
schema_version = "1.0.0"
type = "add-on"
blender_version_min = "4.2.0"
id = "my_awesome_add_on"
license = ["SPDX:0BSD"]
maintainer = "John Smith"
tagline = "My Add-on is awesome"

The manifest is populated with values from your pyproject.toml [project] and [tool.peeler.manifest] tables, along with default values.

For a full list of required and optional values in a blender_manifest.toml visit Blender Documentation

4. Build your add-on

If your add-on has dependencies make sure to use the Wheels feature below.

Then to build your add-on use the regular Blender command:

blender --command extension build

Hint: Ensure Blender is added to your PATH

Wheels

Download the required wheels for packaging your add-on based on the dependencies specified in your pyproject.toml, automatically write their paths to blender_manifest.toml.

1. In your pyproject.toml, specify your dependencies

# pyproject.toml

[project]
name = "My Awesome Add-on"
version = "1.0.0"
requires-python = "==3.11.*"

# For instance rich and Pillow (the popular image manipulation module)

dependencies = [
    "Pillow==11.1.0",
    "rich>=13.9.4",
]

2. Run peeler wheels to download the wheels for all platforms

peeler wheels ./pyproject.toml ./blender_manifest.toml

Peeler updates your blender_manifest.toml with the downloaded wheels paths.

# Updated blender_manifest.toml

version = "1.0.0"
name = "My Awesome Add on"
schema_version = "1.0.0"
type = "add-on"
blender_version_min = "4.2.0"

# The wheels as a list of paths
wheels = [
    # Pillow wheels for all platforms
    "./wheels/pillow-11.1.0-cp311-cp311-macosx_10_10_x86_64.whl",
    "./wheels/pillow-11.1.0-cp311-cp311-macosx_11_0_arm64.whl",
    "./wheels/pillow-11.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
    "./wheels/pillow-11.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
    "./wheels/pillow-11.1.0-cp311-cp311-manylinux_2_28_aarch64.whl",
    "./wheels/pillow-11.1.0-cp311-cp311-manylinux_2_28_x86_64.whl",
    "./wheels/pillow-11.1.0-cp311-cp311-musllinux_1_2_aarch64.whl",
    "./wheels/pillow-11.1.0-cp311-cp311-musllinux_1_2_x86_64.whl",
    "./wheels/pillow-11.1.0-cp311-cp311-win32.whl",
    "./wheels/pillow-11.1.0-cp311-cp311-win_amd64.whl",
    "./wheels/pillow-11.1.0-cp311-cp311-win_arm64.whl",

    # Wheels for rich and its dependencies
    "./wheels/rich-13.9.4-py3-none-any.whl",
    "./wheels/markdown_it_py-3.0.0-py3-none-any.whl",
    "./wheels/mdurl-0.1.2-py3-none-any.whl",
    "./wheels/pygments-2.18.0-py3-none-any.whl"
]

Note that the dependencies of the dependencies (and so on) specified in pyproject.toml are also downloaded, ensuring everything is packaged correctly. Pretty neat, right?

# Pillow and rich dependency tree resolved from
# dependencies = [
#    "Pillow==11.1.0",
#    "rich>=13.9.4",
# ]

My Awesome Add on v1.0.0
├── pillow v11.1.0
├── rich v13.9.4
│   ├── markdown-it-py v3.0.0
│      └── mdurl v0.1.2
│   └── pygments v2.18.0

Authors

  • Maxime Letellier - Initial work

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

peeler-0.3.5.tar.gz (52.4 kB view details)

Uploaded Source

Built Distribution

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

peeler-0.3.5-py3-none-any.whl (56.3 kB view details)

Uploaded Python 3

File details

Details for the file peeler-0.3.5.tar.gz.

File metadata

  • Download URL: peeler-0.3.5.tar.gz
  • Upload date:
  • Size: 52.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for peeler-0.3.5.tar.gz
Algorithm Hash digest
SHA256 589dc9d25630e9135b42613b78e2618fb6bc6a3f4c67efe210dc39bff9da3407
MD5 e4e658abe5f8373ecfd895d8c2ba20be
BLAKE2b-256 c6a3bc3978a7f71145a2c3a4c6433fee54a02fe2a9d21c3e1d26b45565fd8bac

See more details on using hashes here.

Provenance

The following attestation bundles were made for peeler-0.3.5.tar.gz:

Publisher: release.yaml on Maxioum/Peeler

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

File details

Details for the file peeler-0.3.5-py3-none-any.whl.

File metadata

  • Download URL: peeler-0.3.5-py3-none-any.whl
  • Upload date:
  • Size: 56.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for peeler-0.3.5-py3-none-any.whl
Algorithm Hash digest
SHA256 f18d1434b538e25496b8990bbc593747b3df4d9e5ce99674e710ba1e29c5d136
MD5 be4c1342846e3e210298b965416346b3
BLAKE2b-256 7c985900a5537f0b463a2338a1feebd1db770c55c6e28dc7d35d0adcddd56471

See more details on using hashes here.

Provenance

The following attestation bundles were made for peeler-0.3.5-py3-none-any.whl:

Publisher: release.yaml on Maxioum/Peeler

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