pulze-renderflow
Official Python client for the RenderFlow API.
Installation
pip install pulze-renderflow
The package has no dependencies — the whole client is standard library. That is a feature,
not an accident: drop the folder on sys.path and it works inside a DCC's bundled Python (Maya,
Houdini, Nuke, VRED), where installing anything is a fight.
Quick start
import renderflow as rf
farm = rf.connect() # the local service on 127.0.0.1:44442
# farm = rf.connect("https://rf.studio.lan:44442", api_key="rf_...")
for job in farm.jobs.get_jobs(status="working").data:
print(job.name, job.status)
connect() falls back to the environment for each argument it isn't given: RENDERFLOW_URL
for the address, RENDERFLOW_API_KEY for the key (the same variable rfcli reads). With
neither, it talks to the service on this machine — which needs no credential, and is how a DCC
plugin on a workstation submits.
Finding the operation you want
Operations are grouped by tag and named after the API document's operationId, so a route
reads the same here, in the TypeScript SDK, in rfcli and in the MCP tools:
farm.tags() # every group: jobs, nodes, pools, schedule, render_licenses, ...
dir(farm.jobs) # every operation in one: get_jobs, create_job, stop_job, ...
help(farm.jobs.get_jobs) # the operation's own documentation, generated from the document
| you want | you write |
|---|---|
GET /jobs |
farm.jobs.get_jobs() |
GET /jobs/{id} |
farm.jobs.get_job(id) |
POST /jobs |
farm.jobs.create_job(body=...) |
POST /jobs/{id}/stop |
farm.jobs.stop_job(id) |
GET /nodes |
farm.nodes.get_nodes() |
Submitting a job
A recipe — type plus a file and the flat per-DCC fields — is the short way in; the service
expands it into the step tree:
Every recipe requires type, file and host — host is which application renders it, and only
its id is mandatory:
job = farm.jobs.create_job(body={
"type": "blender.render",
"file": "//share/scenes/shot_010.blend",
"host": {"id": "blender", "version": "4.5"},
"frame": "1-100",
"pool_id": "...",
})
print(job.id, job.status)
farm.jobs.stop_job(job.id)
Bodies are plain dicts; answers read with dot access (job.name, page.data) and hand back the
raw payload via .to_dict().
Models
Typed names for every request and response schema live in renderflow.models, and your editor
reads them from models.pyi — autocomplete and type checking with nothing to install:
from renderflow.models import MayaRenderRecipe
recipe: MayaRenderRecipe = {"type": "maya.render", "file": "//share/scenes/hero.mb", "host": {"id": "maya", "version": "2026"}}
farm.jobs.create_job(body=recipe)
At runtime a model is a dict — the wire is JSON and the service validates.
Errors
A refused call raises renderflow.wire.ApiError, carrying the status and the service's own
message — str(error) is the sentence an operator should read.
How this package is built
There is no generated client. renderflow/wire.py binds operations off the OpenAPI document at
runtime, and the document ships inside the package as renderflow/openapi.json — a committed
copy of the service's openapi.public.json. An operation added to the API arrives here the
moment that copy is refreshed:
python scripts/generate.py # copies ../../service/openapi.public.json + rewrites models.pyi
models.pyi is written by datamodel-code-generator,
a dev-only tool — never a dependency of the package.
Metadata
Release files for pulze-renderflow 2.0.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pulze_renderflow-2.0.8.tar.gz | 75.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pulze_renderflow-2.0.8-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 145.6 kB
Release files / pulze_renderflow-2.0.8.tar.gz
| Download URL | pulze_renderflow-2.0.8.tar.gz |
|---|---|
| Size | 75.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
63237e36d9a9588a566ce2b2d2bc49810549564280a2fd06f57b66e2e71a138c
|
|
BLAKE2b-256 checksum How to use checksums |
6e773a9ad4fbaf98160541394ff2a95c6f70d26f312a04c2117f98af0af242f7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.8
|
Release files / pulze_renderflow-2.0.8-py3-none-any.whl
| Download URL | pulze_renderflow-2.0.8-py3-none-any.whl |
|---|---|
| Size | 70.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
799b4a8d76e1ec26f5444223d7d1ac763ea10f3ffbcc2016ee0a1fbac05a0865
|
|
BLAKE2b-256 checksum How to use checksums |
aa0044e3ac5f48fda676ae97b2bb4d55638b742290236df9811d02e4f49858f6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.8
|