Skip to main content

Rust render-farm controller, worker, and Python bindings

Project description

Renderacre

CI Release PyPI Python Downloads License

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-model validation and job creation for OpenJD jobtemplate-2023-09.
  • Official openjd-sessions execution 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:

  1. Parses YAML/JSON with the official OpenJD parser.
  2. Validates the template and enabled extensions.
  3. Preprocesses typed job parameters, including PATH values.
  4. Creates the resolved OpenJD job model.
  5. Expands step parameter spaces into farm tasks.

The worker:

  1. Creates an OpenJD session.
  2. Enters job and step environments.
  3. Runs each OpenJD task through openjd-sessions.
  4. Captures stdout/status and reports the result to the controller.
  5. 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 PATH parameters through OpenJD.
  • Use GitHub Releases or PyPI to distribute the renderacre wheel 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:

  1. Configure PyPI Trusted Publisher for loonghao/renderacre, workflow release.yml, environment pypi.
  2. Push a vX.Y.Z tag or publish a GitHub Release.
  3. The workflow uploads artifacts to PyPI when the publish gate is active.

See docs/architecture.md for the internal layout.

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

renderacre-0.1.4.tar.gz (41.0 kB view details)

Uploaded Source

Built Distributions

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

renderacre-0.1.4-cp37-abi3-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.7+Windows x86-64

renderacre-0.1.4-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.7+manylinux: glibc 2.17+ x86-64

renderacre-0.1.4-cp37-abi3-macosx_11_0_arm64.whl (1.9 MB view details)

Uploaded CPython 3.7+macOS 11.0+ ARM64

renderacre-0.1.4-cp37-abi3-macosx_10_12_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.7+macOS 10.12+ x86-64

File details

Details for the file renderacre-0.1.4.tar.gz.

File metadata

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

File hashes

Hashes for renderacre-0.1.4.tar.gz
Algorithm Hash digest
SHA256 fd53292f357306a1001347cab9bcc282286ee6cf37e8f22c0963e35f45cb5ffb
MD5 ec0543c000846ebdbb8e0e749208158c
BLAKE2b-256 f279808f8aa230a7b244bf9440b8fcfca47644060f3232f917d5947beddf4308

See more details on using hashes here.

File details

Details for the file renderacre-0.1.4-cp37-abi3-win_amd64.whl.

File metadata

  • Download URL: renderacre-0.1.4-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

Hashes for renderacre-0.1.4-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 7bd606648c655b2898aa259ce322d45894f142ddddba06041989c2610c8b7e8c
MD5 c06e797426aa3dfe9f6a177b915d7b89
BLAKE2b-256 b753c28022ee6e52cfcb1253a8966b9fbd55b45f1e5d9c3dbfc8411fbc18e9ea

See more details on using hashes here.

File details

Details for the file renderacre-0.1.4-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for renderacre-0.1.4-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d8e370abaf090c7f727e8d767a615a56dd5ba637e2ba6b08eac2ccde744576ba
MD5 dab542575c037c760666a69833dc8a1d
BLAKE2b-256 548e1f786e9fc0786bdf5424a15ebc25b06670dd6aecba10e5baf281014ebf82

See more details on using hashes here.

File details

Details for the file renderacre-0.1.4-cp37-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for renderacre-0.1.4-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3efcd0883891c72c66b7f44b0f63a3b1cf0a2dde6b1284a9c750d43b04e80278
MD5 d35d176a664e05152bc5881221164f30
BLAKE2b-256 f11d3136a3b792803bd42d21ceb63f7886675a0644dea430841c2410e9f986d5

See more details on using hashes here.

File details

Details for the file renderacre-0.1.4-cp37-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for renderacre-0.1.4-cp37-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 26b891238217e75df2ece3cfe55bbe790284446e07a7fa884640b9f275f58c72
MD5 6e987595622ea5c7f2d620c2e8cdf750
BLAKE2b-256 3848b284e7d59ca2e4720a3ee8c920798fd2898764e14306c89ad5815e898ceb

See more details on using hashes here.

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