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.4-cp37-abi3-win_amd64.whl
Run a Local Farm
Start the controller:
cargo run -p renderacre-controller -- --bind 127.0.0.1:7878
Start a worker:
cargo run -p renderacre-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.
Dashboard
Renderacre includes a Vite + React dashboard under dashboard/. It uses shadcn-style components, compact queue tables, worker status panels, an OpenJD task inspector, and a stdout tail view.
Run it during development:
cargo run -p renderacre-controller -- --bind 127.0.0.1:7878
cd dashboard
npm ci
npm run dev
The Vite dev server proxies /v1 and /healthz to the controller. For a deployed dashboard:
cd dashboard
npm run build
Serve dashboard/dist through your internal web server or reverse proxy next to the controller API.
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:
renderacre-controller --bind 0.0.0.0:7878. - Run one worker process per render node:
renderacre-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.
Install Binaries
Linux/macOS:
curl -fsSL https://raw.githubusercontent.com/loonghao/renderacre/main/scripts/install.sh | bash
Windows PowerShell:
iwr https://raw.githubusercontent.com/loonghao/renderacre/main/scripts/install.ps1 -UseB | iex
Set RENDERACRE_VERSION / -Version and RENDERACRE_INSTALL_DIR / -InstallDir to pin a release or install path.
Release
The release workflow builds Linux, Windows, and macOS wheels plus an sdist. PyPI publishing uses Trusted Publishing through the pypi GitHub environment.
It also uploads standalone controller/worker archives to GitHub Releases for Linux, macOS, and Windows.
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.
Metadata
Release files for renderacre 0.1.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| renderacre-0.1.4.tar.gz | 41.0 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| renderacre-0.1.4-cp37-abi3-win_amd64.whl | CPython 3.7 | abi3 | Windows x86-64 | Details |
| renderacre-0.1.4-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.7 | abi3 | Linux glibc 2.17+ x86-64 | Details |
| renderacre-0.1.4-cp37-abi3-macosx_11_0_arm64.whl | CPython 3.7 | abi3 | macOS 11.0+ ARM64 | Details |
| renderacre-0.1.4-cp37-abi3-macosx_10_12_x86_64.whl | CPython 3.7 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 7.7 MB
Release files / renderacre-0.1.4.tar.gz
| Download URL | renderacre-0.1.4.tar.gz |
|---|---|
| Size | 41.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fd53292f357306a1001347cab9bcc282286ee6cf37e8f22c0963e35f45cb5ffb
|
|
BLAKE2b-256 checksum How to use checksums |
f279808f8aa230a7b244bf9440b8fcfca47644060f3232f917d5947beddf4308
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / renderacre-0.1.4-cp37-abi3-win_amd64.whl
| Download URL | renderacre-0.1.4-cp37-abi3-win_amd64.whl |
|---|---|
| Size | 1.7 MB |
| Tags | CPython 3.7 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
7bd606648c655b2898aa259ce322d45894f142ddddba06041989c2610c8b7e8c
|
|
BLAKE2b-256 checksum How to use checksums |
b753c28022ee6e52cfcb1253a8966b9fbd55b45f1e5d9c3dbfc8411fbc18e9ea
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / renderacre-0.1.4-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | renderacre-0.1.4-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 2.2 MB |
| Tags | CPython 3.7 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
d8e370abaf090c7f727e8d767a615a56dd5ba637e2ba6b08eac2ccde744576ba
|
|
BLAKE2b-256 checksum How to use checksums |
548e1f786e9fc0786bdf5424a15ebc25b06670dd6aecba10e5baf281014ebf82
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / renderacre-0.1.4-cp37-abi3-macosx_11_0_arm64.whl
| Download URL | renderacre-0.1.4-cp37-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.9 MB |
| Tags | CPython 3.7 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
3efcd0883891c72c66b7f44b0f63a3b1cf0a2dde6b1284a9c750d43b04e80278
|
|
BLAKE2b-256 checksum How to use checksums |
f11d3136a3b792803bd42d21ceb63f7886675a0644dea430841c2410e9f986d5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / renderacre-0.1.4-cp37-abi3-macosx_10_12_x86_64.whl
| Download URL | renderacre-0.1.4-cp37-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 1.9 MB |
| Tags | CPython 3.7 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
26b891238217e75df2ece3cfe55bbe790284446e07a7fa884640b9f275f58c72
|
|
BLAKE2b-256 checksum How to use checksums |
3848b284e7d59ca2e4720a3ee8c920798fd2898764e14306c89ad5815e898ceb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|