RenderController is a simple network render manager that works with Blender's Cycles render engine and Terragen 3. It consists of a backend service written in Python and a React web frontend.
- Supports Linux and MacOS render nodes.
- Simple browser-based user interface.
- Support for Blender Cycles and Terragen 3. Can be extended to work with any render engine that can be started from the command line.
- Queue as many renders as you want and they'll automaticall start one at a time.
- If a render node fails, its frames will automatically be assigned to other nodes.
- Can manage nodes in multiple networks as long as they're reachable with SSH.
- Includes a
framechecker
script to check directories for missing frames.
- Linux or MacOS
- Python 3.6+
- Pip for Python 3
- Install Dependencies
- RHEL/CentOS 7:
yum install python36 python36-pip
- MacOS:
brew install python
or use the official installer from python.org.
- RHEL/CentOS 7:
- Download and build the latest version
git clone https://github.com/jbadson/render_controller.git
cd render_controller/python && pip3 setup.py sdist
- Install with pip
pip3 install dist/rendercontroller-{version}.tar.gz
- Create the work directory and log file.
mkdir /var/rendercontroller
touch /var/log/rendercontroller.log
- Make sure both are writable by the user that will run the server.
- Edit the
/etc/rendercontroller.conf
to set up your render nodes and SSH credentials. - Configure service to start on boot.
- If using Linux with Systemd, there's a sample service file in
python/systemd/rendercontroller.service
- If using Linux with Systemd, there's a sample service file in
- nodejs 10.14.2+
- npm 6.4.1+
- A web server. If you're only hosting this app and don't need any special features, serve is a simple option.
- Install Dependencies
- RHEL/CentOS 7: Build nodejs from source or use one of the offical linux binaries from nodejs.org. The RPM verion in EPEL is too old (as of Dec 2018).
- MacOS:
brew install node
- Download the latest version
git clone https://github.com/jbadson/render_controller.git
- Edit
.env.production
with the correct host and port for your backend API. - Build the production package
cd render_controller/react && npm run build
- Copy contents of the
build
directory to a suitable place and start your web server. For details, see the official docs on deploying a React app.
Endpoint | Description |
---|---|
/job/new | Start a new job |
/job/summary | Summary info about all jobs on serve |
/job/status | Detailed status for all jobs on server |
/job/status/{job_id} | Detailed status for a given job |
/job/start/{job_id} | Start a given job |
/job/stop/{job_id} | Stop a given job |
/job/enqueue/{job_id} | Place a stopped job back in render queue |
/job/delete/{job_id} | Remove a given job from the server |
/node/list | List render nodes |
/node/enable/{node_name}/{job_id} | Enable a render node for a given job |
/node/disable/{node_name}/{job_id} | Disable a render node for a given job |
/storage/ls | List the contents of a directory on shared storage. Access is restricted to contents of the filesystem_base_dir set in the config file. |
/config/autostart | Returns autostart state |
/config/autostart/enable | Enables autostart |
/config/autostart/disable | Disables autostart |
I started writing this software in early 2014 while working for a small scientific animation group (igp.colorado.edu). I was interested in learning to code, and we needed something to help us distribute frames to our render machines, so this seemed like a good first project.
Although it served its purpose well, the code quality is what you'd expect from a total beginner. It really should be rewritten from the ground up, but I moved on from that job in early 2016 and the project went on hiatus.
The animation group is being resurrected in early 2019, so I've started making improvements for the new group of people who will use this software. Most importantly, the GUI client was replaced with a React web frontend, the custom network protocol was replaced with a REST API, and some new interface classes added in preparation for a full backend rewrite (that may or may not ever happen).