During my last year at Ecole des Nouvelles Images we are working on our graduation film, and as we were only a team of 5 with huge challenges (crowd, feathers, volcano explosions, water...), the production was demanding tools that would allow the team to lighten their workload to focus on essentials and artistics tasks, hence enabling them to produce more iterations to push further the quality of the movie.
Thus, I developed an automation software named Bolt, that lets users create node graphs, representing either actions or data, and connect them together in order to automate repetitive tasks(assembly/creation of lighting scenes,job submission to the renderfarm, generation of fur and feathers cache, generation of playblasts/dailies from renders, dependencies between Houdini simulations and render submission on the farm...).
To dive a bit into details, each node is composed of a python script that calls inputs and outputs (they are available as global variables). Graphs are evaluated in an acyclic and directed manner, from the first to the last node, and communication between nodes is made with their inputs and outputs.The strength of this system is that it is easily maintainable, flexible and robust. A node is defined by a text file in which there is a syntax and format to be used to define its attributes,inputs/outputs and its script, thus anyone can quickly develop a production pipeline while remaining flexible by not facing a black box as it is often the case with pipeline softwares. It also allows a limitless extensibility as you just have to create new nodes to add actions,and the refactoring of a node is easy as it is independent from the whole system. Each graph saves the content of its nodes to make sure they will function even if one or more nodes would have been updated, and we let the user decide to upgrade the node to their latest version.
I started working on this project in February 2022 and made everything from scratch using vanilla Python for the core library, and Qt5 for the interface. As the first tests were successful, the software has been used by the team. I spent almost the entire month of February developing and testing Bolt, while doing other things on the movie such as R&D for the special effects. I enhanced it and fixed bugs in the following months as we used it daily, and when a new task needed to be automated, I just had to code new nodes or use existing ones and create a graph.
I would like to enhance Bolt, but the time constraint associated with the production limited the experimentation and development time as the software needed to be quickly usable. However the ideas I have for the future could greatly improve this software and make it more efficient, for now it's only at 1% of its full potential.
Below, a graph that allows to choose a Guerilla Render scene, render options, which then generates a Guerilla Render render job and submits it to Deadline, and finally waits for it to complete and produces a video from the output of the render job,if it has completed successfully(the IfBlock node, which contains what’s on the right of the image,is computed only if a condition is true, here being that the Deadline job is complete without any error).
As you can see in this graph, there is a special node called an IfBlock, which is computed only if a condition if True. There are two other types of special nodes : SubGraph and ForBlock. A SubGraph is just a graph embedded into a node, and a ForBlock is a node that executes a graph over a list of items.
Below again, a complete overview of the application. The user interface works in “panels” that can be divided recursively, and layout these panels as we want.For now, only two panel types exist : the Graph Viewer, which allows to create, edit, save and run various graphs; and the GraphLibrary, which recursively searches through given folders for graph files, and thus lets the user work faster by dragging and dropping graph files into the Graph Viewers.