Rust render-farm controller, worker, and Python bindings
Project description
Renderacre
Renderacre is a Rust render-farm foundation inspired by Deadline: a remote controller API, standalone workers, Python submitter bindings, and Open Job Description (OpenJD) job templates for portable DCC and batch workloads.
The Python package is named renderacre and is built as a cp37-abi3 wheel, so one wheel supports CPython 3.7 and newer on each platform.
Features
- Rust HTTP controller with job submission, worker registration, leasing, retries, task dependencies, and job state inspection.
- Standalone worker binary that executes direct commands or OpenJD runtime payloads.
- Official
openjd-modelvalidation and job creation for OpenJDjobtemplate-2023-09. - Official
openjd-sessionsexecution for OpenJD step scripts, task parameters, environments, embedded files, and OpenJD stdout directives. - PyO3/maturin Python module for pipeline submitters and DCC tools.
- CI for fmt, clippy, unit tests, controller/worker e2e smoke, and ABI3 wheel builds.
- Release workflow for cross-platform wheels, sdist, and PyPI Trusted Publishing.
Local Development
cargo test --workspace
cargo clippy --workspace --all-targets -- -D warnings
powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\e2e_smoke.ps1
python -m maturin build --release -o target\wheels
The wheel filename should contain cp37-abi3, for example:
renderacre-0.1.0-cp37-abi3-win_amd64.whl
Run a Local Farm
Start the controller:
cargo run -p farm-controller -- --bind 127.0.0.1:7878
Start a worker:
cargo run -p farm-worker -- --controller http://127.0.0.1:7878 --name local-worker --label os=windows
Submit a direct command job:
Invoke-RestMethod `
-Method Post `
-Uri http://127.0.0.1:7878/v1/jobs `
-ContentType application/json `
-InFile .\examples\hello_job.json
Python Submitter API
Install a local build:
python -m pip install maturin
python -m maturin develop
Submit a command job:
import renderacre
job_json = renderacre.command_job(
"hello-from-python",
"python",
["-c", "print('hello from renderacre')"],
)
print(renderacre.submit_job("http://127.0.0.1:7878", job_json))
Submit an OpenJD template:
import json
import renderacre
template = open("examples/openjd_python_frames.yaml", encoding="utf-8").read()
job_json = renderacre.openjd_job(
"openjd-demo",
template,
json.dumps({"Message": "hello through OpenJD"}),
)
print(renderacre.submit_job("http://127.0.0.1:7878", job_json))
OpenJD Support
Renderacre accepts an OpenJD job template under openjd.template_yaml.
The controller:
- Parses YAML/JSON with the official OpenJD parser.
- Validates the template and enabled extensions.
- Preprocesses typed job parameters, including
PATHvalues. - Creates the resolved OpenJD job model.
- Expands step parameter spaces into farm tasks.
The worker:
- Creates an OpenJD session.
- Enters job and step environments.
- Runs each OpenJD task through
openjd-sessions. - Captures stdout/status and reports the result to the controller.
- Exits environments and cleans the session directory.
Supported current extensions default to all extensions known by openjd-model: EXPR, FEATURE_BUNDLE_1, TASK_CHUNKING, and REDACTED_ENV_VARS.
DCC Examples
Blender:
$template = Get-Content .\examples\dcc\blender_render_openjd.yaml -Raw
$params = @{
BlenderExecutable = "blender"
ScriptPath = (Resolve-Path .\examples\dcc\blender_render_task.py).Path
OutputDir = (Join-Path (Get-Location) "renders\blender")
} | ConvertTo-Json
Maya:
$template = Get-Content .\examples\dcc\maya_render_openjd.yaml -Raw
$params = @{
MayaPython = "mayapy"
ScriptPath = (Resolve-Path .\examples\dcc\maya_render_task.py).Path
OutputDir = (Join-Path (Get-Location) "renders\maya")
} | ConvertTo-Json
Pass the template and parameter JSON through renderacre.openjd_job(...) or submit the equivalent REST payload to /v1/jobs.
Deployment
Recommended first deployment shape:
- Run one controller per farm or queue:
farm-controller --bind 0.0.0.0:7878. - Run one worker process per render node:
farm-worker --controller http://controller-host:7878 --name <node-name> --label app=blender. - Put the controller behind a private network or authenticated reverse proxy.
- Keep render executables and scripts on shared storage, then pass
PATHparameters through OpenJD. - Use GitHub Releases or PyPI to distribute the
renderacrewheel to submitter machines.
Current storage is in-memory by design for the first protocol slice. The scheduler boundary is isolated so SQLite/Postgres/NATS can replace it without changing the Python or REST APIs.
Release
The release workflow builds Linux, Windows, and macOS wheels plus an sdist. PyPI publishing uses Trusted Publishing through the pypi GitHub environment.
Manual release dry run:
python -m maturin build --release -o dist
python -m pip install twine
python -m twine check dist/*
Publish from GitHub:
- Configure PyPI Trusted Publisher for
loonghao/renderacre, workflowrelease.yml, environmentpypi. - Push a
vX.Y.Ztag or publish a GitHub Release. - The workflow uploads artifacts to PyPI when the publish gate is active.
See docs/architecture.md for the internal layout.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file renderacre-0.1.0-cp37-abi3-win_amd64.whl.
File metadata
- Download URL: renderacre-0.1.0-cp37-abi3-win_amd64.whl
- Upload date:
- Size: 1.7 MB
- Tags: CPython 3.7+, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d4fe85feeea68227813feafdc55b461cd26194652aad8c121536029f1734d255
|
|
| MD5 |
cc518a7be8bf0295572e4761bec46a1a
|
|
| BLAKE2b-256 |
50b26b0f70dc8df2fd1633e93045acf6dc16c6f49c83eda14244b9d0a8fca5bb
|
Provenance
The following attestation bundles were made for renderacre-0.1.0-cp37-abi3-win_amd64.whl:
Publisher:
release.yml on loonghao/renderacre
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
renderacre-0.1.0-cp37-abi3-win_amd64.whl -
Subject digest:
d4fe85feeea68227813feafdc55b461cd26194652aad8c121536029f1734d255 - Sigstore transparency entry: 1643940581
- Sigstore integration time:
-
Permalink:
loonghao/renderacre@33dac7c0be4a3244deb3f634931b5ac15ef16a58 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/loonghao
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@33dac7c0be4a3244deb3f634931b5ac15ef16a58 -
Trigger Event:
push
-
Statement type:
File details
Details for the file renderacre-0.1.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: renderacre-0.1.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 2.2 MB
- Tags: CPython 3.7+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fcfd2bd5d0db481e658ab26eba6be56f953e6da5f8826ea274f6155c6350f284
|
|
| MD5 |
a9b9a4de77e51eced7b595e091fcfcf9
|
|
| BLAKE2b-256 |
d76747204132fc320e7d3b27e436582bdd3fd119e9e543b3a513e4a07b439901
|
Provenance
The following attestation bundles were made for renderacre-0.1.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
release.yml on loonghao/renderacre
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
renderacre-0.1.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
fcfd2bd5d0db481e658ab26eba6be56f953e6da5f8826ea274f6155c6350f284 - Sigstore transparency entry: 1643940726
- Sigstore integration time:
-
Permalink:
loonghao/renderacre@33dac7c0be4a3244deb3f634931b5ac15ef16a58 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/loonghao
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@33dac7c0be4a3244deb3f634931b5ac15ef16a58 -
Trigger Event:
push
-
Statement type:
File details
Details for the file renderacre-0.1.0-cp37-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: renderacre-0.1.0-cp37-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.9 MB
- Tags: CPython 3.7+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
833c367ed9933e1ab2c02c110e128b2add16e35ac50b046c9a172ac36e51d306
|
|
| MD5 |
adac2a63932fb27dbb80a9fa01684c0d
|
|
| BLAKE2b-256 |
b84d628c34e67d3326b1ef305b22e27654bdfdbb02881ed0223587fe38ac6b5e
|
Provenance
The following attestation bundles were made for renderacre-0.1.0-cp37-abi3-macosx_11_0_arm64.whl:
Publisher:
release.yml on loonghao/renderacre
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
renderacre-0.1.0-cp37-abi3-macosx_11_0_arm64.whl -
Subject digest:
833c367ed9933e1ab2c02c110e128b2add16e35ac50b046c9a172ac36e51d306 - Sigstore transparency entry: 1643940818
- Sigstore integration time:
-
Permalink:
loonghao/renderacre@33dac7c0be4a3244deb3f634931b5ac15ef16a58 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/loonghao
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@33dac7c0be4a3244deb3f634931b5ac15ef16a58 -
Trigger Event:
push
-
Statement type: