/render_controller

Network Rendering Utility for Blender and Terragen 3

Primary LanguagePythonGNU General Public License v3.0GPL-3.0

RenderController

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.

Basic Features

  • 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.

Backend Service Setup

Requirements

  • Linux or MacOS
  • Python 3.6+
  • Pip for Python 3

Installation

  1. Install Dependencies
    • RHEL/CentOS 7: yum install python36 python36-pip
    • MacOS: brew install python or use the official installer from python.org.
  2. Download and build the latest version
    • git clone https://github.com/jbadson/render_controller.git
    • cd render_controller/python && pip3 setup.py sdist
  3. Install with pip
    • pip3 install dist/rendercontroller-{version}.tar.gz
  4. 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.
  5. Edit the /etc/rendercontroller.conf to set up your render nodes and SSH credentials.
  6. Configure service to start on boot.
    • If using Linux with Systemd, there's a sample service file in python/systemd/rendercontroller.service

Web Client Setup

Requirements

  • 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.

Installation

  1. 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
  2. Download the latest version
    • git clone https://github.com/jbadson/render_controller.git
  3. Edit .env.production with the correct host and port for your backend API.
  4. Build the production package
    • cd render_controller/react && npm run build
  5. 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.

REST API Reference

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

History

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).